@@ -50,6 +50,12 @@ int test_wc_InitBlake2b(void)
5050 ExpectIntEQ (wc_InitBlake2b (& blake , 128 ), WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
5151 ExpectIntEQ (wc_InitBlake2b (NULL , WC_BLAKE2B_DIGEST_SIZE ),
5252 WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
53+ /* digestSz values that truncate via (byte) cast to a valid size must be
54+ * rejected: 257 mod 256 = 1, 320 mod 256 = 64 - both within BLAKE2B range */
55+ ExpectIntEQ (wc_InitBlake2b (& blake , 257 ),
56+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
57+ ExpectIntEQ (wc_InitBlake2b (& blake , 256 + BLAKE2B_OUTBYTES ),
58+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
5359
5460 /* Test good arg. */
5561 ExpectIntEQ (wc_InitBlake2b (& blake , WC_BLAKE2B_DIGEST_SIZE ), 0 );
@@ -82,6 +88,12 @@ int test_wc_InitBlake2b_WithKey(void)
8288 ExpectIntEQ (wc_InitBlake2b_WithKey (NULL , digestSz , key , keylen ),
8389 WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
8490
91+ /* digestSz that truncates to a valid byte-sized value must be rejected */
92+ ExpectIntEQ (wc_InitBlake2b_WithKey (& blake , 257 , NULL , keylen ),
93+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
94+ ExpectIntEQ (wc_InitBlake2b_WithKey (& blake , 256 + BLAKE2B_OUTBYTES , NULL , keylen ),
95+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
96+
8597 /* Test good arg. */
8698 ExpectIntEQ (wc_InitBlake2b_WithKey (& blake , digestSz , NULL , keylen ), 0 );
8799 ExpectIntEQ (wc_InitBlake2b_WithKey (& blake , digestSz , key , keylen ), 0 );
@@ -127,8 +139,14 @@ int test_wc_Blake2bFinal(void)
127139 ExpectIntEQ (wc_Blake2bFinal (& blake , NULL , 0 ),
128140 WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
129141 ExpectIntEQ (wc_Blake2bFinal (NULL , hash , 0 ), WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
142+ /* requestSz that truncates to valid byte must be rejected */
143+ ExpectIntEQ (wc_Blake2bFinal (& blake , hash , 257 ),
144+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
145+ ExpectIntEQ (wc_Blake2bFinal (& blake , hash , 256 + BLAKE2B_OUTBYTES ),
146+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
130147
131148 /* Test good args. */
149+ ExpectIntEQ (wc_InitBlake2b (& blake , WC_BLAKE2B_DIGEST_SIZE ), 0 );
132150 ExpectIntEQ (wc_Blake2bFinal (& blake , hash , WC_BLAKE2B_DIGEST_SIZE ), 0 );
133151#endif
134152 return EXPECT_RESULT ();
@@ -322,6 +340,12 @@ int test_wc_InitBlake2s(void)
322340 ExpectIntEQ (wc_InitBlake2s (& blake , 128 ), WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
323341 ExpectIntEQ (wc_InitBlake2s (NULL , WC_BLAKE2S_DIGEST_SIZE ),
324342 WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
343+ /* digestSz that truncates via (byte) cast to a valid size must be rejected:
344+ * 257 mod 256 = 1, 288 mod 256 = 32 - both within BLAKE2S range */
345+ ExpectIntEQ (wc_InitBlake2s (& blake , 257 ),
346+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
347+ ExpectIntEQ (wc_InitBlake2s (& blake , 256 + BLAKE2S_OUTBYTES ),
348+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
325349
326350 /* Test good arg. */
327351 ExpectIntEQ (wc_InitBlake2s (& blake , WC_BLAKE2S_DIGEST_SIZE ), 0 );
@@ -352,6 +376,12 @@ int test_wc_InitBlake2s_WithKey(void)
352376 ExpectIntEQ (wc_InitBlake2s_WithKey (NULL , digestSz , key , keylen ),
353377 WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
354378
379+ /* digestSz that truncates to a valid byte-sized value must be rejected */
380+ ExpectIntEQ (wc_InitBlake2s_WithKey (& blake , 257 , NULL , keylen ),
381+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
382+ ExpectIntEQ (wc_InitBlake2s_WithKey (& blake , 256 + BLAKE2S_OUTBYTES , NULL , keylen ),
383+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
384+
355385 /* Test good arg. */
356386 ExpectIntEQ (wc_InitBlake2s_WithKey (& blake , digestSz , NULL , keylen ), 0 );
357387 ExpectIntEQ (wc_InitBlake2s_WithKey (& blake , digestSz , key , keylen ), 0 );
@@ -397,8 +427,14 @@ int test_wc_Blake2sFinal(void)
397427 ExpectIntEQ (wc_Blake2sFinal (& blake , NULL , 0 ),
398428 WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
399429 ExpectIntEQ (wc_Blake2sFinal (NULL , hash , 0 ), WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
430+ /* requestSz that truncates to valid byte must be rejected */
431+ ExpectIntEQ (wc_Blake2sFinal (& blake , hash , 257 ),
432+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
433+ ExpectIntEQ (wc_Blake2sFinal (& blake , hash , 256 + BLAKE2S_OUTBYTES ),
434+ WC_NO_ERR_TRACE (BAD_FUNC_ARG ));
400435
401436 /* Test good args. */
437+ ExpectIntEQ (wc_InitBlake2s (& blake , WC_BLAKE2S_DIGEST_SIZE ), 0 );
402438 ExpectIntEQ (wc_Blake2sFinal (& blake , hash , WC_BLAKE2S_DIGEST_SIZE ), 0 );
403439#endif
404440 return EXPECT_RESULT ();
0 commit comments