@@ -463,6 +463,65 @@ void run_sha256_tests(void) {
463
463
}
464
464
}
465
465
466
+ void run_sha256_counter_tests (void ) {
467
+ static const char * input = "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno" ;
468
+ static const secp256k1_sha256 midstates [14 ] = {
469
+ {{UINT32_C (0xa2b5c8bb ), UINT32_C (0x26c88bb3 ), UINT32_C (0x2abdc3d2 ), UINT32_C (0x9def99a3 ), UINT32_C (0xdfd21a6e ), UINT32_C (0x41fe585b ), UINT32_C (0x7ef2c440 ), UINT32_C (0x2b79adda )},
470
+ {0x00 }, UINT64_C (1048512 )},
471
+ {{UINT32_C (0xa0d29445 ), UINT32_C (0x9287de66 ), UINT32_C (0x76aabd71 ), UINT32_C (0x41acd765 ), UINT32_C (0x0c7528b4 ), UINT32_C (0x84e14906 ), UINT32_C (0x942faec6 ), UINT32_C (0xcc5a7b26 )},
472
+ {0x00 }, UINT64_C (2097088 )},
473
+ {{UINT32_C (0x50449526 ), UINT32_C (0xb9f1d657 ), UINT32_C (0xa0fc13e9 ), UINT32_C (0x50860f10 ), UINT32_C (0xa550c431 ), UINT32_C (0x3fbc97c1 ), UINT32_C (0x7bbb2d89 ), UINT32_C (0xdb67bac1 )},
474
+ {0x00 }, UINT64_C (4194240 )},
475
+ {{UINT32_C (0x54a6efdc ), UINT32_C (0x46762e7b ), UINT32_C (0x88bfe73f ), UINT32_C (0xbbd149c7 ), UINT32_C (0x41620c43 ), UINT32_C (0x1168da7b ), UINT32_C (0x2c5960f9 ), UINT32_C (0xeccffda6 )},
476
+ {0x00 }, UINT64_C (8388544 )},
477
+ {{UINT32_C (0x2515a8f5 ), UINT32_C (0x5faa2977 ), UINT32_C (0x3a850486 ), UINT32_C (0xac858cad ), UINT32_C (0x7b7276ee ), UINT32_C (0x235c0385 ), UINT32_C (0xc53a157c ), UINT32_C (0x7cb3e69c )},
478
+ {0x00 }, UINT64_C (16777152 )},
479
+ {{UINT32_C (0x34f39828 ), UINT32_C (0x409fedb7 ), UINT32_C (0x4bbdd0fb ), UINT32_C (0x3b643634 ), UINT32_C (0x7806bf2e ), UINT32_C (0xe0d1b713 ), UINT32_C (0xca3f2e1e ), UINT32_C (0xe38722c2 )},
480
+ {0x00 }, UINT64_C (33554368 )},
481
+ {{UINT32_C (0x389ef5c5 ), UINT32_C (0x38c54167 ), UINT32_C (0x8f5d56ab ), UINT32_C (0x582a75cc ), UINT32_C (0x8217caef ), UINT32_C (0xf10947dd ), UINT32_C (0x6a1998a8 ), UINT32_C (0x048f0b8c )},
482
+ {0x00 }, UINT64_C (67108800 )},
483
+ {{UINT32_C (0xd6c3f394 ), UINT32_C (0x0bee43b9 ), UINT32_C (0x6783f497 ), UINT32_C (0x29fa9e21 ), UINT32_C (0x6ce491c1 ), UINT32_C (0xa81fe45e ), UINT32_C (0x2fc3859a ), UINT32_C (0x269012d0 )},
484
+ {0x00 }, UINT64_C (134217664 )},
485
+ {{UINT32_C (0x6dd3c526 ), UINT32_C (0x44d88aa0 ), UINT32_C (0x806a1bae ), UINT32_C (0xfbcc0d32 ), UINT32_C (0x9d6144f3 ), UINT32_C (0x9d2bd757 ), UINT32_C (0x9851a957 ), UINT32_C (0xb50430ad )},
486
+ {0x00 }, UINT64_C (268435392 )},
487
+ {{UINT32_C (0x2add4021 ), UINT32_C (0xdfe8a9e6 ), UINT32_C (0xa56317c6 ), UINT32_C (0x7a15f5bb ), UINT32_C (0x4a48aacd ), UINT32_C (0x5d368414 ), UINT32_C (0x4f00e6f0 ), UINT32_C (0xd9355023 )},
488
+ {0x00 }, UINT64_C (536870848 )},
489
+ {{UINT32_C (0xb66666b4 ), UINT32_C (0xdbeac32b ), UINT32_C (0x0ea351ae ), UINT32_C (0xcba9da46 ), UINT32_C (0x6278b874 ), UINT32_C (0x8c508e23 ), UINT32_C (0xe16ca776 ), UINT32_C (0x8465bac1 )},
490
+ {0x00 }, UINT64_C (1073741760 )},
491
+ {{UINT32_C (0xb6744789 ), UINT32_C (0x9cce87aa ), UINT32_C (0xc4c478b7 ), UINT32_C (0xf38404d8 ), UINT32_C (0x2e38ba62 ), UINT32_C (0xa3f7019b ), UINT32_C (0x50458fe7 ), UINT32_C (0x3047dbec )},
492
+ {0x00 }, UINT64_C (2147483584 )},
493
+ {{UINT32_C (0x8b1297ba ), UINT32_C (0xba261a80 ), UINT32_C (0x2ba1b0dd ), UINT32_C (0xfbc67d6d ), UINT32_C (0x61072c4e ), UINT32_C (0x4b5a2a0f ), UINT32_C (0x52872760 ), UINT32_C (0x2dfeb162 )},
494
+ {0x00 }, UINT64_C (4294967232 )},
495
+ {{UINT32_C (0x24f33cf7 ), UINT32_C (0x41ad6583 ), UINT32_C (0x41c8ff5d ), UINT32_C (0xca7ef35f ), UINT32_C (0x50395756 ), UINT32_C (0x021b743e ), UINT32_C (0xd7126cd7 ), UINT32_C (0xd037473a )},
496
+ {0x00 }, UINT64_C (8589934528 )}
497
+ };
498
+ static const unsigned char outputs [14 ][32 ] = {
499
+ {0x0e , 0x83 , 0xe2 , 0xc9 , 0x4f , 0xb2 , 0xb8 , 0x2b , 0x89 , 0x06 , 0x92 , 0x78 , 0x04 , 0x03 , 0x48 , 0x5c , 0x48 , 0x44 , 0x67 , 0x61 , 0x77 , 0xa4 , 0xc7 , 0x90 , 0x9e , 0x92 , 0x55 , 0x10 , 0x05 , 0xfe , 0x39 , 0x15 },
500
+ {0x1d , 0x1e , 0xd7 , 0xb8 , 0xa3 , 0xa7 , 0x8a , 0x79 , 0xfd , 0xa0 , 0x05 , 0x08 , 0x9c , 0xeb , 0xf0 , 0xec , 0x67 , 0x07 , 0x9f , 0x8e , 0x3c , 0x0d , 0x8e , 0xf9 , 0x75 , 0x55 , 0x13 , 0xc1 , 0xe8 , 0x77 , 0xf8 , 0xbb },
501
+ {0x66 , 0x95 , 0x6c , 0xc9 , 0xe0 , 0x39 , 0x65 , 0xb6 , 0xb0 , 0x05 , 0xd1 , 0xaf , 0xaf , 0xf3 , 0x1d , 0xb9 , 0xa4 , 0xda , 0x6f , 0x20 , 0xcd , 0x3a , 0xae , 0x64 , 0xc2 , 0xdb , 0xee , 0xf5 , 0xb8 , 0x8d , 0x57 , 0x0e },
502
+ {0x3c , 0xbb , 0x1c , 0x12 , 0x5e , 0x17 , 0xfd , 0x54 , 0x90 , 0x45 , 0xa7 , 0x7b , 0x61 , 0x6c , 0x1d , 0xfe , 0xe6 , 0xcc , 0x7f , 0xee , 0xcf , 0xef , 0x33 , 0x35 , 0x50 , 0x62 , 0x16 , 0x70 , 0x2f , 0x87 , 0xc3 , 0xc9 },
503
+ {0x53 , 0x4d , 0xa8 , 0xe7 , 0x1e , 0x98 , 0x73 , 0x8d , 0xd9 , 0xa3 , 0x54 , 0xa5 , 0x0e , 0x59 , 0x2c , 0x25 , 0x43 , 0x6f , 0xaa , 0xa2 , 0xf5 , 0x21 , 0x06 , 0x3e , 0xc9 , 0x82 , 0x06 , 0x94 , 0x98 , 0x72 , 0x9d , 0xa7 },
504
+ {0xef , 0x7e , 0xe9 , 0x6b , 0xd3 , 0xe5 , 0xb7 , 0x41 , 0x4c , 0xc8 , 0xd3 , 0x07 , 0x52 , 0x9a , 0x5a , 0x8b , 0x4e , 0x1e , 0x75 , 0xa4 , 0x17 , 0x78 , 0xc8 , 0x36 , 0xcd , 0xf8 , 0x2e , 0xd9 , 0x57 , 0xe3 , 0xd7 , 0x07 },
505
+ {0x87 , 0x16 , 0xfb , 0xf9 , 0xa5 , 0xf8 , 0xc4 , 0x56 , 0x2b , 0x48 , 0x52 , 0x8e , 0x2d , 0x30 , 0x85 , 0xb6 , 0x4c , 0x56 , 0xb5 , 0xd1 , 0x16 , 0x9c , 0xcf , 0x32 , 0x95 , 0xad , 0x03 , 0xe8 , 0x05 , 0x58 , 0x06 , 0x76 },
506
+ {0x75 , 0x03 , 0x80 , 0x28 , 0xf2 , 0xa7 , 0x63 , 0x22 , 0x1a , 0x26 , 0x9c , 0x68 , 0xe0 , 0x58 , 0xfc , 0x73 , 0xeb , 0x42 , 0xf6 , 0x86 , 0x16 , 0x24 , 0x4b , 0xbc , 0x24 , 0xf7 , 0x02 , 0xc8 , 0x3d , 0x90 , 0xe2 , 0xb0 },
507
+ {0xdf , 0x49 , 0x0f , 0x15 , 0x7b , 0x7d , 0xbf , 0xe0 , 0xd4 , 0xcf , 0x47 , 0xc0 , 0x80 , 0x93 , 0x4a , 0x61 , 0xaa , 0x03 , 0x07 , 0x66 , 0xb3 , 0x38 , 0x5d , 0xc8 , 0xc9 , 0x07 , 0x61 , 0xfb , 0x97 , 0x10 , 0x2f , 0xd8 },
508
+ {0x77 , 0x19 , 0x40 , 0x56 , 0x41 , 0xad , 0xbc , 0x59 , 0xda , 0x1e , 0xc5 , 0x37 , 0x14 , 0x63 , 0x7b , 0xfb , 0x79 , 0xe2 , 0x7a , 0xb1 , 0x55 , 0x42 , 0x99 , 0x42 , 0x56 , 0xfe , 0x26 , 0x9d , 0x0f , 0x7e , 0x80 , 0xc6 },
509
+ {0x50 , 0xe7 , 0x2a , 0x0e , 0x26 , 0x44 , 0x2f , 0xe2 , 0x55 , 0x2d , 0xc3 , 0x93 , 0x8a , 0xc5 , 0x86 , 0x58 , 0x22 , 0x8c , 0x0c , 0xbf , 0xb1 , 0xd2 , 0xca , 0x87 , 0x2a , 0xe4 , 0x35 , 0x26 , 0x6f , 0xcd , 0x05 , 0x5e },
510
+ {0xe4 , 0x80 , 0x6f , 0xdb , 0x3d , 0x7d , 0xba , 0xde , 0x50 , 0x3f , 0xea , 0x00 , 0x3d , 0x46 , 0x59 , 0x64 , 0xfd , 0x58 , 0x1c , 0xa1 , 0xb8 , 0x7d , 0x5f , 0xac , 0x94 , 0x37 , 0x9e , 0xa0 , 0xc0 , 0x9c , 0x93 , 0x8b },
511
+ {0x2c , 0xf3 , 0xa9 , 0xf6 , 0x15 , 0x25 , 0x80 , 0x70 , 0x76 , 0x99 , 0x7d , 0xf1 , 0xc3 , 0x2f , 0xa3 , 0x31 , 0xff , 0x92 , 0x35 , 0x2e , 0x8d , 0x04 , 0x13 , 0x33 , 0xd8 , 0x0d , 0xdb , 0x4a , 0xf6 , 0x8c , 0x03 , 0x34 },
512
+ {0xec , 0x12 , 0x24 , 0x9f , 0x35 , 0xa4 , 0x29 , 0x8b , 0x9e , 0x4a , 0x95 , 0xf8 , 0x61 , 0xaf , 0x61 , 0xc5 , 0x66 , 0x55 , 0x3e , 0x3f , 0x2a , 0x98 , 0xea , 0x71 , 0x16 , 0x6b , 0x1c , 0xd9 , 0xe4 , 0x09 , 0xd2 , 0x8e }
513
+ };
514
+ unsigned int i ;
515
+ for (i = 0 ; i < sizeof (midstates )/sizeof (midstates [0 ]); i ++ ) {
516
+ unsigned char out [32 ];
517
+ secp256k1_sha256 hasher ;
518
+ secp256k1_sha256_initialize_midstate (& hasher , & midstates [i ]);
519
+ secp256k1_sha256_write (& hasher , (const unsigned char * )input , strlen (input ));
520
+ secp256k1_sha256_finalize (& hasher , out );
521
+ CHECK (memcmp (out , outputs [i ], 32 ) == 0 );
522
+ }
523
+ }
524
+
466
525
void run_hmac_sha256_tests (void ) {
467
526
static const char * keys [6 ] = {
468
527
"\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b" ,
@@ -5269,6 +5328,7 @@ int main(int argc, char **argv) {
5269
5328
run_rand_int ();
5270
5329
5271
5330
run_sha256_tests ();
5331
+ run_sha256_counter_tests ();
5272
5332
run_hmac_sha256_tests ();
5273
5333
run_rfc6979_hmac_sha256_tests ();
5274
5334
0 commit comments