@@ -655,6 +655,7 @@ static void test_single_value_proof(uint64_t val) {
655655 NULL , 0 ,
656656 secp256k1_generator_h
657657 ) == 1 );
658+ CHECK (plen <= secp256k1_rangeproof_max_size (ctx , val , 0 ));
658659
659660 /* Different proof sizes are unfortunate but is caused by `min_value` of
660661 * zero being special-cased and encoded more efficiently. */
@@ -1068,16 +1069,11 @@ void test_rangeproof_fixed_vectors_reproducible(void) {
10681069 uint64_t min_value = 0 ;
10691070 size_t m_len = sizeof (message ); /* maximum message length */
10701071
1071- /* Uncomment this to recreate test vector */
1072- /* int min_bits = 64; */
1073- /* int exp = 18; */
1074- /* unsigned char proof[5126]; */
1075- /* size_t p_len = sizeof(proof); */
1076- /* secp256k1_pedersen_commitment pc; */
1077- /* CHECK(secp256k1_pedersen_commit(ctx, &pc, vector_blind, value, secp256k1_generator_h)); */
1078- /* CHECK(secp256k1_rangeproof_sign(ctx, proof, &p_len, min_value, &pc, vector_blind, vector_nonce, exp, min_bits, value, message, m_len, NULL, 0, secp256k1_generator_h)); */
1079- /* CHECK(p_len == sizeof(proof)); */
1080- /* print_vector(0, proof, p_len, &pc); */
1072+ int min_bits = 64 ;
1073+ int exp = 18 ;
1074+ unsigned char proof [5126 ];
1075+ size_t p_len = sizeof (proof );
1076+ secp256k1_pedersen_commitment pc ;
10811077
10821078 unsigned char vector_0 [] = {
10831079 0x40 , 0x3f , 0xd1 , 0x77 , 0x65 , 0x05 , 0x87 , 0x88 , 0xd0 , 0x3d , 0xb2 , 0x24 , 0x60 , 0x7a , 0x08 , 0x76 ,
@@ -1408,6 +1404,15 @@ void test_rangeproof_fixed_vectors_reproducible(void) {
14081404 0xef ,
14091405 };
14101406
1407+ CHECK (secp256k1_pedersen_commit (ctx , & pc , vector_blind , value , secp256k1_generator_h ));
1408+ CHECK (secp256k1_rangeproof_sign (ctx , proof , & p_len , min_value , & pc , vector_blind , vector_nonce , exp , min_bits , value , message , m_len , NULL , 0 , secp256k1_generator_h ));
1409+ CHECK (p_len <= secp256k1_rangeproof_max_size (ctx , value , min_bits ));
1410+ CHECK (p_len == sizeof (proof ));
1411+ /* Uncomment the next line to print the test vector */
1412+ /* print_vector(0, proof, p_len, &pc); */
1413+ CHECK (p_len == sizeof (vector_0 ));
1414+ CHECK (secp256k1_memcmp_var (proof , vector_0 , p_len ) == 0 );
1415+
14111416 test_rangeproof_fixed_vectors_reproducible_helper (vector_0 , sizeof (vector_0 ), commit_0 , & value_r , & min_value_r , & max_value_r , message_r , & m_len_r );
14121417 CHECK (value_r == value );
14131418 CHECK (m_len_r == m_len );
@@ -1422,17 +1427,12 @@ void test_rangeproof_fixed_vectors_reproducible(void) {
14221427 uint64_t value = 13 ;
14231428 size_t m_len = 128 ; /* maximum message length with min_bits = 3 */
14241429
1425- /* Uncomment this to recreate test vector */
1426- /* uint64_t min_value = 1; */
1427- /* int min_bits = 3; */
1428- /* int exp = 1; */
1429- /* unsigned char proof[267]; */
1430- /* size_t p_len = sizeof(proof); */
1431- /* secp256k1_pedersen_commitment pc; */
1432- /* CHECK(secp256k1_pedersen_commit(ctx, &pc, vector_blind, value, secp256k1_generator_h)); */
1433- /* CHECK(secp256k1_rangeproof_sign(ctx, proof, &p_len, min_value, &pc, vector_blind, vector_nonce, exp, min_bits, value, message, m_len, NULL, 0, secp256k1_generator_h)); */
1434- /* CHECK(p_len == sizeof(proof)); */
1435- /* print_vector(1, proof, p_len, &pc); */
1430+ uint64_t min_value = 1 ;
1431+ int min_bits = 3 ;
1432+ int exp = 1 ;
1433+ unsigned char proof [267 ];
1434+ size_t p_len = sizeof (proof );
1435+ secp256k1_pedersen_commitment pc ;
14361436
14371437 unsigned char vector_1 [] = {
14381438 0x61 , 0x02 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x01 , 0xcb , 0xdc , 0xbe , 0x42 , 0xe6 ,
@@ -1458,6 +1458,14 @@ void test_rangeproof_fixed_vectors_reproducible(void) {
14581458 0x66 , 0x16 , 0x2e , 0x44 , 0xc8 , 0x65 , 0x8e , 0xe6 , 0x3a , 0x1a , 0x57 , 0x2c , 0xb9 , 0x6c , 0x07 , 0x85 ,
14591459 0xf0 ,
14601460 };
1461+ CHECK (secp256k1_pedersen_commit (ctx , & pc , vector_blind , value , secp256k1_generator_h ));
1462+ CHECK (secp256k1_rangeproof_sign (ctx , proof , & p_len , min_value , & pc , vector_blind , vector_nonce , exp , min_bits , value , message , m_len , NULL , 0 , secp256k1_generator_h ));
1463+ CHECK (p_len <= secp256k1_rangeproof_max_size (ctx , value , min_bits ));
1464+ CHECK (p_len == sizeof (proof ));
1465+ /* Uncomment the next line to print the test vector */
1466+ /* print_vector(1, proof, p_len, &pc); */
1467+ CHECK (p_len == sizeof (vector_1 ));
1468+ CHECK (secp256k1_memcmp_var (proof , vector_1 , p_len ) == 0 );
14611469
14621470 test_rangeproof_fixed_vectors_reproducible_helper (vector_1 , sizeof (vector_1 ), commit_1 , & value_r , & min_value_r , & max_value_r , message_r , & m_len_r );
14631471 CHECK (value_r == value );
@@ -1474,16 +1482,12 @@ void test_rangeproof_fixed_vectors_reproducible(void) {
14741482 size_t m_len = 0 ; /* maximum message length with min_bits = 3 */
14751483
14761484 /* Uncomment this to recreate test vector */
1477- /* uint64_t min_value = INT64_MAX-1; */
1478- /* int min_bits = 1; */
1479- /* int exp = 0; */
1480- /* unsigned char proof[106]; */
1481- /* size_t p_len = sizeof(proof); */
1482- /* secp256k1_pedersen_commitment pc; */
1483- /* CHECK(secp256k1_pedersen_commit(ctx, &pc, vector_blind, value, secp256k1_generator_h)); */
1484- /* CHECK(secp256k1_rangeproof_sign(ctx, proof, &p_len, min_value, &pc, vector_blind, vector_nonce, exp, min_bits, value, message, m_len, NULL, 0, secp256k1_generator_h)); */
1485- /* CHECK(p_len == sizeof(proof)); */
1486- /* print_vector(2, proof, p_len, &pc); */
1485+ uint64_t min_value = INT64_MAX - 1 ;
1486+ int min_bits = 1 ;
1487+ int exp = 0 ;
1488+ unsigned char proof [106 ];
1489+ size_t p_len = sizeof (proof );
1490+ secp256k1_pedersen_commitment pc ;
14871491
14881492 unsigned char vector_2 [] = {
14891493 0x60 , 0x00 , 0x7f , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xfe , 0x81 , 0xd8 , 0x21 , 0x12 , 0x4d , 0xa4 ,
@@ -1500,6 +1504,15 @@ void test_rangeproof_fixed_vectors_reproducible(void) {
15001504 0x70 ,
15011505 };
15021506
1507+ CHECK (secp256k1_pedersen_commit (ctx , & pc , vector_blind , value , secp256k1_generator_h ));
1508+ CHECK (secp256k1_rangeproof_sign (ctx , proof , & p_len , min_value , & pc , vector_blind , vector_nonce , exp , min_bits , value , message , m_len , NULL , 0 , secp256k1_generator_h ));
1509+ CHECK (p_len <= secp256k1_rangeproof_max_size (ctx , value , min_bits ));
1510+ CHECK (p_len == sizeof (proof ));
1511+ /* Uncomment the next line to print the test vector */
1512+ /* print_vector(2, proof, p_len, &pc); */
1513+ CHECK (p_len == sizeof (vector_2 ));
1514+ CHECK (secp256k1_memcmp_var (proof , vector_2 , p_len ) == 0 );
1515+
15031516 test_rangeproof_fixed_vectors_reproducible_helper (vector_2 , sizeof (vector_2 ), commit_2 , & value_r , & min_value_r , & max_value_r , message_r , & m_len_r );
15041517 CHECK (value_r == value );
15051518 CHECK (m_len_r == m_len );
0 commit comments