Skip to content

Commit 82503a3

Browse files
committed
F-5037: reject negative key length in PKCS12 PBKDF JNI wrapper
1 parent de66edb commit 82503a3

2 files changed

Lines changed: 50 additions & 2 deletions

File tree

jni/jni_pwdbased.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_Pwdbased_wc_1PKCS12_1PBK
5252
jbyteArray result = NULL;
5353
(void)jcl;
5454

55-
if (env == NULL || kLen == 0) {
55+
if (env == NULL || kLen <= 0) {
5656
throwWolfCryptExceptionFromError(env, BAD_FUNC_ARG);
5757
return NULL;
5858
}
@@ -147,7 +147,7 @@ JNIEXPORT jbyteArray JNICALL Java_com_wolfssl_wolfcrypt_Pwdbased_wc_1PBKDF2
147147
jbyteArray result = NULL;
148148
(void)jcl;
149149

150-
if (env == NULL || kLen == 0) {
150+
if (env == NULL || kLen <= 0) {
151151
throwWolfCryptExceptionFromError(env, BAD_FUNC_ARG);
152152
return NULL;
153153
}

src/test/java/com/wolfssl/wolfcrypt/test/PwdbasedTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,4 +134,52 @@ public void testPkcs12PbkdfDoesNotModifyPassword() {
134134
assertArrayEquals("PKCS12_PBKDF modified caller password array",
135135
passCopy, pass);
136136
}
137+
138+
/**
139+
* PBKDF2 must reject zero/negative key lengths with BAD_FUNC_ARG.
140+
*/
141+
@Test
142+
public void testPbkdf2RejectsNonPositiveKeyLength() {
143+
144+
Assume.assumeTrue("PBKDF2 not compiled in native wolfSSL",
145+
FeatureDetect.Pbkdf2Enabled());
146+
147+
byte[] pass = makePassword();
148+
byte[] salt = new byte[] {1, 2, 3, 4, 5, 6, 7, 8};
149+
150+
for (int kLen : new int[] {-1, 0}) {
151+
try {
152+
Pwdbased.PBKDF2(pass, salt, 100, kLen,
153+
WolfCrypt.WC_HASH_TYPE_SHA256);
154+
fail("PBKDF2 should reject kLen: " + kLen);
155+
} catch (WolfCryptException e) {
156+
assertEquals("kLen " + kLen + " must map to BAD_FUNC_ARG",
157+
WolfCryptError.BAD_FUNC_ARG, e.getError());
158+
}
159+
}
160+
}
161+
162+
/**
163+
* PKCS12 PBKDF must reject zero/negative key lengths with BAD_FUNC_ARG.
164+
*/
165+
@Test
166+
public void testPkcs12PbkdfRejectsNonPositiveKeyLength() {
167+
168+
byte[] pass = makePassword();
169+
byte[] salt = new byte[] {1, 2, 3, 4, 5, 6, 7, 8};
170+
171+
for (int kLen : new int[] {-1, 0}) {
172+
try {
173+
Pwdbased.PKCS12_PBKDF(pass, salt, 100, kLen,
174+
WolfCrypt.WC_HASH_TYPE_SHA256, 1);
175+
fail("PKCS12_PBKDF should reject kLen: " + kLen);
176+
} catch (WolfCryptException e) {
177+
Assume.assumeTrue(
178+
"PKCS12 PBKDF not compiled in native wolfSSL",
179+
e.getError() != WolfCryptError.NOT_COMPILED_IN);
180+
assertEquals("kLen " + kLen + " must map to BAD_FUNC_ARG",
181+
WolfCryptError.BAD_FUNC_ARG, e.getError());
182+
}
183+
}
184+
}
137185
}

0 commit comments

Comments
 (0)