@@ -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