F-5041: zeroize native Ed25519 private key copies before JNI release

pull/263/head
Chris Conlon 2026-08-20 11:30:08 -06:00
parent f3c6ba590a
commit 5506469ed6
1 changed files with 6 additions and 2 deletions

View File

@ -186,13 +186,14 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1import_1p
byte* priv = NULL;
byte* pub = NULL;
word32 privSz = 0, pubSz = 0;
jboolean privIsCopy = JNI_FALSE;
ed25519 = (ed25519_key*) getNativeStruct(env, this);
if ((*env)->ExceptionOccurred(env)) {
/* getNativeStruct may throw exception, prevent throwing another */
return;
}
priv = getByteArray(env, priv_object);
priv = getByteArrayIsCopy(env, priv_object, &privIsCopy);
privSz = getByteArrayLength(env, priv_object);
pub = getByteArray(env, pub_object);
pubSz = getByteArrayLength(env, pub_object);
@ -214,6 +215,7 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1import_1p
LogStr("wc_ed25519_import_private_key(ed25519=%p) = %d\n", ed25519, ret);
zeroizeByteArrayCopy(priv, privSz, privIsCopy);
releaseByteArray(env, priv_object, priv, JNI_ABORT);
releaseByteArray(env, pub_object, pub, JNI_ABORT);
#else
@ -263,13 +265,14 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1import_1p
ed25519_key* ed25519 = NULL;
byte* priv = NULL;
word32 privSz = 0;
jboolean privIsCopy = JNI_FALSE;
ed25519 = (ed25519_key*) getNativeStruct(env, this);
if ((*env)->ExceptionOccurred(env)) {
/* getNativeStruct may throw exception, prevent throwing another */
return;
}
priv = getByteArray(env, priv_object);
priv = getByteArrayIsCopy(env, priv_object, &privIsCopy);
privSz = getByteArrayLength(env, priv_object);
if (!ed25519 || !priv) {
@ -284,6 +287,7 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Ed25519_wc_1ed25519_1import_1p
LogStr("wc_ed25519_import_private_key(ed25519=%p) = %d\n", ed25519, ret);
zeroizeByteArrayCopy(priv, privSz, privIsCopy);
releaseByteArray(env, priv_object, priv, JNI_ABORT);
#else
throwNotCompiledInException(env);