JNI: add missing PRIVATE_KEY_UNLOCK/LOCK around PBKDF2 and key exports

pull/242/head
Chris Conlon 2026-07-21 13:42:55 -06:00
parent d0786a269f
commit 078aec9189
5 changed files with 41 additions and 0 deletions

View File

@ -27,6 +27,9 @@
#include <wolfssl/options.h>
#endif
#include <wolfssl/version.h>
#ifdef HAVE_FIPS
#include <wolfssl/wolfcrypt/fips.h>
#endif
#include <wolfssl/wolfcrypt/ed25519.h>
#include <wolfssl/wolfcrypt/asn.h>
#include <wolfssl/wolfcrypt/memory.h>
@ -321,7 +324,9 @@ Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1export_1private(
}
XMEMSET(output, 0, outputSz);
PRIVATE_KEY_UNLOCK();
ret = wc_ed25519_export_private(ed25519, output, &outputSz);
PRIVATE_KEY_LOCK();
if (ret == 0) {
result = (*env)->NewByteArray(env, outputSz);
@ -389,7 +394,9 @@ Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1export_1private_1only(
}
XMEMSET(output, 0, outputSz);
PRIVATE_KEY_UNLOCK();
ret = wc_ed25519_export_private_only(ed25519, output, &outputSz);
PRIVATE_KEY_LOCK();
if (ret == 0) {
result = (*env)->NewByteArray(env, outputSz);

View File

@ -28,6 +28,9 @@
#endif
#include <wolfssl/version.h>
#ifdef HAVE_FIPS
#include <wolfssl/wolfcrypt/fips.h>
#endif
#include <wolfssl/wolfcrypt/types.h>
#if defined(HAVE_DILITHIUM) || defined(WOLFSSL_HAVE_MLDSA)
@ -686,7 +689,9 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_MlDsa_wc_1dilithium_1exp
}
XMEMSET(output, 0, outputSz);
PRIVATE_KEY_UNLOCK();
ret = wc_MlDsaKey_ExportPrivRaw(key, output, &outputSz);
PRIVATE_KEY_LOCK();
if (ret == 0) {
result = (*env)->NewByteArray(env, outputSz);
if (result != NULL) {
@ -880,7 +885,9 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_MlDsa_wc_1Dilithium_1Key
}
/* Two-pass: first call with NULL output to get required size. */
PRIVATE_KEY_UNLOCK();
ret = wc_MlDsaKey_KeyToDer(key, NULL, 0);
PRIVATE_KEY_LOCK();
if (ret <= 0) {
throwWolfCryptExceptionFromError(env, ret);
return NULL;
@ -895,7 +902,9 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_MlDsa_wc_1Dilithium_1Key
}
XMEMSET(output, 0, outputSz);
PRIVATE_KEY_UNLOCK();
ret = wc_MlDsaKey_KeyToDer(key, output, outputSz);
PRIVATE_KEY_LOCK();
if (ret > 0) {
result = (*env)->NewByteArray(env, ret);
if (result != NULL) {
@ -1138,7 +1147,9 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_MlDsa_wc_1dilithium_1make_1key
ret = BAD_FUNC_ARG;
}
else {
PRIVATE_KEY_UNLOCK();
ret = wc_MlDsaKey_MakeKeyFromSeed(key, seed);
PRIVATE_KEY_LOCK();
}
if (ret != 0) {
@ -1938,7 +1949,9 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_MlDsa_wc_1Dilithium_1Pri
}
/* Two-pass: first call with NULL output to get required size. */
PRIVATE_KEY_UNLOCK();
ret = wc_MlDsaKey_PrivateKeyToDer(key, NULL, 0);
PRIVATE_KEY_LOCK();
if (ret <= 0) {
throwWolfCryptExceptionFromError(env, ret);
return NULL;
@ -1953,7 +1966,9 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_MlDsa_wc_1Dilithium_1Pri
}
XMEMSET(output, 0, outputSz);
PRIVATE_KEY_UNLOCK();
ret = wc_MlDsaKey_PrivateKeyToDer(key, output, outputSz);
PRIVATE_KEY_LOCK();
if (ret > 0) {
result = (*env)->NewByteArray(env, ret);
if (result != NULL) {

View File

@ -27,6 +27,9 @@
#include <wolfssl/options.h>
#endif
#include <wolfssl/version.h>
#ifdef HAVE_FIPS
#include <wolfssl/wolfcrypt/fips.h>
#endif
#include <wolfssl/wolfcrypt/types.h>
#include <wolfssl/wolfcrypt/memory.h>
#ifdef WOLFSSL_HAVE_MLKEM
@ -444,7 +447,9 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_MlKem_wc_1mlkem_1decapsu
}
XMEMSET(output, 0, ssSz);
PRIVATE_KEY_UNLOCK();
ret = wc_MlKemKey_Decapsulate(key, output, ct, ctSz);
PRIVATE_KEY_LOCK();
if (ret == 0) {
result = (*env)->NewByteArray(env, ssSz);
@ -571,7 +576,9 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_MlKem_wc_1mlkem_1export_
}
XMEMSET(output, 0, outputSz);
PRIVATE_KEY_UNLOCK();
ret = wc_MlKemKey_EncodePrivateKey(key, output, outputSz);
PRIVATE_KEY_LOCK();
if (ret == 0) {
result = (*env)->NewByteArray(env, outputSz);

View File

@ -27,6 +27,9 @@
#include <wolfssl/options.h>
#endif
#include <wolfssl/version.h>
#ifdef HAVE_FIPS
#include <wolfssl/wolfcrypt/fips.h>
#endif
#include <wolfssl/wolfcrypt/pwdbased.h>
#include <com_wolfssl_wolfcrypt_Pwdbased.h>
@ -67,8 +70,10 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_Pwdbased_wc_1PKCS12_1PBK
salt = (byte*)(*env)->GetByteArrayElements(env, saltBuf, NULL);
}
PRIVATE_KEY_UNLOCK();
ret = wc_PKCS12_PBKDF(outKey, pass, passBufLen, salt, sBufLen,
iterations, kLen, typeH, id);
PRIVATE_KEY_LOCK();
if (ret == 0) {
result = (*env)->NewByteArray(env, kLen);
if (result != NULL) {
@ -151,8 +156,10 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_Pwdbased_wc_1PBKDF2
salt = (byte*)(*env)->GetByteArrayElements(env, saltBuf, NULL);
}
PRIVATE_KEY_UNLOCK();
ret = wc_PBKDF2(outKey, pass, passBufLen, salt, sBufLen,
iterations, kLen, hashType);
PRIVATE_KEY_LOCK();
if (ret == 0) {
result = (*env)->NewByteArray(env, kLen);
if (result != NULL) {

View File

@ -28,6 +28,9 @@
#endif
#include <wolfssl/version.h>
#ifdef HAVE_FIPS
#include <wolfssl/wolfcrypt/fips.h>
#endif
#include <wolfssl/wolfcrypt/types.h>
#ifdef WOLFSSL_HAVE_SLHDSA
@ -1236,7 +1239,9 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_SlhDsa_wc_1SlhDsaKey_1ex
}
XMEMSET(output, 0, outputSz);
PRIVATE_KEY_UNLOCK();
ret = wc_SlhDsaKey_ExportPrivate(key, output, &outputSz);
PRIVATE_KEY_LOCK();
if (ret == 0) {
result = (*env)->NewByteArray(env, outputSz);
if (result != NULL) {