mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-29 18:27:29 +02:00
ECIES: add support for other KDFs
This commit is contained in:
@ -13843,7 +13843,9 @@ int wc_ecc_encrypt_ex(ecc_key* privKey, ecc_key* pubKey, const byte* msg,
|
||||
ret = wc_ecc_shared_secret(privKey, pubKey, sharedSecret + pubKeySz,
|
||||
&sharedSz);
|
||||
#endif
|
||||
} while (ret == WC_PENDING_E);
|
||||
}
|
||||
while (ret == WC_PENDING_E);
|
||||
|
||||
if (ret == 0) {
|
||||
#ifdef WOLFSSL_ECIES_ISO18033
|
||||
/* KDF data is encoded public key and secret. */
|
||||
@ -13855,6 +13857,30 @@ int wc_ecc_encrypt_ex(ecc_key* privKey, ecc_key* pubKey, const byte* msg,
|
||||
ctx->kdfSaltSz, ctx->kdfInfo, ctx->kdfInfoSz,
|
||||
keys, (word32)keysLen);
|
||||
break;
|
||||
case ecHKDF_SHA1 :
|
||||
ret = wc_HKDF(WC_SHA, sharedSecret, sharedSz, ctx->kdfSalt,
|
||||
ctx->kdfSaltSz, ctx->kdfInfo, ctx->kdfInfoSz,
|
||||
keys, (word32)keysLen);
|
||||
break;
|
||||
#if defined(HAVE_X963_KDF) && !defined(NO_HASH_WRAPPER)
|
||||
case ecKDF_X963_SHA1 :
|
||||
ret = wc_X963_KDF(WC_HASH_TYPE_SHA, sharedSecret, sharedSz,
|
||||
ctx->kdfInfo, ctx->kdfInfoSz, keys, (word32)keysLen);
|
||||
break;
|
||||
case ecKDF_X963_SHA256 :
|
||||
ret = wc_X963_KDF(WC_HASH_TYPE_SHA256, sharedSecret, sharedSz,
|
||||
ctx->kdfInfo, ctx->kdfInfoSz, keys, (word32)keysLen);
|
||||
break;
|
||||
case ecKDF_SHA1 :
|
||||
ret = wc_X963_KDF(WC_HASH_TYPE_SHA, sharedSecret, sharedSz,
|
||||
NULL, 0, keys, (word32)keysLen);
|
||||
break;
|
||||
case ecKDF_SHA256 :
|
||||
ret = wc_X963_KDF(WC_HASH_TYPE_SHA256, sharedSecret, sharedSz,
|
||||
NULL, 0, keys, (word32)keysLen);
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
||||
default:
|
||||
ret = BAD_FUNC_ARG;
|
||||
@ -14250,6 +14276,29 @@ int wc_ecc_decrypt(ecc_key* privKey, ecc_key* pubKey, const byte* msg,
|
||||
ctx->kdfSaltSz, ctx->kdfInfo, ctx->kdfInfoSz,
|
||||
keys, (word32)keysLen);
|
||||
break;
|
||||
case ecHKDF_SHA1 :
|
||||
ret = wc_HKDF(WC_SHA, sharedSecret, sharedSz, ctx->kdfSalt,
|
||||
ctx->kdfSaltSz, ctx->kdfInfo, ctx->kdfInfoSz,
|
||||
keys, (word32)keysLen);
|
||||
break;
|
||||
#if defined(HAVE_X963_KDF) && !defined(NO_HASH_WRAPPER)
|
||||
case ecKDF_X963_SHA1 :
|
||||
ret = wc_X963_KDF(WC_HASH_TYPE_SHA, sharedSecret, sharedSz,
|
||||
ctx->kdfInfo, ctx->kdfInfoSz, keys, (word32)keysLen);
|
||||
break;
|
||||
case ecKDF_X963_SHA256 :
|
||||
ret = wc_X963_KDF(WC_HASH_TYPE_SHA256, sharedSecret, sharedSz,
|
||||
ctx->kdfInfo, ctx->kdfInfoSz, keys, (word32)keysLen);
|
||||
break;
|
||||
case ecKDF_SHA1 :
|
||||
ret = wc_X963_KDF(WC_HASH_TYPE_SHA, sharedSecret, sharedSz,
|
||||
NULL, 0, keys, (word32)keysLen);
|
||||
break;
|
||||
case ecKDF_SHA256 :
|
||||
ret = wc_X963_KDF(WC_HASH_TYPE_SHA256, sharedSecret, sharedSz,
|
||||
NULL, 0, keys, (word32)keysLen);
|
||||
break;
|
||||
#endif
|
||||
|
||||
default:
|
||||
ret = BAD_FUNC_ARG;
|
||||
|
@ -29437,6 +29437,22 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ecc_encrypt_test(void)
|
||||
printf("ECIES: AES_128_CBC, HKDF_SHA256, HMAC_SHA256\n");
|
||||
}
|
||||
}
|
||||
#ifdef HAVE_X963_KDF
|
||||
if (ret == 0) {
|
||||
ret = ecc_encrypt_e2e_test(&rng, userA, userB, ecAES_128_CBC,
|
||||
ecKDF_X963_SHA256, ecHMAC_SHA256);
|
||||
if (ret != 0) {
|
||||
printf("ECIES: AES_128_CBC, KDF_X963_SHA256, HMAC_SHA256\n");
|
||||
}
|
||||
}
|
||||
if (ret == 0) {
|
||||
ret = ecc_encrypt_e2e_test(&rng, userA, userB, ecAES_128_CBC,
|
||||
ecKDF_SHA256, ecHMAC_SHA256);
|
||||
if (ret != 0) {
|
||||
printf("ECIES: AES_128_CBC, KDF_SHA256, HMAC_SHA256\n");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WOLFSSL_AES_256
|
||||
if (ret == 0) {
|
||||
|
@ -895,8 +895,12 @@ enum ecEncAlgo {
|
||||
};
|
||||
|
||||
enum ecKdfAlgo {
|
||||
ecHKDF_SHA256 = 1, /* default */
|
||||
ecHKDF_SHA1 = 2
|
||||
ecHKDF_SHA256 = 1, /* default */
|
||||
ecHKDF_SHA1 = 2,
|
||||
ecKDF_X963_SHA1 = 3,
|
||||
ecKDF_X963_SHA256 = 4,
|
||||
ecKDF_SHA1 = 5,
|
||||
ecKDF_SHA256 = 6
|
||||
};
|
||||
|
||||
enum ecMacAlgo {
|
||||
|
Reference in New Issue
Block a user