diff --git a/src/tls13.c b/src/tls13.c index 82f3bce84..4c29fb467 100644 --- a/src/tls13.c +++ b/src/tls13.c @@ -8887,7 +8887,7 @@ static int SendTls13CertificateVerify(WOLFSSL* ssl) ret = wc_falcon_sign_msg(args->sigData, args->sigDataSz, args->verify + HASH_SIG_SIZE + VERIFY_HEADER, (word32*)&sig->length, - (falcon_key*)ssl->hsKey); + (falcon_key*)ssl->hsKey, ssl->rng); args->length = (word16)sig->length; } #endif diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index e3b98fef4..224d55f3d 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -11788,7 +11788,7 @@ void bench_falconKeySign(byte level) x = FALCON_LEVEL5_SIG_SIZE; } - ret = wc_falcon_sign_msg(msg, sizeof(msg), sig, &x, &key); + ret = wc_falcon_sign_msg(msg, sizeof(msg), sig, &x, &key, GLOBAL_RNG); if (ret != 0) { printf("wc_falcon_sign_msg failed\n"); } diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index cbbc962be..9ca3a0656 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -28897,7 +28897,7 @@ static int MakeSignature(CertSignCtx* certSignCtx, const byte* buf, word32 sz, #if defined(HAVE_FALCON) if (!rsaKey && !eccKey && !ed25519Key && !ed448Key && falconKey) { word32 outSz = sigSz; - ret = wc_falcon_sign_msg(buf, sz, sig, &outSz, falconKey); + ret = wc_falcon_sign_msg(buf, sz, sig, &outSz, falconKey, rng); if (ret == 0) ret = outSz; } diff --git a/wolfcrypt/src/falcon.c b/wolfcrypt/src/falcon.c index ea722a20b..b1cb22949 100644 --- a/wolfcrypt/src/falcon.c +++ b/wolfcrypt/src/falcon.c @@ -59,7 +59,7 @@ */ int wc_falcon_sign_msg(const byte* in, word32 inLen, byte* out, word32 *outLen, - falcon_key* key) + falcon_key* key, WC_RNG* rng) { int ret = 0; #ifdef HAVE_LIBOQS @@ -101,6 +101,10 @@ int wc_falcon_sign_msg(const byte* in, word32 inLen, localOutLen = *outLen; } + if (ret == 0) { + ret = wolfSSL_liboqsRngMutexLock(rng); + } + if ((ret == 0) && (OQS_SIG_sign(oqssig, out, &localOutLen, in, inLen, key->k) == OQS_ERROR)) { @@ -111,6 +115,8 @@ int wc_falcon_sign_msg(const byte* in, word32 inLen, *outLen = (word32)localOutLen; } + wolfSSL_liboqsRngMutexUnlock(); + if (oqssig != NULL) { OQS_SIG_free(oqssig); } diff --git a/wolfssl/wolfcrypt/falcon.h b/wolfssl/wolfcrypt/falcon.h index cced2b051..e15fc9544 100644 --- a/wolfssl/wolfcrypt/falcon.h +++ b/wolfssl/wolfcrypt/falcon.h @@ -35,6 +35,7 @@ #ifdef HAVE_LIBOQS #include +#include #endif #ifdef __cplusplus @@ -79,7 +80,7 @@ struct falcon_key { WOLFSSL_API int wc_falcon_sign_msg(const byte* in, word32 inLen, byte* out, word32 *outLen, - falcon_key* key); + falcon_key* key, WC_RNG* rng); WOLFSSL_API int wc_falcon_verify_msg(const byte* sig, word32 sigLen, const byte* msg, word32 msgLen, int* res, falcon_key* key);