mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 19:24:42 +02:00
added additional curve25519 generic test
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user