added additional curve25519 generic test

This commit is contained in:
Brett Nicholas
2024-10-30 11:03:59 -06:00
parent 97a370ed08
commit 62d7e90352

View File

@@ -35098,6 +35098,98 @@ static wc_test_ret_t curve255519_der_test(void)
ret = WC_TEST_RET_ENC_NC;
}
/* Test decode/encode of a key file containing both public and private
* fields */
if (ret == 0) {
XMEMSET(&key, 0 , sizeof(key));
/* Decode public key */
idx = 0;
ret = wc_Curve25519KeyDecode(kCurve25519PubDer, &idx, &key,
(word32)sizeof(kCurve25519PubDer));
if (ret < 0) {
ret = WC_TEST_RET_ENC_EC(ret);
}
/* Decode private key */
idx = 0;
ret = wc_Curve25519KeyDecode(kCurve25519PrivDer, &idx, &key,
(word32)sizeof(kCurve25519PrivDer));
if (ret < 0) {
ret = WC_TEST_RET_ENC_EC(ret);
}
/* Both public and private flags should be set */
if ((ret == 0) && (!key.pubSet && !key.privSet)) {
ret = WC_TEST_RET_ENC_NC;
}
if (ret == 0) {
/* Export key to temporary DER */
ret = wc_Curve25519KeyToDer(&key, output, sizeof(output), 1);
if (ret < 0) {
ret = WC_TEST_RET_ENC_EC(ret);
}
/* Re-import temporary DER */
idx = 0;
ret = wc_Curve25519KeyDecode(output, &idx, &key, sizeof(output));
if (ret < 0) {
ret = WC_TEST_RET_ENC_EC(ret);
}
/* Ensure public and private keys survived combined keypair
* export/import by re-exporting DER for private and public keys,
* individually, and re-checking output against known good vectors.
* This is slightly circuitous but does test the functionality
* without requiring the addition of new test keys */
if (ret == 0) {
idx = 0;
ret = wc_Curve25519PrivateKeyDecode(kCurve25519PrivDer, &idx,
&key, (word32)sizeof(kCurve25519PrivDer));
if (ret < 0)
ret = WC_TEST_RET_ENC_EC(ret);
}
if (ret == 0) {
outputSz = (word32)sizeof(output);
ret = wc_Curve25519PrivateKeyToDer(&key, output, outputSz);
if (ret >= 0) {
outputSz = (word32)ret;
ret = 0;
}
else {
ret = WC_TEST_RET_ENC_EC(ret);
}
}
if ((ret == 0) &&
(outputSz != (word32)sizeof(kCurve25519PrivDer) ||
XMEMCMP(output, kCurve25519PrivDer, outputSz) != 0)) {
ret = WC_TEST_RET_ENC_NC;
}
if (ret == 0) {
idx = 0;
ret = wc_Curve25519PublicKeyDecode(kCurve25519PubDer, &idx,
&key, (word32)sizeof(kCurve25519PubDer));
if (ret < 0)
ret = WC_TEST_RET_ENC_EC(ret);
}
if (ret == 0) {
outputSz = (word32)sizeof(output);
ret = wc_Curve25519PublicKeyToDer(&key, output, outputSz, 1);
if (ret >= 0) {
outputSz = (word32)ret;
ret = 0;
}
else {
ret = WC_TEST_RET_ENC_EC(ret);
}
}
if ((ret == 0) &&
(outputSz != (word32)sizeof(kCurve25519PubDer) ||
XMEMCMP(output, kCurve25519PubDer, outputSz) != 0)) {
ret = WC_TEST_RET_ENC_NC;
}
}
}
wc_curve25519_free(&key);
return ret;