7 #ifndef SECP256K1_MODULE_COMMITMENT_TESTS
8 #define SECP256K1_MODULE_COMMITMENT_TESTS
19 static void test_commitment_api(
void) {
22 unsigned char blind[32];
23 unsigned char blind_out[32];
24 const unsigned char *blind_ptr = blind;
25 unsigned char *blind_out_ptr = blind_out;
26 uint64_t val = secp256k1_rand32();
43 secp256k1_rand256(blind);
101 static void test_pedersen(
void) {
104 unsigned char blinds[32*19];
105 const unsigned char *bptr[19];
113 inputs = (secp256k1_rand32() & 7) + 1;
114 outputs = (secp256k1_rand32() & 7) + 2;
115 total = inputs + outputs;
116 for (i = 0; i < 19; i++) {
117 cptr[i] = &commits[i];
118 bptr[i] = &blinds[i * 32];
121 for (i = 0; i < inputs; i++) {
122 values[i] = secp256k1_rands64(0, INT64_MAX - totalv);
125 for (i = 0; i < outputs - 1; i++) {
126 values[i + inputs] = secp256k1_rands64(0, totalv);
127 totalv -= values[i + inputs];
129 values[total - 1] = totalv;
131 for (i = 0; i < total - 1; i++) {
133 secp256k1_scalar_get_b32(&blinds[i * 32], &s);
136 for (i = 0; i < total; i++) {
141 if (inputs > 0 && values[0] > 0) {
145 for (i = 0; i < 4; i++) {
146 secp256k1_scalar_get_b32(&blinds[i * 32], &s);
148 values[0] = INT64_MAX;
151 for (i = 0; i < 3; i++) {
158 #define MAX_N_GENS 30
160 const size_t n_inputs = (secp256k1_rand32() % (
MAX_N_GENS / 2)) + 1;
161 const size_t n_outputs = (secp256k1_rand32() % (
MAX_N_GENS / 2)) + 1;
162 const size_t n_generators = n_inputs + n_outputs;
174 unsigned char generator_seed[32];
176 secp256k1_scalar_get_b32(generator_seed, &s);
178 for (i = 0; i < n_generators; i++) {
179 generator_blind[i] = (
unsigned char*) malloc(32);
180 pedersen_blind[i] = (
unsigned char*) malloc(32);
183 secp256k1_scalar_get_b32(generator_blind[i], &s);
185 secp256k1_scalar_get_b32(pedersen_blind[i], &s);
189 commit_ptr[i] = &commit[i];
194 for (i = 0; i < n_outputs; i++) {
195 value[n_inputs + i] = secp256k1_rands64(0, INT64_MAX - total_value);
196 total_value += value[n_inputs + i];
198 for (i = 0; i < n_inputs - 1; i++) {
199 value[i] = secp256k1_rands64(0, total_value);
200 total_value -= value[i];
202 value[i] = total_value;
206 for (i = 0; i < n_generators; i++) {
214 for (i = 0; i < n_generators; i++) {
215 free(generator_blind[i]);
216 free(pedersen_blind[i]);
223 test_commitment_api();
224 for (i = 0; i < 10*count; i++) {