Skip to content

Commit a77e0bc

Browse files
committed
tests: cover private-key flag rejection on export
1 parent 4d5a7dc commit a77e0bc

4 files changed

Lines changed: 58 additions & 8 deletions

File tree

tests/api/test_curve25519.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -444,14 +444,17 @@ int test_wc_curve25519_export_private_raw_ex(void)
444444
EXPECT_DECLS;
445445
#if defined(HAVE_CURVE25519)
446446
curve25519_key key;
447+
WC_RNG rng;
447448
byte out[CURVE25519_KEYSIZE];
448449
word32 outLen = sizeof(out);
449450
int endian = EC25519_BIG_ENDIAN;
450451

452+
XMEMSET(&rng, 0, sizeof(WC_RNG));
451453
ExpectIntEQ(wc_curve25519_init(&key), 0);
452454

455+
/* Reject export when private key not set (privSet == 0). */
453456
ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, &outLen, endian),
454-
0);
457+
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
455458
/* test bad cases */
456459
ExpectIntEQ(wc_curve25519_export_private_raw_ex(NULL, NULL, NULL, endian),
457460
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
@@ -461,12 +464,15 @@ int test_wc_curve25519_export_private_raw_ex(void)
461464
endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG));
462465
ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, NULL, endian),
463466
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
464-
ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, &outLen,
465-
EC25519_LITTLE_ENDIAN), 0);
466-
outLen = outLen - 2;
467+
468+
/* Populate the key, then exercise the buffer-too-small path. */
469+
ExpectIntEQ(wc_InitRng(&rng), 0);
470+
ExpectIntEQ(wc_curve25519_make_key(&rng, CURVE25519_KEYSIZE, &key), 0);
471+
outLen = CURVE25519_KEYSIZE - 1;
467472
ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, &outLen, endian),
468473
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
469474

475+
DoExpectIntEQ(wc_FreeRng(&rng), 0);
470476
wc_curve25519_free(&key);
471477
#endif
472478
return EXPECT_RESULT();

tests/api/test_curve448.c

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,16 @@ int test_wc_curve448_export_private_raw_ex(void)
164164
EXPECT_DECLS;
165165
#if defined(HAVE_CURVE448)
166166
curve448_key key;
167+
WC_RNG rng;
167168
byte out[CURVE448_KEY_SIZE];
168169
word32 outLen = sizeof(out);
169170
int endian = EC448_BIG_ENDIAN;
170171

172+
XMEMSET(&rng, 0, sizeof(WC_RNG));
171173
ExpectIntEQ(wc_curve448_init(&key), 0);
174+
/* Reject export when private key not set (privSet == 0). */
172175
ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, &outLen, endian),
173-
0);
176+
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
174177
/* test bad cases */
175178
ExpectIntEQ(wc_curve448_export_private_raw_ex(NULL, NULL, NULL, endian),
176179
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
@@ -180,12 +183,15 @@ int test_wc_curve448_export_private_raw_ex(void)
180183
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
181184
ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, NULL, endian),
182185
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
183-
ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, &outLen,
184-
EC448_LITTLE_ENDIAN), 0);
185-
outLen = outLen - 2;
186+
187+
/* Populate the key, then exercise the buffer-too-small path. */
188+
ExpectIntEQ(wc_InitRng(&rng), 0);
189+
ExpectIntEQ(wc_curve448_make_key(&rng, CURVE448_KEY_SIZE, &key), 0);
190+
outLen = CURVE448_KEY_SIZE - 1;
186191
ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, &outLen, endian),
187192
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
188193

194+
DoExpectIntEQ(wc_FreeRng(&rng), 0);
189195
wc_curve448_free(&key);
190196
#endif
191197
return EXPECT_RESULT();

tests/api/test_ed25519.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,11 @@ int test_wc_ed25519_export(void)
347347
XMEMSET(&rng, 0, sizeof(WC_RNG));
348348

349349
ExpectIntEQ(wc_ed25519_init(&key), 0);
350+
/* Reject export when private key not set. */
351+
ExpectIntEQ(wc_ed25519_export_private_only(&key, priv, &privSz),
352+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
353+
ExpectIntEQ(wc_ed25519_export_private(&key, priv, &privSz),
354+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
350355
ExpectIntEQ(wc_InitRng(&rng), 0);
351356
#ifdef HAVE_ED25519_MAKE_KEY
352357
ExpectIntEQ(wc_ed25519_make_key(&rng, ED25519_KEY_SIZE, &key), 0);
@@ -379,6 +384,20 @@ int test_wc_ed25519_export(void)
379384
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
380385
PRIVATE_KEY_LOCK();
381386

387+
#ifdef HAVE_ED25519_KEY_IMPORT
388+
/* Public-only key: re-init and import just the public part; private
389+
* exports must still fail with privKeySet == 0. */
390+
wc_ed25519_free(&key);
391+
ExpectIntEQ(wc_ed25519_init(&key), 0);
392+
ExpectIntEQ(wc_ed25519_import_public(pub, pubSz, &key), 0);
393+
PRIVATE_KEY_UNLOCK();
394+
ExpectIntEQ(wc_ed25519_export_private_only(&key, priv, &privSz),
395+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
396+
ExpectIntEQ(wc_ed25519_export_private(&key, priv, &privSz),
397+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
398+
PRIVATE_KEY_LOCK();
399+
#endif
400+
382401
DoExpectIntEQ(wc_FreeRng(&rng), 0);
383402
wc_ed25519_free(&key);
384403
#endif

tests/api/test_ed448.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,11 @@ int test_wc_ed448_export(void)
324324
XMEMSET(&rng, 0, sizeof(WC_RNG));
325325

326326
ExpectIntEQ(wc_ed448_init(&key), 0);
327+
/* Reject export when private key not set. */
328+
ExpectIntEQ(wc_ed448_export_private_only(&key, priv, &privSz),
329+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
330+
ExpectIntEQ(wc_ed448_export_private(&key, priv, &privSz),
331+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
327332
ExpectIntEQ(wc_InitRng(&rng), 0);
328333
ExpectIntEQ(wc_ed448_make_key(&rng, ED448_KEY_SIZE, &key), 0);
329334

@@ -351,6 +356,20 @@ int test_wc_ed448_export(void)
351356
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
352357
PRIVATE_KEY_LOCK();
353358

359+
#ifdef HAVE_ED448_KEY_IMPORT
360+
/* Public-only key: re-init and import just the public part; private
361+
* exports must still fail with privKeySet == 0. */
362+
wc_ed448_free(&key);
363+
ExpectIntEQ(wc_ed448_init(&key), 0);
364+
ExpectIntEQ(wc_ed448_import_public(pub, pubSz, &key), 0);
365+
PRIVATE_KEY_UNLOCK();
366+
ExpectIntEQ(wc_ed448_export_private_only(&key, priv, &privSz),
367+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
368+
ExpectIntEQ(wc_ed448_export_private(&key, priv, &privSz),
369+
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
370+
PRIVATE_KEY_LOCK();
371+
#endif
372+
354373
DoExpectIntEQ(wc_FreeRng(&rng), 0);
355374
wc_ed448_free(&key);
356375
#endif

0 commit comments

Comments
 (0)