mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 12:14:38 +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;
|
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);
|
wc_curve25519_free(&key);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user