mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-08 10:40:48 +02:00
tests: cover private-key flag rejection on export
This commit is contained in:
@@ -444,14 +444,17 @@ int test_wc_curve25519_export_private_raw_ex(void)
|
||||
EXPECT_DECLS;
|
||||
#if defined(HAVE_CURVE25519)
|
||||
curve25519_key key;
|
||||
WC_RNG rng;
|
||||
byte out[CURVE25519_KEYSIZE];
|
||||
word32 outLen = sizeof(out);
|
||||
int endian = EC25519_BIG_ENDIAN;
|
||||
|
||||
XMEMSET(&rng, 0, sizeof(WC_RNG));
|
||||
ExpectIntEQ(wc_curve25519_init(&key), 0);
|
||||
|
||||
/* Reject export when private key not set (privSet == 0). */
|
||||
ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, &outLen, endian),
|
||||
0);
|
||||
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
|
||||
/* test bad cases */
|
||||
ExpectIntEQ(wc_curve25519_export_private_raw_ex(NULL, NULL, NULL, endian),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
@@ -461,12 +464,15 @@ int test_wc_curve25519_export_private_raw_ex(void)
|
||||
endian), WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, NULL, endian),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, &outLen,
|
||||
EC25519_LITTLE_ENDIAN), 0);
|
||||
outLen = outLen - 2;
|
||||
|
||||
/* Populate the key, then exercise the buffer-too-small path. */
|
||||
ExpectIntEQ(wc_InitRng(&rng), 0);
|
||||
ExpectIntEQ(wc_curve25519_make_key(&rng, CURVE25519_KEYSIZE, &key), 0);
|
||||
outLen = CURVE25519_KEYSIZE - 1;
|
||||
ExpectIntEQ(wc_curve25519_export_private_raw_ex(&key, out, &outLen, endian),
|
||||
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
|
||||
|
||||
DoExpectIntEQ(wc_FreeRng(&rng), 0);
|
||||
wc_curve25519_free(&key);
|
||||
#endif
|
||||
return EXPECT_RESULT();
|
||||
|
||||
@@ -164,13 +164,16 @@ int test_wc_curve448_export_private_raw_ex(void)
|
||||
EXPECT_DECLS;
|
||||
#if defined(HAVE_CURVE448)
|
||||
curve448_key key;
|
||||
WC_RNG rng;
|
||||
byte out[CURVE448_KEY_SIZE];
|
||||
word32 outLen = sizeof(out);
|
||||
int endian = EC448_BIG_ENDIAN;
|
||||
|
||||
XMEMSET(&rng, 0, sizeof(WC_RNG));
|
||||
ExpectIntEQ(wc_curve448_init(&key), 0);
|
||||
/* Reject export when private key not set (privSet == 0). */
|
||||
ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, &outLen, endian),
|
||||
0);
|
||||
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
|
||||
/* test bad cases */
|
||||
ExpectIntEQ(wc_curve448_export_private_raw_ex(NULL, NULL, NULL, endian),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
@@ -180,12 +183,15 @@ int test_wc_curve448_export_private_raw_ex(void)
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, NULL, endian),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, &outLen,
|
||||
EC448_LITTLE_ENDIAN), 0);
|
||||
outLen = outLen - 2;
|
||||
|
||||
/* Populate the key, then exercise the buffer-too-small path. */
|
||||
ExpectIntEQ(wc_InitRng(&rng), 0);
|
||||
ExpectIntEQ(wc_curve448_make_key(&rng, CURVE448_KEY_SIZE, &key), 0);
|
||||
outLen = CURVE448_KEY_SIZE - 1;
|
||||
ExpectIntEQ(wc_curve448_export_private_raw_ex(&key, out, &outLen, endian),
|
||||
WC_NO_ERR_TRACE(ECC_BAD_ARG_E));
|
||||
|
||||
DoExpectIntEQ(wc_FreeRng(&rng), 0);
|
||||
wc_curve448_free(&key);
|
||||
#endif
|
||||
return EXPECT_RESULT();
|
||||
|
||||
@@ -347,6 +347,13 @@ int test_wc_ed25519_export(void)
|
||||
XMEMSET(&rng, 0, sizeof(WC_RNG));
|
||||
|
||||
ExpectIntEQ(wc_ed25519_init(&key), 0);
|
||||
/* Reject export when private key not set. */
|
||||
PRIVATE_KEY_UNLOCK();
|
||||
ExpectIntEQ(wc_ed25519_export_private_only(&key, priv, &privSz),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
ExpectIntEQ(wc_ed25519_export_private(&key, priv, &privSz),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
PRIVATE_KEY_LOCK();
|
||||
ExpectIntEQ(wc_InitRng(&rng), 0);
|
||||
#ifdef HAVE_ED25519_MAKE_KEY
|
||||
ExpectIntEQ(wc_ed25519_make_key(&rng, ED25519_KEY_SIZE, &key), 0);
|
||||
@@ -379,6 +386,20 @@ int test_wc_ed25519_export(void)
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
PRIVATE_KEY_LOCK();
|
||||
|
||||
#ifdef HAVE_ED25519_KEY_IMPORT
|
||||
/* Public-only key: re-init and import just the public part; private
|
||||
* exports must still fail with privKeySet == 0. */
|
||||
wc_ed25519_free(&key);
|
||||
ExpectIntEQ(wc_ed25519_init(&key), 0);
|
||||
ExpectIntEQ(wc_ed25519_import_public(pub, pubSz, &key), 0);
|
||||
PRIVATE_KEY_UNLOCK();
|
||||
ExpectIntEQ(wc_ed25519_export_private_only(&key, priv, &privSz),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
ExpectIntEQ(wc_ed25519_export_private(&key, priv, &privSz),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
PRIVATE_KEY_LOCK();
|
||||
#endif
|
||||
|
||||
DoExpectIntEQ(wc_FreeRng(&rng), 0);
|
||||
wc_ed25519_free(&key);
|
||||
#endif
|
||||
|
||||
@@ -324,6 +324,13 @@ int test_wc_ed448_export(void)
|
||||
XMEMSET(&rng, 0, sizeof(WC_RNG));
|
||||
|
||||
ExpectIntEQ(wc_ed448_init(&key), 0);
|
||||
/* Reject export when private key not set. */
|
||||
PRIVATE_KEY_UNLOCK();
|
||||
ExpectIntEQ(wc_ed448_export_private_only(&key, priv, &privSz),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
ExpectIntEQ(wc_ed448_export_private(&key, priv, &privSz),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
PRIVATE_KEY_LOCK();
|
||||
ExpectIntEQ(wc_InitRng(&rng), 0);
|
||||
ExpectIntEQ(wc_ed448_make_key(&rng, ED448_KEY_SIZE, &key), 0);
|
||||
|
||||
@@ -351,6 +358,20 @@ int test_wc_ed448_export(void)
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
PRIVATE_KEY_LOCK();
|
||||
|
||||
#ifdef HAVE_ED448_KEY_IMPORT
|
||||
/* Public-only key: re-init and import just the public part; private
|
||||
* exports must still fail with privKeySet == 0. */
|
||||
wc_ed448_free(&key);
|
||||
ExpectIntEQ(wc_ed448_init(&key), 0);
|
||||
ExpectIntEQ(wc_ed448_import_public(pub, pubSz, &key), 0);
|
||||
PRIVATE_KEY_UNLOCK();
|
||||
ExpectIntEQ(wc_ed448_export_private_only(&key, priv, &privSz),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
ExpectIntEQ(wc_ed448_export_private(&key, priv, &privSz),
|
||||
WC_NO_ERR_TRACE(BAD_FUNC_ARG));
|
||||
PRIVATE_KEY_LOCK();
|
||||
#endif
|
||||
|
||||
DoExpectIntEQ(wc_FreeRng(&rng), 0);
|
||||
wc_ed448_free(&key);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user