diff --git a/src/modules/bulletproofs/tests_impl.h b/src/modules/bulletproofs/tests_impl.h index a32c35355..be8de56b1 100644 --- a/src/modules/bulletproofs/tests_impl.h +++ b/src/modules/bulletproofs/tests_impl.h @@ -164,11 +164,56 @@ void test_norm_util_helpers(void) { secp256k1_scalar_set_int(&res, 256); CHECK(secp256k1_scalar_eq(&res, &r_pows[3])); } +void norm_arg_test(unsigned int n, unsigned int m) { + secp256k1_scalar n_vec[64], l_vec[64], c_vec[64]; + secp256k1_scalar r, q; + secp256k1_ge commit; + size_t i, plen; + int res; + secp256k1_bulletproofs_generators *gs = secp256k1_bulletproofs_generators_create(ctx, n + m); + secp256k1_scratch *scratch = secp256k1_scratch_space_create(ctx, 1000*1000); /* shouldn't need much */ + unsigned char proof[1000], transcript32[32]; + for (i = 0; i < 32; i++) { + transcript32[i] = i; + } + random_scalar_order(&r); + secp256k1_scalar_sqr(&q, &r); + + for (i = 0; i < n; i++) { + random_scalar_order(&n_vec[i]); + } + + for (i = 0; i < m; i++) { + random_scalar_order(&l_vec[i]); + random_scalar_order(&c_vec[i]); + } + + res = secp256k1_bulletproofs_commit(ctx, scratch, &commit, gs, n_vec, n, l_vec, m, c_vec, m, &q); + CHECK(res == 1); + res = secp256k1_bulletproofs_pp_rangeproof_norm_product_prove(ctx, scratch, proof, &plen, transcript32, &r, gs, n_vec, n, l_vec, m, c_vec, m, &commit); + CHECK(res == 1); + + for (i = 0; i < 32; i++) { + transcript32[i] = i; + } + + res = secp256k1_bulletproofs_pp_rangeproof_norm_product_verify(ctx, scratch, proof, plen, transcript32, &r, gs, n, c_vec, m, &commit); + CHECK(res == 1); +} + void run_bulletproofs_tests(void) { test_log_exp(); test_norm_util_helpers(); test_bulletproofs_generators_api(); test_bulletproofs_generators_fixed(); + + norm_arg_test(1, 1); + norm_arg_test(1, 64); + norm_arg_test(64, 1); + norm_arg_test(32, 32); + norm_arg_test(32, 64); + norm_arg_test(64, 32); + norm_arg_test(64, 64); } #endif