@@ -225,6 +225,11 @@ static void test_rangeproof_api(const secp256k1_context *none, const secp256k1_c
225225 CHECK (secp256k1_rangeproof_rewind (both , blind_out , & value_out , NULL , 0 , commit .data , & min_value , & max_value , & commit , proof , len , NULL , 0 , NULL ) == 0 );
226226 CHECK (* ecount == 29 );
227227 }
228+
229+ /* This constant is hardcoded in these tests and elsewhere, so we
230+ * consider it to be part of the API and test it here. */
231+ CHECK (secp256k1_rangeproof_max_size (none , 0 , 64 ) == 5134 );
232+ CHECK (secp256k1_rangeproof_max_size (none , UINT64_MAX , 0 ) == 5134 );
228233}
229234
230235static void test_api (void ) {
@@ -431,6 +436,7 @@ static void test_rangeproof(void) {
431436 len = 5134 ;
432437 CHECK (secp256k1_rangeproof_sign (ctx , proof , & len , vmin , & commit , blind , commit .data , 0 , 0 , v , input_message , input_message_len , NULL , 0 , secp256k1_generator_h ));
433438 CHECK (len <= 5134 );
439+ CHECK (len <= secp256k1_rangeproof_max_size (ctx , v , 0 ));
434440 mlen = 4096 ;
435441 CHECK (secp256k1_rangeproof_rewind (ctx , blindout , & vout , message , & mlen , commit .data , & minv , & maxv , & commit , proof , len , NULL , 0 , secp256k1_generator_h ));
436442 if (input_message != NULL ) {
@@ -447,6 +453,7 @@ static void test_rangeproof(void) {
447453 len = 5134 ;
448454 CHECK (secp256k1_rangeproof_sign (ctx , proof , & len , v , & commit , blind , commit .data , -1 , 64 , v , NULL , 0 , NULL , 0 , secp256k1_generator_h ));
449455 CHECK (len <= 73 );
456+ CHECK (len <= secp256k1_rangeproof_max_size (ctx , v , 0 ));
450457 CHECK (secp256k1_rangeproof_rewind (ctx , blindout , & vout , NULL , NULL , commit .data , & minv , & maxv , & commit , proof , len , NULL , 0 , secp256k1_generator_h ));
451458 CHECK (secp256k1_memcmp_var (blindout , blind , 32 ) == 0 );
452459 CHECK (vout == v );
@@ -457,6 +464,7 @@ static void test_rangeproof(void) {
457464 len = 5134 ;
458465 CHECK (secp256k1_rangeproof_sign (ctx , proof , & len , v , & commit , blind , commit .data , -1 , 64 , v , NULL , 0 , message_short , sizeof (message_short ), secp256k1_generator_h ));
459466 CHECK (len <= 73 );
467+ CHECK (len <= secp256k1_rangeproof_max_size (ctx , v , 0 ));
460468 CHECK (!secp256k1_rangeproof_rewind (ctx , blindout , & vout , NULL , NULL , commit .data , & minv , & maxv , & commit , proof , len , NULL , 0 , secp256k1_generator_h ));
461469 CHECK (!secp256k1_rangeproof_rewind (ctx , blindout , & vout , NULL , NULL , commit .data , & minv , & maxv , & commit , proof , len , message_long , sizeof (message_long ), secp256k1_generator_h ));
462470 CHECK (secp256k1_rangeproof_rewind (ctx , blindout , & vout , NULL , NULL , commit .data , & minv , & maxv , & commit , proof , len , message_short , sizeof (message_short ), secp256k1_generator_h ));
@@ -472,6 +480,7 @@ static void test_rangeproof(void) {
472480 for (i = 0 ; i < 19 ; i ++ ) {
473481 len = 5134 ;
474482 CHECK (secp256k1_rangeproof_sign (ctx , proof , & len , 0 , & commit , blind , commit .data , i , 0 , v , NULL , 0 , NULL , 0 , secp256k1_generator_h ));
483+ CHECK (len <= secp256k1_rangeproof_max_size (ctx , v , 0 ));
475484 CHECK (secp256k1_rangeproof_verify (ctx , & minv , & maxv , & commit , proof , len , NULL , 0 , secp256k1_generator_h ));
476485 CHECK (len <= 5134 );
477486 CHECK (minv <= v );
@@ -487,6 +496,7 @@ static void test_rangeproof(void) {
487496 len = 5134 ;
488497 CHECK (secp256k1_rangeproof_sign (ctx , proof , & len , 0 , & commit , blind , commit .data , 0 , 3 , v , NULL , 0 , NULL , 0 , secp256k1_generator_h ));
489498 CHECK (len <= 5134 );
499+ CHECK (len <= secp256k1_rangeproof_max_size (ctx , v , 3 ));
490500 /* Test if trailing bytes are rejected. */
491501 proof [len ] = v ;
492502 CHECK (!secp256k1_rangeproof_verify (ctx , & minv , & maxv , & commit , proof , len + 1 , NULL , 0 , secp256k1_generator_h ));
@@ -521,6 +531,7 @@ static void test_rangeproof(void) {
521531 }
522532 CHECK (secp256k1_rangeproof_sign (ctx , proof , & len , vmin , & commit , blind , commit .data , exp , min_bits , v , NULL , 0 , NULL , 0 , secp256k1_generator_h ));
523533 CHECK (len <= 5134 );
534+ CHECK (len <= secp256k1_rangeproof_max_size (ctx , v , min_bits ));
524535 mlen = 4096 ;
525536 CHECK (secp256k1_rangeproof_rewind (ctx , blindout , & vout , message , & mlen , commit .data , & minv , & maxv , & commit , proof , len , NULL , 0 , secp256k1_generator_h ));
526537 for (j = 0 ; j < mlen ; j ++ ) {
0 commit comments