7 #ifndef SECP256K1_MODULE_RANGEPROOF_TESTS
8 #define SECP256K1_MODULE_RANGEPROOF_TESTS
21 unsigned char proof[5134];
22 unsigned char blind[32];
24 uint64_t vmin = secp256k1_rand32();
25 uint64_t val = vmin + secp256k1_rand32();
26 size_t len =
sizeof(proof);
28 const unsigned char message[68] =
"My tears are like the quiet drift / Of petals from some magic rose;";
29 size_t mlen =
sizeof(message);
30 const unsigned char ext_commit[72] =
"And all my grief flows from the rift / Of unremembered skies and snows.";
31 size_t ext_commit_len =
sizeof(ext_commit);
33 secp256k1_rand256(blind);
36 CHECK(
secp256k1_rangeproof_sign(none, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
38 CHECK(
secp256k1_rangeproof_sign(sign, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
40 CHECK(
secp256k1_rangeproof_sign(vrfy, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
42 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) != 0);
45 CHECK(
secp256k1_rangeproof_sign(both, NULL, &len, vmin, &commit, blind, commit.
data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
47 CHECK(
secp256k1_rangeproof_sign(both, proof, NULL, vmin, &commit, blind, commit.
data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
49 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, NULL, blind, commit.
data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
51 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, NULL, commit.
data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
53 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, blind, NULL, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
55 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, vmin - 1, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
57 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, NULL, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
59 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, NULL, 0, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) != 0);
61 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, NULL, 0, NULL, ext_commit_len, &
secp256k1_generator_const_h) == 0);
63 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, NULL, 0, NULL, 0, &
secp256k1_generator_const_h) != 0);
65 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, NULL, 0, NULL, 0, NULL) == 0);
68 CHECK(
secp256k1_rangeproof_sign(both, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, val, message, mlen, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) != 0);
76 CHECK(((uint64_t) 1 << mantissa) > val - vmin);
77 CHECK(((uint64_t) 1 << (mantissa - 1)) <= val - vmin);
78 CHECK(min_value == vmin);
79 CHECK(max_value >= val);
100 CHECK(*ecount == 18);
102 CHECK(*ecount == 18);
105 CHECK(*ecount == 19);
107 CHECK(*ecount == 20);
109 CHECK(*ecount == 21);
111 CHECK(*ecount == 22);
113 CHECK(*ecount == 22);
115 CHECK(*ecount == 23);
117 CHECK(*ecount == 23);
119 CHECK(*ecount == 24);
122 unsigned char blind_out[32];
123 unsigned char message_out[68];
127 size_t message_len =
sizeof(message_out);
129 CHECK(
secp256k1_rangeproof_rewind(none, blind_out, &value_out, message_out, &message_len, commit.
data, &min_value, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
130 CHECK(*ecount == 25);
131 CHECK(
secp256k1_rangeproof_rewind(sign, blind_out, &value_out, message_out, &message_len, commit.
data, &min_value, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
132 CHECK(*ecount == 26);
133 CHECK(
secp256k1_rangeproof_rewind(vrfy, blind_out, &value_out, message_out, &message_len, commit.
data, &min_value, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
134 CHECK(*ecount == 27);
135 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, message_out, &message_len, commit.
data, &min_value, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) != 0);
136 CHECK(*ecount == 27);
138 CHECK(min_value == vmin);
139 CHECK(max_value >= val);
140 CHECK(value_out == val);
141 CHECK(message_len ==
sizeof(message_out));
142 CHECK(memcmp(message, message_out,
sizeof(message_out)) == 0);
144 CHECK(
secp256k1_rangeproof_rewind(both, NULL, &value_out, message_out, &message_len, commit.
data, &min_value, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) != 0);
145 CHECK(*ecount == 27);
146 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, NULL, message_out, &message_len, commit.
data, &min_value, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) != 0);
147 CHECK(*ecount == 27);
148 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, &message_len, commit.
data, &min_value, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
149 CHECK(*ecount == 28);
150 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, commit.
data, &min_value, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) != 0);
151 CHECK(*ecount == 28);
152 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, NULL, &min_value, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
153 CHECK(*ecount == 29);
154 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, commit.
data, NULL, &max_value, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
155 CHECK(*ecount == 30);
156 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, commit.
data, &min_value, NULL, &commit, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
157 CHECK(*ecount == 31);
158 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, commit.
data, &min_value, &max_value, NULL, proof, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
159 CHECK(*ecount == 32);
160 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, commit.
data, &min_value, &max_value, &commit, NULL, len, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
161 CHECK(*ecount == 33);
162 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, commit.
data, &min_value, &max_value, &commit, proof, 0, ext_commit, ext_commit_len, &
secp256k1_generator_const_h) == 0);
163 CHECK(*ecount == 33);
164 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, commit.
data, &min_value, &max_value, &commit, proof, len, NULL, ext_commit_len, &
secp256k1_generator_const_h) == 0);
165 CHECK(*ecount == 34);
166 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, commit.
data, &min_value, &max_value, &commit, proof, len, NULL, 0, &
secp256k1_generator_const_h) == 0);
167 CHECK(*ecount == 34);
168 CHECK(
secp256k1_rangeproof_rewind(both, blind_out, &value_out, NULL, 0, commit.
data, &min_value, &max_value, &commit, proof, len, NULL, 0, NULL) == 0);
169 CHECK(*ecount == 35);
173 static void test_api(
void) {
190 for (i = 0; i < count; i++) {
192 test_rangeproof_api(none, sign, vrfy, both, &ecount);
201 static void test_borromean(
void) {
202 unsigned char e0[32];
216 secp256k1_rand256_test(m);
217 nrings = 1 + (secp256k1_rand32()&7);
219 secp256k1_scalar_set_int(&one, 1);
220 if (secp256k1_rand32()&1) {
221 secp256k1_scalar_negate(&one, &one);
223 for (i = 0; i < nrings; i++) {
224 rsizes[i] = 1 + (secp256k1_rand32()&7);
225 secidx[i] = secp256k1_rand32() % rsizes[i];
228 if(secp256k1_rand32()&7) {
231 if(secp256k1_rand32()&7) {
234 for (j = 0; j < rsizes[i]; j++) {
236 if(secp256k1_rand32()&7) {
239 if (j == secidx[i]) {
240 secp256k1_ecmult_gen(&ctx->ecmult_gen_ctx, &pubs[c + j], &sec[i]);
248 CHECK(
secp256k1_borromean_sign(&ctx->ecmult_ctx, &ctx->ecmult_gen_ctx, e0, s, pubs, k, sec, rsizes, secidx, nrings, m, 32));
250 i = secp256k1_rand32() % c;
251 secp256k1_scalar_negate(&s[i],&s[i]);
253 secp256k1_scalar_negate(&s[i],&s[i]);
254 secp256k1_scalar_set_int(&one, 1);
255 for(j = 0; j < 4; j++) {
256 i = secp256k1_rand32() % c;
257 if (secp256k1_rand32() & 1) {
258 secp256k1_gej_double_var(&pubs[i],&pubs[i], NULL);
260 secp256k1_scalar_add(&s[i],&s[i],&one);
266 static void test_rangeproof(
void) {
267 const uint64_t testvs[11] = {0, 1, 5, 11, 65535, 65537, INT32_MAX, UINT32_MAX, INT64_MAX - 1, INT64_MAX, UINT64_MAX};
270 unsigned char proof[5134 + 1];
271 unsigned char blind[32];
272 unsigned char blindout[32];
273 unsigned char message[4096];
285 const unsigned char message_short[120] =
"When I see my own likeness in the depths of someone else's consciousness, I always experience a moment of panic.";
287 unsigned char message_long[3968];
288 memset(message_long, 0xa5,
sizeof(message_long));
289 for (i = 1200; i < 3600; i += 120) {
290 memcpy(&message_long[i], message_short,
sizeof(message_short));
293 secp256k1_rand256(blind);
294 for (i = 0; i < 11; i++) {
297 for (vmin = 0; vmin < (i<9 && i > 0 ? 2 : 1); vmin++) {
298 const unsigned char *input_message = NULL;
299 size_t input_message_len = 0;
303 if (vmin == 0 && i > 2) {
304 input_message = message_short;
305 input_message_len =
sizeof(message_short);
307 if (vmin == 0 && i > 7) {
308 input_message = message_long;
309 input_message_len =
sizeof(message_long);
312 CHECK(
secp256k1_rangeproof_sign(ctx, proof, &len, vmin, &commit, blind, commit.
data, 0, 0, v, input_message, input_message_len, NULL, 0, &
secp256k1_generator_const_h));
315 CHECK(
secp256k1_rangeproof_rewind(ctx, blindout, &vout, message, &mlen, commit.
data, &minv, &maxv, &commit, proof, len, NULL, 0, &
secp256k1_generator_const_h));
316 if (input_message != NULL) {
317 CHECK(memcmp(message, input_message, input_message_len) == 0);
319 for (j = input_message_len; j < mlen; j++) {
320 CHECK(message[j] == 0);
323 CHECK(memcmp(blindout, blind, 32) == 0);
328 CHECK(
secp256k1_rangeproof_sign(ctx, proof, &len, v, &commit, blind, commit.
data, -1, 64, v, NULL, 0, NULL, 0, &
secp256k1_generator_const_h));
330 CHECK(
secp256k1_rangeproof_rewind(ctx, blindout, &vout, NULL, NULL, commit.
data, &minv, &maxv, &commit, proof, len, NULL, 0, &
secp256k1_generator_const_h));
331 CHECK(memcmp(blindout, blind, 32) == 0);
338 CHECK(
secp256k1_rangeproof_sign(ctx, proof, &len, v, &commit, blind, commit.
data, -1, 64, v, NULL, 0, message_short,
sizeof(message_short), &
secp256k1_generator_const_h));
340 CHECK(!
secp256k1_rangeproof_rewind(ctx, blindout, &vout, NULL, NULL, commit.
data, &minv, &maxv, &commit, proof, len, NULL, 0, &
secp256k1_generator_const_h));
341 CHECK(!
secp256k1_rangeproof_rewind(ctx, blindout, &vout, NULL, NULL, commit.
data, &minv, &maxv, &commit, proof, len, message_long,
sizeof(message_long), &
secp256k1_generator_const_h));
342 CHECK(
secp256k1_rangeproof_rewind(ctx, blindout, &vout, NULL, NULL, commit.
data, &minv, &maxv, &commit, proof, len, message_short,
sizeof(message_short), &
secp256k1_generator_const_h));
343 CHECK(memcmp(blindout, blind, 32) == 0);
349 secp256k1_rand256(blind);
352 for (i = 0; i < 19; i++) {
354 CHECK(
secp256k1_rangeproof_sign(ctx, proof, &len, 0, &commit, blind, commit.
data, i, 0, v, NULL, 0, NULL, 0, &
secp256k1_generator_const_h));
362 secp256k1_rand256(blind);
365 v = secp256k1_rands64(0, 255);
368 CHECK(
secp256k1_rangeproof_sign(ctx, proof, &len, 0, &commit, blind, commit.
data, 0, 3, v, NULL, 0, NULL, 0, &
secp256k1_generator_const_h));
373 for (i = 0; i < len*8; i++) {
374 proof[i >> 3] ^= 1 << (i & 7);
376 proof[i >> 3] ^= 1 << (i & 7);
382 memcpy(&commit2, &commit,
sizeof(commit));
383 for (i = 0; i < 10 * (size_t) count; i++) {
386 v = secp256k1_rands64(0, UINT64_MAX >> (secp256k1_rand32()&63));
388 if ((v < INT64_MAX) && (secp256k1_rand32()&1)) {
389 vmin = secp256k1_rands64(0, v);
391 secp256k1_rand256(blind);
394 exp = (int)secp256k1_rands64(0,18)-(int)secp256k1_rands64(0,18);
398 min_bits = (int)secp256k1_rands64(0,64)-(int)secp256k1_rands64(0,64);
400 min_bits = -min_bits;
402 CHECK(
secp256k1_rangeproof_sign(ctx, proof, &len, vmin, &commit, blind, commit.
data, exp, min_bits, v, NULL, 0, NULL, 0, &
secp256k1_generator_const_h));
405 CHECK(
secp256k1_rangeproof_rewind(ctx, blindout, &vout, message, &mlen, commit.
data, &minv, &maxv, &commit, proof, len, NULL, 0, &
secp256k1_generator_const_h));
406 for (j = 0; j < mlen; j++) {
407 CHECK(message[j] == 0);
410 CHECK(memcmp(blindout, blind, 32) == 0);
414 CHECK(
secp256k1_rangeproof_rewind(ctx, blindout, &vout, NULL, NULL, commit.
data, &minv, &maxv, &commit, proof, len, NULL, 0, &
secp256k1_generator_const_h));
415 memcpy(&commit2, &commit,
sizeof(commit));
417 for (j = 0; j < 10; j++) {
418 for (i = 0; i < 96; i++) {
419 secp256k1_rand256(&proof[i * 32]);
421 for (k = 0; k < 128; k++) {
425 len = secp256k1_rands64(0, 3072);
431 const unsigned char vector_1[] = {
432 0x62, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x02, 0x2a, 0x5c, 0x42, 0x0e, 0x1d,
433 0x51, 0xe1, 0xb7, 0xf3, 0x69, 0x04, 0xb5, 0xbb, 0x9b, 0x41, 0x66, 0x14, 0xf3, 0x64, 0x42, 0x26,
434 0xe3, 0xa7, 0x6a, 0x06, 0xbb, 0xa8, 0x5a, 0x49, 0x6f, 0x19, 0x76, 0xfb, 0xe5, 0x75, 0x77, 0x88,
435 0xab, 0xa9, 0x66, 0x44, 0x80, 0xea, 0x29, 0x95, 0x7f, 0xdf, 0x72, 0x4a, 0xaf, 0x02, 0xbe, 0xdd,
436 0x5d, 0x15, 0xd8, 0xae, 0xff, 0x74, 0xc9, 0x8c, 0x1a, 0x67, 0x0e, 0xb2, 0x57, 0x22, 0x99, 0xc3,
437 0x21, 0x46, 0x6f, 0x15, 0x58, 0x0e, 0xdb, 0xe6, 0x6e, 0xc4, 0x0d, 0xfe, 0x6f, 0x04, 0x6b, 0x0d,
438 0x18, 0x3d, 0x78, 0x40, 0x98, 0x56, 0x4e, 0xe4, 0x4a, 0x74, 0x90, 0xa7, 0xac, 0x9c, 0x16, 0xe0,
439 0x3e, 0x81, 0xaf, 0x0f, 0xe3, 0x4f, 0x34, 0x99, 0x52, 0xf7, 0xa7, 0xf6, 0xd3, 0x83, 0xa0, 0x17,
440 0x4b, 0x2d, 0xa7, 0xd4, 0xfd, 0xf7, 0x84, 0x45, 0xc4, 0x11, 0x71, 0x3d, 0x4a, 0x22, 0x34, 0x09,
441 0x9c, 0xa7, 0xe5, 0xc8, 0xba, 0x04, 0xbf, 0xfd, 0x25, 0x11, 0x7d, 0xa4, 0x43, 0x45, 0xc7, 0x62,
442 0x9e, 0x7b, 0x80, 0xf6, 0x09, 0xbb, 0x1b, 0x2e, 0xf3, 0xcd, 0x23, 0xe0, 0xed, 0x81, 0x43, 0x42,
443 0xbe, 0xc4, 0x9f, 0x58, 0x8a, 0x0d, 0x66, 0x79, 0x09, 0x70, 0x11, 0x68, 0x3d, 0x87, 0x38, 0x1c,
444 0x3c, 0x85, 0x52, 0x5b, 0x62, 0xf7, 0x3e, 0x7e, 0x87, 0xa2, 0x99, 0x24, 0xd0, 0x7d, 0x18, 0x63,
445 0x56, 0x48, 0xa4, 0x3a, 0xfe, 0x65, 0xfa, 0xa4, 0xd0, 0x67, 0xaa, 0x98, 0x65, 0x4d, 0xe4, 0x22,
446 0x75, 0x45, 0x52, 0xe8, 0x41, 0xc7, 0xed, 0x38, 0xeb, 0xf5, 0x02, 0x90, 0xc9, 0x45, 0xa3, 0xb0,
447 0x4d, 0x03, 0xd7, 0xab, 0x43, 0xe4, 0x21, 0xfc, 0x83, 0xd6, 0x12, 0x1d, 0x76, 0xb1, 0x3c, 0x67,
448 0x63, 0x1f, 0x52, 0x9d, 0xc3, 0x23, 0x5c, 0x4e, 0xa6, 0x8d, 0x01, 0x4a, 0xba, 0x9a, 0xf4, 0x16,
449 0x5b, 0x67, 0xc8, 0xe1, 0xd2, 0x42, 0x6d, 0xdf, 0xcd, 0x08, 0x6a, 0x73, 0x41, 0x6a, 0xc2, 0x84,
450 0xc6, 0x31, 0xbe, 0x57, 0xcb, 0x0e, 0xde, 0xbf, 0x71, 0xd5, 0x8a, 0xf7, 0x24, 0xb2, 0xa7, 0x89,
451 0x96, 0x62, 0x4f, 0xd9, 0xf7, 0xc3, 0xde, 0x4c, 0xab, 0x13, 0x72, 0xb4, 0xb3, 0x35, 0x04, 0x82,
452 0xa8, 0x75, 0x1d, 0xde, 0x46, 0xa8, 0x0d, 0xb8, 0x23, 0x44, 0x00, 0x44, 0xfa, 0x53, 0x6c, 0x2d,
453 0xce, 0xd3, 0xa6, 0x80, 0xa1, 0x20, 0xca, 0xd1, 0x63, 0xbb, 0xbe, 0x39, 0x5f, 0x9d, 0x27, 0x69,
454 0xb3, 0x33, 0x1f, 0xdb, 0xda, 0x67, 0x05, 0x37, 0xbe, 0x65, 0xe9, 0x7e, 0xa9, 0xc3, 0xff, 0x37,
455 0x8a, 0xb4, 0x2d, 0xfe, 0xf2, 0x16, 0x85, 0xc7, 0x0f, 0xd9, 0xbe, 0x14, 0xd1, 0x80, 0x14, 0x9f,
456 0x58, 0x56, 0x98, 0x41, 0xf6, 0x26, 0xf7, 0xa2, 0x71, 0x66, 0xb4, 0x7a, 0x9c, 0x12, 0x73, 0xd3,
457 0xdf, 0x77, 0x2b, 0x49, 0xe5, 0xca, 0x50, 0x57, 0x44, 0x6e, 0x3f, 0x58, 0x56, 0xbc, 0x21, 0x70,
458 0x4f, 0xc6, 0xaa, 0x12, 0xff, 0x7c, 0xa7, 0x3d, 0xed, 0x46, 0xc1, 0x40, 0xe6, 0x58, 0x09, 0x2a,
459 0xda, 0xb3, 0x76, 0xab, 0x44, 0xb5, 0x4e, 0xb3, 0x12, 0xe0, 0x26, 0x8a, 0x52, 0xac, 0x49, 0x1d,
460 0xe7, 0x06, 0x53, 0x3a, 0x01, 0x35, 0x21, 0x2e, 0x86, 0x48, 0xc5, 0x75, 0xc1, 0xa2, 0x7d, 0x22,
461 0x53, 0xf6, 0x3f, 0x41, 0xc5, 0xb3, 0x08, 0x7d, 0xa3, 0x67, 0xc0, 0xbb, 0xb6, 0x8d, 0xf0, 0xd3,
462 0x01, 0x72, 0xd3, 0x63, 0x82, 0x01, 0x1a, 0xe7, 0x1d, 0x22, 0xfa, 0x95, 0x33, 0xf6, 0xf2, 0xde,
463 0xa2, 0x53, 0x86, 0x55, 0x5a, 0xb4, 0x2e, 0x75, 0x75, 0xc6, 0xd5, 0x93, 0x9c, 0x57, 0xa9, 0x1f,
464 0xb9, 0x3e, 0xe8, 0x1c, 0xbf, 0xac, 0x1c, 0x54, 0x6f, 0xf5, 0xab, 0x41, 0xee, 0xb3, 0x0e, 0xd0,
465 0x76, 0xc4, 0x1a, 0x45, 0xcd, 0xf1, 0xd6, 0xcc, 0xb0, 0x83, 0x70, 0x73, 0xbc, 0x88, 0x74, 0xa0,
466 0x5b, 0xe7, 0x98, 0x10, 0x36, 0xbf, 0xec, 0x23, 0x1c, 0xc2, 0xb5, 0xba, 0x4b, 0x9d, 0x7f, 0x8c,
467 0x8a, 0xe2, 0xda, 0x18, 0xdd, 0xab, 0x27, 0x8a, 0x15, 0xeb, 0xb0, 0xd4, 0x3a, 0x8b, 0x77, 0x00,
468 0xc7, 0xbb, 0xcc, 0xfa, 0xba, 0xa4, 0x6a, 0x17, 0x5c, 0xf8, 0x51, 0x5d, 0x8d, 0x16, 0xcd, 0xa7,
469 0x0e, 0x71, 0x97, 0x98, 0x78, 0x5a, 0x41, 0xb3, 0xf0, 0x1f, 0x87, 0x2d, 0x65, 0xcd, 0x29, 0x49,
470 0xd2, 0x87, 0x2c, 0x91, 0xa9, 0x5f, 0xcc, 0xa9, 0xd8, 0xbb, 0x53, 0x18, 0xe7, 0xd6, 0xec, 0x65,
471 0xa6, 0x45, 0xf6, 0xce, 0xcf, 0x48, 0xf6, 0x1e, 0x3d, 0xd2, 0xcf, 0xcb, 0x3a, 0xcd, 0xbb, 0x92,
472 0x29, 0x24, 0x16, 0x7f, 0x8a, 0xa8, 0x5c, 0x0c, 0x45, 0x71, 0x33
474 const unsigned char commit_1[] = {
476 0xf5, 0x1e, 0x0d, 0xc5, 0x86, 0x78, 0x51, 0xa9, 0x00, 0x00, 0xef, 0x4d, 0xe2, 0x94, 0x60, 0x89,
477 0x83, 0x04, 0xb4, 0x0e, 0x90, 0x10, 0x05, 0x1c, 0x7f, 0xd7, 0x33, 0x92, 0x1f, 0xe7, 0x74, 0x59
487 &min_value_1, &max_value_1,
489 vector_1,
sizeof(vector_1),
496 const unsigned char two_g[33] = {
498 0xc6, 0x04, 0x7f, 0x94, 0x41, 0xed, 0x7d, 0x6d, 0x30, 0x45, 0x40, 0x6e, 0x95, 0xc0, 0x7c, 0xd8,
499 0x5c, 0x77, 0x8e, 0x4b, 0x8c, 0xef, 0x3c, 0xa7, 0xab, 0xac, 0x09, 0xb9, 0x5c, 0x70, 0x9e, 0xe5
501 unsigned char result[33];
506 CHECK(memcmp(two_g, result, 33) == 0);
519 for (i = 0; i < 2*count; i++) {