@@ -388,161 +388,122 @@ int sha3_shake_test(void)
388388#endif
389389}
390390
391+ #if defined LTC_TURBO_SHAKE
392+ static LTC_INLINE int s_turbo_shake_generate_ptn (unsigned char * buffer , long offset , long amount )
393+ {
394+ long i ;
395+
396+ LTC_ARGCHK (buffer != NULL || amount == 0 );
397+ LTC_ARGCHK (offset >= 0 );
398+ LTC_ARGCHK (amount >= 0 );
399+
400+ for (i = 0 ; i != amount ; ++ i )
401+ {
402+ buffer [i ] = ((unsigned char )(((offset + i ) % 0xfb ) & 0xff ));
403+ }
404+ return CRYPT_OK ;
405+ }
406+ #endif
407+
408+ #ifdef LTC_TURBO_SHAKE
409+ typedef struct turbo_shake_test_case {
410+ int bits_count ;
411+ unsigned long input_bytes_count , skip_digest_bytes , digest_bytes_count ;
412+ const char * expected_digest_hex ;
413+ } turbo_shake_test_case ;
414+
415+ static LTC_INLINE int s_turbo_shake_test_one (const turbo_shake_test_case * testcase , int counter )
416+ {
417+ int err ;
418+ hash_state md ;
419+ unsigned long offset ;
420+ unsigned long rem ;
421+ unsigned long count ;
422+ unsigned char input [1024 ];
423+ unsigned char digest [64 ];
424+ const char * expected_hex ;
425+ unsigned char expected_digest_bin [sizeof (digest )];
426+ unsigned long decoded ;
427+
428+ LTC_ARGCHK (testcase != NULL );
429+ LTC_ARGCHK (testcase -> bits_count == 128 || testcase -> bits_count == 256 );
430+ LTC_ARGCHK (testcase -> digest_bytes_count >= 1 );
431+ LTC_ARGCHK (testcase -> expected_digest_hex && testcase -> expected_digest_hex [0 ] != '\0' );
432+ LTC_ARGCHK (counter >= 0 );
433+
434+ if ((err = turbo_shake_init (& md , testcase -> bits_count )) != CRYPT_OK ) return err ;
435+ offset = 0 ;
436+ rem = testcase -> input_bytes_count ;
437+ do
438+ {
439+ count = rem < sizeof (input ) ? rem : sizeof (input );
440+ if ((err = s_turbo_shake_generate_ptn (input , offset , count )) != CRYPT_OK ) return err ;
441+ if ((err = turbo_shake_process (& md , input , count )) != CRYPT_OK ) return err ;
442+ offset += count ;
443+ rem -= count ;
444+ }while (rem != 0 );
445+ rem = testcase -> skip_digest_bytes ;
446+ do
447+ {
448+ count = rem < sizeof (digest ) ? rem : sizeof (digest );
449+ if ((err = turbo_shake_done (& md , digest , count )) != CRYPT_OK ) return err ;
450+ rem -= count ;
451+ }while (rem != 0 );
452+ rem = testcase -> digest_bytes_count ;
453+ expected_hex = testcase -> expected_digest_hex ;
454+ do
455+ {
456+ count = rem < sizeof (digest ) ? rem : sizeof (digest );
457+ decoded = count ;
458+ if ((err = base16_decode (expected_hex , count * 2 , expected_digest_bin , & decoded )) != CRYPT_OK ) return err ;
459+ if (decoded != (unsigned long )count ) return CRYPT_ERROR ;
460+ if ((err = turbo_shake_done (& md , digest , count )) != CRYPT_OK ) return err ;
461+ LTC_COMPARE_TESTVECTOR (digest , count , expected_digest_bin , count , "TurboSHAKE" , counter );
462+ rem -= count ;
463+ expected_hex += count * 2 ;
464+ }while (rem != 0 );
465+ return CRYPT_OK ;
466+ }
467+ #endif
468+
391469#ifdef LTC_TURBO_SHAKE
392470int turbo_shake_test (void )
393471{
394472#ifndef LTC_TEST
395473 return CRYPT_NOP ;
396474#else
397475 int counter ;
398- unsigned char hash [64 ];
399- hash_state c ;
400- int i ;
476+ int err ;
401477
402478 /* https://datatracker.ietf.org/doc/html/rfc9861#name-test-vectors */
403479 /* https://www.rfc-editor.org/rfc/rfc9861.txt */
404- const unsigned char turbo_shake_input_single_zero [] = {
405- 0x00 ,
406- };
407- const unsigned char turbo_shake_input_ptn_17_pow_1 [] = {
408- 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0a , 0x0b , 0x0c , 0x0d , 0x0e , 0x0f ,
409- 0x10 ,
410- };
411- const unsigned char turbo_shake_input_ptn_17_pow_2 [] = {
412- 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0a , 0x0b , 0x0c , 0x0d , 0x0e , 0x0f ,
413- 0x10 , 0x11 , 0x12 , 0x13 , 0x14 , 0x15 , 0x16 , 0x17 , 0x18 , 0x19 , 0x1a , 0x1b , 0x1c , 0x1d , 0x1e , 0x1f ,
414- 0x20 , 0x21 , 0x22 , 0x23 , 0x24 , 0x25 , 0x26 , 0x27 , 0x28 , 0x29 , 0x2a , 0x2b , 0x2c , 0x2d , 0x2e , 0x2f ,
415- 0x30 , 0x31 , 0x32 , 0x33 , 0x34 , 0x35 , 0x36 , 0x37 , 0x38 , 0x39 , 0x3a , 0x3b , 0x3c , 0x3d , 0x3e , 0x3f ,
416- 0x40 , 0x41 , 0x42 , 0x43 , 0x44 , 0x45 , 0x46 , 0x47 , 0x48 , 0x49 , 0x4a , 0x4b , 0x4c , 0x4d , 0x4e , 0x4f ,
417- 0x50 , 0x51 , 0x52 , 0x53 , 0x54 , 0x55 , 0x56 , 0x57 , 0x58 , 0x59 , 0x5a , 0x5b , 0x5c , 0x5d , 0x5e , 0x5f ,
418- 0x60 , 0x61 , 0x62 , 0x63 , 0x64 , 0x65 , 0x66 , 0x67 , 0x68 , 0x69 , 0x6a , 0x6b , 0x6c , 0x6d , 0x6e , 0x6f ,
419- 0x70 , 0x71 , 0x72 , 0x73 , 0x74 , 0x75 , 0x76 , 0x77 , 0x78 , 0x79 , 0x7a , 0x7b , 0x7c , 0x7d , 0x7e , 0x7f ,
420- 0x80 , 0x81 , 0x82 , 0x83 , 0x84 , 0x85 , 0x86 , 0x87 , 0x88 , 0x89 , 0x8a , 0x8b , 0x8c , 0x8d , 0x8e , 0x8f ,
421- 0x90 , 0x91 , 0x92 , 0x93 , 0x94 , 0x95 , 0x96 , 0x97 , 0x98 , 0x99 , 0x9a , 0x9b , 0x9c , 0x9d , 0x9e , 0x9f ,
422- 0xa0 , 0xa1 , 0xa2 , 0xa3 , 0xa4 , 0xa5 , 0xa6 , 0xa7 , 0xa8 , 0xa9 , 0xaa , 0xab , 0xac , 0xad , 0xae , 0xaf ,
423- 0xb0 , 0xb1 , 0xb2 , 0xb3 , 0xb4 , 0xb5 , 0xb6 , 0xb7 , 0xb8 , 0xb9 , 0xba , 0xbb , 0xbc , 0xbd , 0xbe , 0xbf ,
424- 0xc0 , 0xc1 , 0xc2 , 0xc3 , 0xc4 , 0xc5 , 0xc6 , 0xc7 , 0xc8 , 0xc9 , 0xca , 0xcb , 0xcc , 0xcd , 0xce , 0xcf ,
425- 0xd0 , 0xd1 , 0xd2 , 0xd3 , 0xd4 , 0xd5 , 0xd6 , 0xd7 , 0xd8 , 0xd9 , 0xda , 0xdb , 0xdc , 0xdd , 0xde , 0xdf ,
426- 0xe0 , 0xe1 , 0xe2 , 0xe3 , 0xe4 , 0xe5 , 0xe6 , 0xe7 , 0xe8 , 0xe9 , 0xea , 0xeb , 0xec , 0xed , 0xee , 0xef ,
427- 0xf0 , 0xf1 , 0xf2 , 0xf3 , 0xf4 , 0xf5 , 0xf6 , 0xf7 , 0xf8 , 0xf9 , 0xfa ,
428- 0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 , 0x08 , 0x09 , 0x0a , 0x0b , 0x0c , 0x0d , 0x0e , 0x0f ,
429- 0x10 , 0x11 , 0x12 , 0x13 , 0x14 , 0x15 , 0x16 , 0x17 , 0x18 , 0x19 , 0x1a , 0x1b , 0x1c , 0x1d , 0x1e , 0x1f ,
430- 0x20 , 0x21 , 0x22 , 0x23 , 0x24 , 0x25 ,
431- };
432-
433- const unsigned char turbo_shake_128_empty [64 ] = {
434- 0x1e , 0x41 , 0x5f , 0x1c , 0x59 , 0x83 , 0xaf , 0xf2 , 0x16 , 0x92 , 0x17 , 0x27 , 0x7d , 0x17 , 0xbb , 0x53 ,
435- 0x8c , 0xd9 , 0x45 , 0xa3 , 0x97 , 0xdd , 0xec , 0x54 , 0x1f , 0x1c , 0xe4 , 0x1a , 0xf2 , 0xc1 , 0xb7 , 0x4c ,
436- 0x3e , 0x8c , 0xca , 0xe2 , 0xa4 , 0xda , 0xe5 , 0x6c , 0x84 , 0xa0 , 0x4c , 0x23 , 0x85 , 0xc0 , 0x3c , 0x15 ,
437- 0xe8 , 0x19 , 0x3b , 0xdf , 0x58 , 0x73 , 0x73 , 0x63 , 0x32 , 0x16 , 0x91 , 0xc0 , 0x54 , 0x62 , 0xc8 , 0xdf ,
438- };
439- const unsigned char turbo_shake_128_empty_10032 [32 ] = {
440- 0xa3 , 0xb9 , 0xb0 , 0x38 , 0x59 , 0x00 , 0xce , 0x76 , 0x1f , 0x22 , 0xae , 0xd5 , 0x48 , 0xe7 , 0x54 , 0xda ,
441- 0x10 , 0xa5 , 0x24 , 0x2d , 0x62 , 0xe8 , 0xc6 , 0x58 , 0xe3 , 0xf3 , 0xa9 , 0x23 , 0xa7 , 0x55 , 0x56 , 0x07 ,
442- };
443- const unsigned char turbo_shake_128_single_zero_byte [32 ] = {
444- 0x55 , 0xce , 0xdd , 0x6f , 0x60 , 0xaf , 0x7b , 0xb2 , 0x9a , 0x40 , 0x42 , 0xae , 0x83 , 0x2e , 0xf3 , 0xf5 ,
445- 0x8d , 0xb7 , 0x29 , 0x9f , 0x89 , 0x3e , 0xbb , 0x92 , 0x47 , 0x24 , 0x7d , 0x85 , 0x69 , 0x58 , 0xda , 0xa9 ,
446- };
447- const unsigned char turbo_shake_128_ptn_pow_1 [32 ] = {
448- 0x9c , 0x97 , 0xd0 , 0x36 , 0xa3 , 0xba , 0xc8 , 0x19 , 0xdb , 0x70 , 0xed , 0xe0 , 0xca , 0x55 , 0x4e , 0xc6 ,
449- 0xe4 , 0xc2 , 0xa1 , 0xa4 , 0xff , 0xbf , 0xd9 , 0xec , 0x26 , 0x9c , 0xa6 , 0xa1 , 0x11 , 0x16 , 0x12 , 0x33 ,
450- };
451- const unsigned char turbo_shake_128_ptn_pow_2 [32 ] = {
452- 0x96 , 0xc7 , 0x7c , 0x27 , 0x9e , 0x01 , 0x26 , 0xf7 , 0xfc , 0x07 , 0xc9 , 0xb0 , 0x7f , 0x5c , 0xda , 0xe1 ,
453- 0xe0 , 0xbe , 0x60 , 0xbd , 0xbe , 0x10 , 0x62 , 0x00 , 0x40 , 0xe7 , 0x5d , 0x72 , 0x23 , 0xa6 , 0x24 , 0xd2 ,
454- };
455480
456- const unsigned char turbo_shake_256_empty [64 ] = {
457- 0x36 , 0x7a , 0x32 , 0x9d , 0xaf , 0xea , 0x87 , 0x1c , 0x78 , 0x02 , 0xec , 0x67 , 0xf9 , 0x05 , 0xae , 0x13 ,
458- 0xc5 , 0x76 , 0x95 , 0xdc , 0x2c , 0x66 , 0x63 , 0xc6 , 0x10 , 0x35 , 0xf5 , 0x9a , 0x18 , 0xf8 , 0xe7 , 0xdb ,
459- 0x11 , 0xed , 0xc0 , 0xe1 , 0x2e , 0x91 , 0xea , 0x60 , 0xeb , 0x6b , 0x32 , 0xdf , 0x06 , 0xdd , 0x7f , 0x00 ,
460- 0x2f , 0xba , 0xfa , 0xbb , 0x6e , 0x13 , 0xec , 0x1c , 0xc2 , 0x0d , 0x99 , 0x55 , 0x47 , 0x60 , 0x0d , 0xb0 ,
461- };
462- const unsigned char turbo_shake_256_empty_10032 [32 ] = {
463- 0xab , 0xef , 0xa1 , 0x16 , 0x30 , 0xc6 , 0x61 , 0x26 , 0x92 , 0x49 , 0x74 , 0x26 , 0x85 , 0xec , 0x08 , 0x2f ,
464- 0x20 , 0x72 , 0x65 , 0xdc , 0xcf , 0x2f , 0x43 , 0x53 , 0x4e , 0x9c , 0x61 , 0xba , 0x0c , 0x9d , 0x1d , 0x75 ,
465- };
466- const unsigned char turbo_shake_256_single_zero_byte [64 ] = {
467- 0x3e , 0x17 , 0x12 , 0xf9 , 0x28 , 0xf8 , 0xea , 0xf1 , 0x05 , 0x46 , 0x32 , 0xb2 , 0xaa , 0x0a , 0x24 , 0x6e ,
468- 0xd8 , 0xb0 , 0xc3 , 0x78 , 0x72 , 0x8f , 0x60 , 0xbc , 0x97 , 0x04 , 0x10 , 0x15 , 0x5c , 0x28 , 0x82 , 0x0e ,
469- 0x90 , 0xcc , 0x90 , 0xd8 , 0xa3 , 0x00 , 0x6a , 0xa2 , 0x37 , 0x2c , 0x5c , 0x5e , 0xa1 , 0x76 , 0xb0 , 0x68 ,
470- 0x2b , 0xf2 , 0x2b , 0xae , 0x74 , 0x67 , 0xac , 0x94 , 0xf7 , 0x4d , 0x43 , 0xd3 , 0x9b , 0x04 , 0x82 , 0xe2 ,
471- };
472- const unsigned char turbo_shake_256_ptn_pow_1 [64 ] = {
473- 0xb3 , 0xba , 0xb0 , 0x30 , 0x0e , 0x6a , 0x19 , 0x1f , 0xbe , 0x61 , 0x37 , 0x93 , 0x98 , 0x35 , 0x92 , 0x35 ,
474- 0x78 , 0x79 , 0x4e , 0xa5 , 0x48 , 0x43 , 0xf5 , 0x01 , 0x10 , 0x90 , 0xfa , 0x2f , 0x37 , 0x80 , 0xa9 , 0xe5 ,
475- 0xcb , 0x22 , 0xc5 , 0x9d , 0x78 , 0xb4 , 0x0a , 0x0f , 0xbf , 0xf9 , 0xe6 , 0x72 , 0xc0 , 0xfb , 0xe0 , 0x97 ,
476- 0x0b , 0xd2 , 0xc8 , 0x45 , 0x09 , 0x1c , 0x60 , 0x44 , 0xd6 , 0x87 , 0x05 , 0x4d , 0xa5 , 0xd8 , 0xe9 , 0xc7 ,
481+ const turbo_shake_test_case testcases [] = {
482+ { 128 , 0 , 0 , 32 , "1e415f1c5983aff2169217277d17bb538cd945a397ddec541f1ce41af2c1b74c" },
483+ { 128 , 0 , 0 , 64 , "1e415f1c5983aff2169217277d17bb538cd945a397ddec541f1ce41af2c1b74c3e8ccae2a4dae56c84a04c2385c03c15e8193bdf58737363321691c05462c8df" },
484+ { 128 , 0 , 10000 , 32 , "a3b9b0385900ce761f22aed548e754da10a5242d62e8c658e3f3a923a7555607" },
485+ { 128 , 1 , 0 , 32 , "55cedd6f60af7bb29a4042ae832ef3f58db7299f893ebb9247247d856958daa9" },
486+ { 128 , 17 , 0 , 32 , "9c97d036a3bac819db70ede0ca554ec6e4c2a1a4ffbfd9ec269ca6a111161233" },
487+ { 128 , 17 * 17 , 0 , 32 , "96c77c279e0126f7fc07c9b07f5cdae1e0be60bdbe10620040e75d7223a624d2" },
488+ { 128 , 17 * 17 * 17 , 0 , 32 , "d4976eb56bcf118520582b709f73e1d6853e001fdaf80e1b13e0d0599d5fb372" },
489+ { 128 , 17 * 17 * 17 * 17 , 0 , 32 , "da67c7039e98bf530cf7a37830c6664e14cbab7f540f58403b1b82951318ee5c" },
490+ { 128 , 17 * 17 * 17 * 17 * 17 , 0 , 32 , "b97a906fbf83ef7c812517abf3b2d0aea0c4f60318ce11cf103925127f59eecd" },
491+ { 128 , 17 * 17 * 17 * 17 * 17 * 17 , 0 , 32 , "35cd494adeded2f25239af09a7b8ef0c4d1ca4fe2d1ac370fa63216fe7b4c2b1" },
492+ { 256 , 0 , 0 , 64 , "367a329dafea871c7802ec67f905ae13c57695dc2c6663c61035f59a18f8e7db11edc0e12e91ea60eb6b32df06dd7f002fbafabb6e13ec1cc20d995547600db0" },
493+ { 256 , 0 , 10000 , 32 , "abefa11630c661269249742685ec082f207265dccf2f43534e9c61ba0c9d1d75" },
494+ { 256 , 1 , 0 , 64 , "3e1712f928f8eaf1054632b2aa0a246ed8b0c378728f60bc970410155c28820e90cc90d8a3006aa2372c5c5ea176b0682bf22bae7467ac94f74d43d39b0482e2" },
495+ { 256 , 17 , 0 , 64 , "b3bab0300e6a191fbe6137939835923578794ea54843f5011090fa2f3780a9e5cb22c59d78b40a0fbff9e672c0fbe0970bd2c845091c6044d687054da5d8e9c7" },
496+ { 256 , 17 * 17 , 0 , 64 , "66b810db8e90780424c0847372fdc95710882fde31c6df75beb9d4cd9305cfcae35e7b83e8b7e6eb4b78605880116316fe2c078a09b94ad7b8213c0a738b65c0" },
497+ { 256 , 17 * 17 * 17 , 0 , 64 , "c74ebc919a5b3b0dd1228185ba02d29ef442d69d3d4276a93efe0bf9a16a7dc0cd4eabadab8cd7a5edd96695f5d360abe09e2c6511a3ec397da3b76b9e1674fb" },
498+ { 256 , 17 * 17 * 17 * 17 , 0 , 64 , "02cc3a8897e6f4f6ccb6fd46631b1f5207b66c6de9c7b55b2d1a23134a170afdac234eaba9a77cff88c1f020b73724618c5687b362c430b248cd38647f848a1d" },
499+ { 256 , 17 * 17 * 17 * 17 * 17 , 0 , 64 , "add53b06543e584b5823f626996aee50fe45ed15f20243a7165485acb4aa76b4ffda75cedf6d8cdc95c332bd56f4b986b58bb17d1778bfc1b1a97545cdf4ec9f" },
500+ { 256 , 17 * 17 * 17 * 17 * 17 * 17 , 0 , 64 , "9e11bc59c24e73993c1484ec66358ef71db74aefd84e123f7800ba9c4853e02cfe701d9e6bb765a304f0dc34a4ee3ba82c410f0da70e86bfbd90ea877c2d6104" },
477501 };
478- const unsigned char turbo_shake_256_ptn_pow_2 [64 ] = {
479- 0x66 , 0xb8 , 0x10 , 0xdb , 0x8e , 0x90 , 0x78 , 0x04 , 0x24 , 0xc0 , 0x84 , 0x73 , 0x72 , 0xfd , 0xc9 , 0x57 ,
480- 0x10 , 0x88 , 0x2f , 0xde , 0x31 , 0xc6 , 0xdf , 0x75 , 0xbe , 0xb9 , 0xd4 , 0xcd , 0x93 , 0x05 , 0xcf , 0xca ,
481- 0xe3 , 0x5e , 0x7b , 0x83 , 0xe8 , 0xb7 , 0xe6 , 0xeb , 0x4b , 0x78 , 0x60 , 0x58 , 0x80 , 0x11 , 0x63 , 0x16 ,
482- 0xfe , 0x2c , 0x07 , 0x8a , 0x09 , 0xb9 , 0x4a , 0xd7 , 0xb8 , 0x21 , 0x3c , 0x0a , 0x73 , 0x8b , 0x65 , 0xc0 ,
483- };
484-
485- counter = 0 ;
486-
487- /* TurboSHAKE128 on an empty buffer */
488- turbo_shake_init (& c , 128 );
489- turbo_shake_done (& c , hash , 64 );
490- LTC_COMPARE_TESTVECTOR (hash , 64 , turbo_shake_128_empty , sizeof (turbo_shake_128_empty ), "TurboSHAKE128" , counter ++ );
491-
492- /* TurboSHAKE128 on an empty buffer, digest length 10032 bytes, test last 32 bytes */
493- turbo_shake_init (& c , 128 );
494- for (i = 0 ; i != 10000 / 10 ; ++ i ){ turbo_shake_done (& c , hash , 10 ); }
495- turbo_shake_done (& c , hash , 32 );
496- LTC_COMPARE_TESTVECTOR (hash , 32 , turbo_shake_128_empty_10032 , sizeof (turbo_shake_128_empty_10032 ), "TurboSHAKE128" , counter ++ );
497-
498- /* TurboSHAKE128 on single zero byte */
499- turbo_shake_init (& c , 128 );
500- turbo_shake_process (& c , turbo_shake_input_single_zero , sizeof (turbo_shake_input_single_zero ));
501- turbo_shake_done (& c , hash , 32 );
502- LTC_COMPARE_TESTVECTOR (hash , 32 , turbo_shake_128_single_zero_byte , sizeof (turbo_shake_128_single_zero_byte ), "TurboSHAKE128" , counter ++ );
503-
504- /* TurboSHAKE128 on ptn(17**1) */
505- turbo_shake_init (& c , 128 );
506- turbo_shake_process (& c , turbo_shake_input_ptn_17_pow_1 , sizeof (turbo_shake_input_ptn_17_pow_1 ));
507- turbo_shake_done (& c , hash , 32 );
508- LTC_COMPARE_TESTVECTOR (hash , 32 , turbo_shake_128_ptn_pow_1 , sizeof (turbo_shake_128_ptn_pow_1 ), "TurboSHAKE128" , counter ++ );
509-
510- /* TurboSHAKE128 on ptn(17**2) */
511- turbo_shake_init (& c , 128 );
512- turbo_shake_process (& c , turbo_shake_input_ptn_17_pow_2 , sizeof (turbo_shake_input_ptn_17_pow_2 ));
513- turbo_shake_done (& c , hash , 32 );
514- LTC_COMPARE_TESTVECTOR (hash , 32 , turbo_shake_128_ptn_pow_2 , sizeof (turbo_shake_128_ptn_pow_2 ), "TurboSHAKE128" , counter ++ );
515-
516-
517- /* TurboSHAKE256 on an empty buffer */
518- turbo_shake_init (& c , 256 );
519- turbo_shake_done (& c , hash , 64 );
520- LTC_COMPARE_TESTVECTOR (hash , 64 , turbo_shake_256_empty , sizeof (turbo_shake_256_empty ), "TurboSHAKE256" , counter ++ );
521-
522- /* TurboSHAKE256 on an empty buffer, digest length 10032 bytes, test last 32 bytes */
523- turbo_shake_init (& c , 256 );
524- for (i = 0 ; i != 10000 / 10 ; ++ i ){ turbo_shake_done (& c , hash , 10 ); }
525- turbo_shake_done (& c , hash , 32 );
526- LTC_COMPARE_TESTVECTOR (hash , 32 , turbo_shake_256_empty_10032 , sizeof (turbo_shake_256_empty_10032 ), "TurboSHAKE256" , counter ++ );
527-
528- /* TurboSHAKE256 on single zero byte */
529- turbo_shake_init (& c , 256 );
530- turbo_shake_process (& c , turbo_shake_input_single_zero , sizeof (turbo_shake_input_single_zero ));
531- turbo_shake_done (& c , hash , 64 );
532- LTC_COMPARE_TESTVECTOR (hash , 64 , turbo_shake_256_single_zero_byte , sizeof (turbo_shake_256_single_zero_byte ), "TurboSHAKE256" , counter ++ );
533-
534- /* TurboSHAKE256 on ptn(17**1) */
535- turbo_shake_init (& c , 256 );
536- turbo_shake_process (& c , turbo_shake_input_ptn_17_pow_1 , sizeof (turbo_shake_input_ptn_17_pow_1 ));
537- turbo_shake_done (& c , hash , 64 );
538- LTC_COMPARE_TESTVECTOR (hash , 64 , turbo_shake_256_ptn_pow_1 , sizeof (turbo_shake_256_ptn_pow_1 ), "TurboSHAKE256" , counter ++ );
539-
540- /* TurboSHAKE256 on ptn(17**2) */
541- turbo_shake_init (& c , 256 );
542- turbo_shake_process (& c , turbo_shake_input_ptn_17_pow_2 , sizeof (turbo_shake_input_ptn_17_pow_2 ));
543- turbo_shake_done (& c , hash , 64 );
544- LTC_COMPARE_TESTVECTOR (hash , 64 , turbo_shake_256_ptn_pow_2 , sizeof (turbo_shake_256_ptn_pow_2 ), "TurboSHAKE256" , counter ++ );
545-
502+ for (counter = 0 ; counter < (int )LTC_ARRAY_SIZE (testcases ); counter ++ ) {
503+ if ((err = s_turbo_shake_test_one (& testcases [counter ], counter )) != CRYPT_OK ) {
504+ return err ;
505+ }
506+ }
546507 return CRYPT_OK ;
547508#endif
548509}
0 commit comments