@@ -385,7 +385,7 @@ static void test_rangeproof(void) {
385385 const uint64_t testvs [11 ] = {0 , 1 , 5 , 11 , 65535 , 65537 , INT32_MAX , UINT32_MAX , INT64_MAX - 1 , INT64_MAX , UINT64_MAX };
386386 secp256k1_pedersen_commitment commit ;
387387 secp256k1_pedersen_commitment commit2 ;
388- unsigned char proof [5134 ];
388+ unsigned char proof [5134 + 1 ]; /* One additional byte to test if trailing bytes are rejected */
389389 unsigned char blind [32 ];
390390 unsigned char blindout [32 ];
391391 unsigned char message [4096 ];
@@ -485,6 +485,9 @@ static void test_rangeproof(void) {
485485 len = 5134 ;
486486 CHECK (secp256k1_rangeproof_sign (ctx , proof , & len , 0 , & commit , blind , commit .data , 0 , 3 , v , NULL , 0 , NULL , 0 , secp256k1_generator_h ));
487487 CHECK (len <= 5134 );
488+ /* Test if trailing bytes are rejected. */
489+ proof [len ] = v ;
490+ CHECK (!secp256k1_rangeproof_verify (ctx , & minv , & maxv , & commit , proof , len + 1 , NULL , 0 , secp256k1_generator_h ));
488491 for (i = 0 ; i < len * 8 ; i ++ ) {
489492 proof [i >> 3 ] ^= 1 << (i & 7 );
490493 CHECK (!secp256k1_rangeproof_verify (ctx , & minv , & maxv , & commit , proof , len , NULL , 0 , secp256k1_generator_h ));
@@ -604,9 +607,95 @@ void test_multiple_generators(void) {
604607 }
605608}
606609
610+ void test_rangeproof_fixed_vectors (void ) {
611+ const unsigned char vector_1 [] = {
612+ 0x62 , 0x07 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x56 , 0x02 , 0x2a , 0x5c , 0x42 , 0x0e , 0x1d ,
613+ 0x51 , 0xe1 , 0xb7 , 0xf3 , 0x69 , 0x04 , 0xb5 , 0xbb , 0x9b , 0x41 , 0x66 , 0x14 , 0xf3 , 0x64 , 0x42 , 0x26 ,
614+ 0xe3 , 0xa7 , 0x6a , 0x06 , 0xbb , 0xa8 , 0x5a , 0x49 , 0x6f , 0x19 , 0x76 , 0xfb , 0xe5 , 0x75 , 0x77 , 0x88 ,
615+ 0xab , 0xa9 , 0x66 , 0x44 , 0x80 , 0xea , 0x29 , 0x95 , 0x7f , 0xdf , 0x72 , 0x4a , 0xaf , 0x02 , 0xbe , 0xdd ,
616+ 0x5d , 0x15 , 0xd8 , 0xae , 0xff , 0x74 , 0xc9 , 0x8c , 0x1a , 0x67 , 0x0e , 0xb2 , 0x57 , 0x22 , 0x99 , 0xc3 ,
617+ 0x21 , 0x46 , 0x6f , 0x15 , 0x58 , 0x0e , 0xdb , 0xe6 , 0x6e , 0xc4 , 0x0d , 0xfe , 0x6f , 0x04 , 0x6b , 0x0d ,
618+ 0x18 , 0x3d , 0x78 , 0x40 , 0x98 , 0x56 , 0x4e , 0xe4 , 0x4a , 0x74 , 0x90 , 0xa7 , 0xac , 0x9c , 0x16 , 0xe0 ,
619+ 0x3e , 0x81 , 0xaf , 0x0f , 0xe3 , 0x4f , 0x34 , 0x99 , 0x52 , 0xf7 , 0xa7 , 0xf6 , 0xd3 , 0x83 , 0xa0 , 0x17 ,
620+ 0x4b , 0x2d , 0xa7 , 0xd4 , 0xfd , 0xf7 , 0x84 , 0x45 , 0xc4 , 0x11 , 0x71 , 0x3d , 0x4a , 0x22 , 0x34 , 0x09 ,
621+ 0x9c , 0xa7 , 0xe5 , 0xc8 , 0xba , 0x04 , 0xbf , 0xfd , 0x25 , 0x11 , 0x7d , 0xa4 , 0x43 , 0x45 , 0xc7 , 0x62 ,
622+ 0x9e , 0x7b , 0x80 , 0xf6 , 0x09 , 0xbb , 0x1b , 0x2e , 0xf3 , 0xcd , 0x23 , 0xe0 , 0xed , 0x81 , 0x43 , 0x42 ,
623+ 0xbe , 0xc4 , 0x9f , 0x58 , 0x8a , 0x0d , 0x66 , 0x79 , 0x09 , 0x70 , 0x11 , 0x68 , 0x3d , 0x87 , 0x38 , 0x1c ,
624+ 0x3c , 0x85 , 0x52 , 0x5b , 0x62 , 0xf7 , 0x3e , 0x7e , 0x87 , 0xa2 , 0x99 , 0x24 , 0xd0 , 0x7d , 0x18 , 0x63 ,
625+ 0x56 , 0x48 , 0xa4 , 0x3a , 0xfe , 0x65 , 0xfa , 0xa4 , 0xd0 , 0x67 , 0xaa , 0x98 , 0x65 , 0x4d , 0xe4 , 0x22 ,
626+ 0x75 , 0x45 , 0x52 , 0xe8 , 0x41 , 0xc7 , 0xed , 0x38 , 0xeb , 0xf5 , 0x02 , 0x90 , 0xc9 , 0x45 , 0xa3 , 0xb0 ,
627+ 0x4d , 0x03 , 0xd7 , 0xab , 0x43 , 0xe4 , 0x21 , 0xfc , 0x83 , 0xd6 , 0x12 , 0x1d , 0x76 , 0xb1 , 0x3c , 0x67 ,
628+ 0x63 , 0x1f , 0x52 , 0x9d , 0xc3 , 0x23 , 0x5c , 0x4e , 0xa6 , 0x8d , 0x01 , 0x4a , 0xba , 0x9a , 0xf4 , 0x16 ,
629+ 0x5b , 0x67 , 0xc8 , 0xe1 , 0xd2 , 0x42 , 0x6d , 0xdf , 0xcd , 0x08 , 0x6a , 0x73 , 0x41 , 0x6a , 0xc2 , 0x84 ,
630+ 0xc6 , 0x31 , 0xbe , 0x57 , 0xcb , 0x0e , 0xde , 0xbf , 0x71 , 0xd5 , 0x8a , 0xf7 , 0x24 , 0xb2 , 0xa7 , 0x89 ,
631+ 0x96 , 0x62 , 0x4f , 0xd9 , 0xf7 , 0xc3 , 0xde , 0x4c , 0xab , 0x13 , 0x72 , 0xb4 , 0xb3 , 0x35 , 0x04 , 0x82 ,
632+ 0xa8 , 0x75 , 0x1d , 0xde , 0x46 , 0xa8 , 0x0d , 0xb8 , 0x23 , 0x44 , 0x00 , 0x44 , 0xfa , 0x53 , 0x6c , 0x2d ,
633+ 0xce , 0xd3 , 0xa6 , 0x80 , 0xa1 , 0x20 , 0xca , 0xd1 , 0x63 , 0xbb , 0xbe , 0x39 , 0x5f , 0x9d , 0x27 , 0x69 ,
634+ 0xb3 , 0x33 , 0x1f , 0xdb , 0xda , 0x67 , 0x05 , 0x37 , 0xbe , 0x65 , 0xe9 , 0x7e , 0xa9 , 0xc3 , 0xff , 0x37 ,
635+ 0x8a , 0xb4 , 0x2d , 0xfe , 0xf2 , 0x16 , 0x85 , 0xc7 , 0x0f , 0xd9 , 0xbe , 0x14 , 0xd1 , 0x80 , 0x14 , 0x9f ,
636+ 0x58 , 0x56 , 0x98 , 0x41 , 0xf6 , 0x26 , 0xf7 , 0xa2 , 0x71 , 0x66 , 0xb4 , 0x7a , 0x9c , 0x12 , 0x73 , 0xd3 ,
637+ 0xdf , 0x77 , 0x2b , 0x49 , 0xe5 , 0xca , 0x50 , 0x57 , 0x44 , 0x6e , 0x3f , 0x58 , 0x56 , 0xbc , 0x21 , 0x70 ,
638+ 0x4f , 0xc6 , 0xaa , 0x12 , 0xff , 0x7c , 0xa7 , 0x3d , 0xed , 0x46 , 0xc1 , 0x40 , 0xe6 , 0x58 , 0x09 , 0x2a ,
639+ 0xda , 0xb3 , 0x76 , 0xab , 0x44 , 0xb5 , 0x4e , 0xb3 , 0x12 , 0xe0 , 0x26 , 0x8a , 0x52 , 0xac , 0x49 , 0x1d ,
640+ 0xe7 , 0x06 , 0x53 , 0x3a , 0x01 , 0x35 , 0x21 , 0x2e , 0x86 , 0x48 , 0xc5 , 0x75 , 0xc1 , 0xa2 , 0x7d , 0x22 ,
641+ 0x53 , 0xf6 , 0x3f , 0x41 , 0xc5 , 0xb3 , 0x08 , 0x7d , 0xa3 , 0x67 , 0xc0 , 0xbb , 0xb6 , 0x8d , 0xf0 , 0xd3 ,
642+ 0x01 , 0x72 , 0xd3 , 0x63 , 0x82 , 0x01 , 0x1a , 0xe7 , 0x1d , 0x22 , 0xfa , 0x95 , 0x33 , 0xf6 , 0xf2 , 0xde ,
643+ 0xa2 , 0x53 , 0x86 , 0x55 , 0x5a , 0xb4 , 0x2e , 0x75 , 0x75 , 0xc6 , 0xd5 , 0x93 , 0x9c , 0x57 , 0xa9 , 0x1f ,
644+ 0xb9 , 0x3e , 0xe8 , 0x1c , 0xbf , 0xac , 0x1c , 0x54 , 0x6f , 0xf5 , 0xab , 0x41 , 0xee , 0xb3 , 0x0e , 0xd0 ,
645+ 0x76 , 0xc4 , 0x1a , 0x45 , 0xcd , 0xf1 , 0xd6 , 0xcc , 0xb0 , 0x83 , 0x70 , 0x73 , 0xbc , 0x88 , 0x74 , 0xa0 ,
646+ 0x5b , 0xe7 , 0x98 , 0x10 , 0x36 , 0xbf , 0xec , 0x23 , 0x1c , 0xc2 , 0xb5 , 0xba , 0x4b , 0x9d , 0x7f , 0x8c ,
647+ 0x8a , 0xe2 , 0xda , 0x18 , 0xdd , 0xab , 0x27 , 0x8a , 0x15 , 0xeb , 0xb0 , 0xd4 , 0x3a , 0x8b , 0x77 , 0x00 ,
648+ 0xc7 , 0xbb , 0xcc , 0xfa , 0xba , 0xa4 , 0x6a , 0x17 , 0x5c , 0xf8 , 0x51 , 0x5d , 0x8d , 0x16 , 0xcd , 0xa7 ,
649+ 0x0e , 0x71 , 0x97 , 0x98 , 0x78 , 0x5a , 0x41 , 0xb3 , 0xf0 , 0x1f , 0x87 , 0x2d , 0x65 , 0xcd , 0x29 , 0x49 ,
650+ 0xd2 , 0x87 , 0x2c , 0x91 , 0xa9 , 0x5f , 0xcc , 0xa9 , 0xd8 , 0xbb , 0x53 , 0x18 , 0xe7 , 0xd6 , 0xec , 0x65 ,
651+ 0xa6 , 0x45 , 0xf6 , 0xce , 0xcf , 0x48 , 0xf6 , 0x1e , 0x3d , 0xd2 , 0xcf , 0xcb , 0x3a , 0xcd , 0xbb , 0x92 ,
652+ 0x29 , 0x24 , 0x16 , 0x7f , 0x8a , 0xa8 , 0x5c , 0x0c , 0x45 , 0x71 , 0x33
653+ };
654+ const unsigned char commit_1 [] = {
655+ 0x08 ,
656+ 0xf5 , 0x1e , 0x0d , 0xc5 , 0x86 , 0x78 , 0x51 , 0xa9 , 0x00 , 0x00 , 0xef , 0x4d , 0xe2 , 0x94 , 0x60 , 0x89 ,
657+ 0x83 , 0x04 , 0xb4 , 0x0e , 0x90 , 0x10 , 0x05 , 0x1c , 0x7f , 0xd7 , 0x33 , 0x92 , 0x1f , 0xe7 , 0x74 , 0x59
658+ };
659+ size_t min_value_1 ;
660+ size_t max_value_1 ;
661+ secp256k1_pedersen_commitment pc ;
662+
663+ CHECK (secp256k1_pedersen_commitment_parse (ctx , & pc , commit_1 ));
664+
665+ CHECK (secp256k1_rangeproof_verify (
666+ ctx ,
667+ & min_value_1 , & max_value_1 ,
668+ & pc ,
669+ vector_1 , sizeof (vector_1 ),
670+ NULL , 0 ,
671+ secp256k1_generator_h
672+ ));
673+ }
674+
675+ void test_pedersen_commitment_fixed_vector (void ) {
676+ const unsigned char two_g [33 ] = {
677+ 0x09 ,
678+ 0xc6 , 0x04 , 0x7f , 0x94 , 0x41 , 0xed , 0x7d , 0x6d , 0x30 , 0x45 , 0x40 , 0x6e , 0x95 , 0xc0 , 0x7c , 0xd8 ,
679+ 0x5c , 0x77 , 0x8e , 0x4b , 0x8c , 0xef , 0x3c , 0xa7 , 0xab , 0xac , 0x09 , 0xb9 , 0x5c , 0x70 , 0x9e , 0xe5
680+ };
681+ unsigned char result [33 ];
682+ secp256k1_pedersen_commitment parse ;
683+
684+ CHECK (secp256k1_pedersen_commitment_parse (ctx , & parse , two_g ));
685+ CHECK (secp256k1_pedersen_commitment_serialize (ctx , result , & parse ));
686+ CHECK (memcmp (two_g , result , 33 ) == 0 );
687+
688+ result [0 ] = 0x08 ;
689+ CHECK (secp256k1_pedersen_commitment_parse (ctx , & parse , result ));
690+ result [0 ] = 0x0c ;
691+ CHECK (!secp256k1_pedersen_commitment_parse (ctx , & parse , result ));
692+ }
693+
607694void run_rangeproof_tests (void ) {
608695 int i ;
609696 test_api ();
697+ test_rangeproof_fixed_vectors ();
698+ test_pedersen_commitment_fixed_vector ();
610699 for (i = 0 ; i < 10 * count ; i ++ ) {
611700 test_pedersen ();
612701 }
0 commit comments