From 39974a4f62df74c8a32dbe4e80ade84d00f6976d Mon Sep 17 00:00:00 2001 From: Chris Conlon Date: Thu, 20 Aug 2026 16:47:19 -0600 Subject: [PATCH] F-5225: validate ChaCha IV length before native SetIV read --- jni/jni_chacha.c | 4 +++- .../com/wolfssl/wolfcrypt/test/ChachaTest.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/jni/jni_chacha.c b/jni/jni_chacha.c index 614b2233..680308ae 100644 --- a/jni/jni_chacha.c +++ b/jni/jni_chacha.c @@ -72,6 +72,7 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Chacha_wc_1Chacha_1setIV int ret = 0; ChaCha* chacha = NULL; byte* iv = NULL; + word32 ivSz = 0; chacha = (ChaCha*)(uintptr_t)getNativeStruct(env, this); if ((*env)->ExceptionOccurred(env)) { @@ -79,8 +80,9 @@ JNIEXPORT void JNICALL Java_com_wolfssl_wolfcrypt_Chacha_wc_1Chacha_1setIV return; } iv = getByteArray(env, iv_object); + ivSz = getByteArrayLength(env, iv_object); - if (chacha == NULL || iv == NULL) { + if (chacha == NULL || iv == NULL || ivSz != CHACHA_IV_BYTES) { ret = BAD_FUNC_ARG; } diff --git a/src/test/java/com/wolfssl/wolfcrypt/test/ChachaTest.java b/src/test/java/com/wolfssl/wolfcrypt/test/ChachaTest.java index 5ffd5527..4dc5a735 100644 --- a/src/test/java/com/wolfssl/wolfcrypt/test/ChachaTest.java +++ b/src/test/java/com/wolfssl/wolfcrypt/test/ChachaTest.java @@ -132,6 +132,22 @@ public class ChachaTest { /* test must throw */ } + /* IV shorter than 12 bytes should be rejected */ + try { + chacha.setIV(new byte[4]); + fail("IV shorter than 12 bytes should be rejected."); + } catch (WolfCryptException e) { + /* test must throw */ + } + + /* An IV longer than 12 bytes is not a valid ChaCha nonce */ + try { + chacha.setIV(new byte[16]); + fail("IV longer than 12 bytes should be rejected."); + } catch (WolfCryptException e) { + /* test must throw */ + } + chacha.setIV(IV); chacha.releaseNativeStruct(); }