@@ -323,6 +323,42 @@ int test_wolfSSL_BN_enc_dec(void)
323323 ExpectNotNull (BN_bin2bn (binNum , sizeof (binNum ), b ));
324324 ExpectIntEQ (BN_cmp (a , b ), -1 );
325325
326+ /* BN_bn2binpad tests */
327+ {
328+ unsigned char padOut [5 ];
329+
330+ /* Invalid parameters */
331+ ExpectIntEQ (BN_bn2binpad (NULL , padOut , sizeof (padOut )), -1 );
332+ ExpectIntEQ (BN_bn2binpad (& emptyBN , padOut , sizeof (padOut )), -1 );
333+ ExpectIntEQ (BN_bn2binpad (a , NULL , sizeof (padOut )), -1 );
334+ ExpectIntEQ (BN_bn2binpad (a , padOut , -1 ), -1 );
335+ /* toLen too small for the value */
336+ ExpectNotNull (BN_bin2bn (binNum , sizeof (binNum ), b ));
337+ ExpectIntEQ (BN_bn2binpad (b , padOut , 2 ), -1 );
338+ /* Normal case: a = 2, padded to 5 bytes */
339+ XMEMSET (padOut , 0xFF , sizeof (padOut ));
340+ ExpectIntEQ (BN_bn2binpad (a , padOut , 5 ), 5 );
341+ ExpectIntEQ (padOut [0 ], 0x00 );
342+ ExpectIntEQ (padOut [1 ], 0x00 );
343+ ExpectIntEQ (padOut [2 ], 0x00 );
344+ ExpectIntEQ (padOut [3 ], 0x00 );
345+ ExpectIntEQ (padOut [4 ], 0x02 );
346+ /* Exact size (no padding needed) */
347+ ExpectIntEQ (BN_bn2binpad (a , padOut , 1 ), 1 );
348+ ExpectIntEQ (padOut [0 ], 0x02 );
349+ /* Zero value padded to 3 bytes */
350+ ExpectIntEQ (BN_set_word (a , 0 ), 1 );
351+ ExpectIntEQ (BN_bn2binpad (a , padOut , 3 ), 3 );
352+ ExpectIntEQ (padOut [0 ], 0x00 );
353+ ExpectIntEQ (padOut [1 ], 0x00 );
354+ ExpectIntEQ (padOut [2 ], 0x00 );
355+ /* toLen == 0 with zero-valued BN is valid */
356+ ExpectIntEQ (BN_bn2binpad (a , padOut , 0 ), 0 );
357+ /* toLen == 0 with non-zero BN is an error */
358+ ExpectIntEQ (BN_set_word (a , 2 ), 1 );
359+ ExpectIntEQ (BN_bn2binpad (a , padOut , 0 ), -1 );
360+ }
361+
326362 ExpectNotNull (str = BN_bn2hex (a ));
327363 ExpectNotNull (BN_hex2bn (& b , str ));
328364 ExpectIntEQ (BN_cmp (a , b ), 0 );
0 commit comments