7 #ifndef SECP256K1_MODULE_SCHNORRSIG_TESTS_H
8 #define SECP256K1_MODULE_SCHNORRSIG_TESTS_H
16 unsigned char nonces[2][32];
35 unsigned char tag[13] =
"BIP0340/nonce";
36 unsigned char aux_tag[11] =
"BIP0340/aux";
37 unsigned char algo16[16] =
"BIP0340/nonce\0\0\0";
40 unsigned char nonce[32];
41 unsigned char msg[32];
42 unsigned char key[32];
44 unsigned char aux_rand[32];
45 unsigned char *args[5];
73 for (i = 0; i <
count; i++) {
87 memset(algo16, 0x00, 16);
93 memset(algo16, 0xFF, 16);
101 unsigned char sk1[32];
102 unsigned char sk2[32];
103 unsigned char sk3[32];
104 unsigned char msg[32];
109 unsigned char sig[64];
137 memset(&zero_pk, 0,
sizeof(zero_pk));
182 char tag[17] =
"BIP0340/challenge";
194 unsigned char sig[64];
222 const unsigned char sk[32] = {
223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
225 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
226 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03
228 const unsigned char pk[32] = {
229 0xF9, 0x30, 0x8A, 0x01, 0x92, 0x58, 0xC3, 0x10,
230 0x49, 0x34, 0x4F, 0x85, 0xF8, 0x9D, 0x52, 0x29,
231 0xB5, 0x31, 0xC8, 0x45, 0x83, 0x6F, 0x99, 0xB0,
232 0x86, 0x01, 0xF1, 0x13, 0xBC, 0xE0, 0x36, 0xF9
234 unsigned char aux_rand[32] = {
235 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
236 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
237 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
238 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
240 const unsigned char msg[32] = {
241 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
242 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
243 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
244 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
246 const unsigned char sig[64] = {
247 0xE9, 0x07, 0x83, 0x1F, 0x80, 0x84, 0x8D, 0x10,
248 0x69, 0xA5, 0x37, 0x1B, 0x40, 0x24, 0x10, 0x36,
249 0x4B, 0xDF, 0x1C, 0x5F, 0x83, 0x07, 0xB0, 0x08,
250 0x4C, 0x55, 0xF1, 0xCE, 0x2D, 0xCA, 0x82, 0x15,
251 0x25, 0xF6, 0x6A, 0x4A, 0x85, 0xEA, 0x8B, 0x71,
252 0xE4, 0x82, 0xA7, 0x4F, 0x38, 0x2D, 0x2C, 0xE5,
253 0xEB, 0xEE, 0xE8, 0xFD, 0xB2, 0x17, 0x2F, 0x47,
254 0x7D, 0xF4, 0x90, 0x0D, 0x31, 0x05, 0x36, 0xC0
261 const unsigned char sk[32] = {
262 0xB7, 0xE1, 0x51, 0x62, 0x8A, 0xED, 0x2A, 0x6A,
263 0xBF, 0x71, 0x58, 0x80, 0x9C, 0xF4, 0xF3, 0xC7,
264 0x62, 0xE7, 0x16, 0x0F, 0x38, 0xB4, 0xDA, 0x56,
265 0xA7, 0x84, 0xD9, 0x04, 0x51, 0x90, 0xCF, 0xEF
267 const unsigned char pk[32] = {
268 0xDF, 0xF1, 0xD7, 0x7F, 0x2A, 0x67, 0x1C, 0x5F,
269 0x36, 0x18, 0x37, 0x26, 0xDB, 0x23, 0x41, 0xBE,
270 0x58, 0xFE, 0xAE, 0x1D, 0xA2, 0xDE, 0xCE, 0xD8,
271 0x43, 0x24, 0x0F, 0x7B, 0x50, 0x2B, 0xA6, 0x59
273 unsigned char aux_rand[32] = {
274 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
275 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
276 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
277 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
279 const unsigned char msg[32] = {
280 0x24, 0x3F, 0x6A, 0x88, 0x85, 0xA3, 0x08, 0xD3,
281 0x13, 0x19, 0x8A, 0x2E, 0x03, 0x70, 0x73, 0x44,
282 0xA4, 0x09, 0x38, 0x22, 0x29, 0x9F, 0x31, 0xD0,
283 0x08, 0x2E, 0xFA, 0x98, 0xEC, 0x4E, 0x6C, 0x89
285 const unsigned char sig[64] = {
286 0x68, 0x96, 0xBD, 0x60, 0xEE, 0xAE, 0x29, 0x6D,
287 0xB4, 0x8A, 0x22, 0x9F, 0xF7, 0x1D, 0xFE, 0x07,
288 0x1B, 0xDE, 0x41, 0x3E, 0x6D, 0x43, 0xF9, 0x17,
289 0xDC, 0x8D, 0xCF, 0x8C, 0x78, 0xDE, 0x33, 0x41,
290 0x89, 0x06, 0xD1, 0x1A, 0xC9, 0x76, 0xAB, 0xCC,
291 0xB2, 0x0B, 0x09, 0x12, 0x92, 0xBF, 0xF4, 0xEA,
292 0x89, 0x7E, 0xFC, 0xB6, 0x39, 0xEA, 0x87, 0x1C,
293 0xFA, 0x95, 0xF6, 0xDE, 0x33, 0x9E, 0x4B, 0x0A
300 const unsigned char sk[32] = {
301 0xC9, 0x0F, 0xDA, 0xA2, 0x21, 0x68, 0xC2, 0x34,
302 0xC4, 0xC6, 0x62, 0x8B, 0x80, 0xDC, 0x1C, 0xD1,
303 0x29, 0x02, 0x4E, 0x08, 0x8A, 0x67, 0xCC, 0x74,
304 0x02, 0x0B, 0xBE, 0xA6, 0x3B, 0x14, 0xE5, 0xC9
306 const unsigned char pk[32] = {
307 0xDD, 0x30, 0x8A, 0xFE, 0xC5, 0x77, 0x7E, 0x13,
308 0x12, 0x1F, 0xA7, 0x2B, 0x9C, 0xC1, 0xB7, 0xCC,
309 0x01, 0x39, 0x71, 0x53, 0x09, 0xB0, 0x86, 0xC9,
310 0x60, 0xE1, 0x8F, 0xD9, 0x69, 0x77, 0x4E, 0xB8
312 unsigned char aux_rand[32] = {
313 0xC8, 0x7A, 0xA5, 0x38, 0x24, 0xB4, 0xD7, 0xAE,
314 0x2E, 0xB0, 0x35, 0xA2, 0xB5, 0xBB, 0xBC, 0xCC,
315 0x08, 0x0E, 0x76, 0xCD, 0xC6, 0xD1, 0x69, 0x2C,
316 0x4B, 0x0B, 0x62, 0xD7, 0x98, 0xE6, 0xD9, 0x06
318 const unsigned char msg[32] = {
319 0x7E, 0x2D, 0x58, 0xD8, 0xB3, 0xBC, 0xDF, 0x1A,
320 0xBA, 0xDE, 0xC7, 0x82, 0x90, 0x54, 0xF9, 0x0D,
321 0xDA, 0x98, 0x05, 0xAA, 0xB5, 0x6C, 0x77, 0x33,
322 0x30, 0x24, 0xB9, 0xD0, 0xA5, 0x08, 0xB7, 0x5C
324 const unsigned char sig[64] = {
325 0x58, 0x31, 0xAA, 0xEE, 0xD7, 0xB4, 0x4B, 0xB7,
326 0x4E, 0x5E, 0xAB, 0x94, 0xBA, 0x9D, 0x42, 0x94,
327 0xC4, 0x9B, 0xCF, 0x2A, 0x60, 0x72, 0x8D, 0x8B,
328 0x4C, 0x20, 0x0F, 0x50, 0xDD, 0x31, 0x3C, 0x1B,
329 0xAB, 0x74, 0x58, 0x79, 0xA5, 0xAD, 0x95, 0x4A,
330 0x72, 0xC4, 0x5A, 0x91, 0xC3, 0xA5, 0x1D, 0x3C,
331 0x7A, 0xDE, 0xA9, 0x8D, 0x82, 0xF8, 0x48, 0x1E,
332 0x0E, 0x1E, 0x03, 0x67, 0x4A, 0x6F, 0x3F, 0xB7
339 const unsigned char sk[32] = {
340 0x0B, 0x43, 0x2B, 0x26, 0x77, 0x93, 0x73, 0x81,
341 0xAE, 0xF0, 0x5B, 0xB0, 0x2A, 0x66, 0xEC, 0xD0,
342 0x12, 0x77, 0x30, 0x62, 0xCF, 0x3F, 0xA2, 0x54,
343 0x9E, 0x44, 0xF5, 0x8E, 0xD2, 0x40, 0x17, 0x10
345 const unsigned char pk[32] = {
346 0x25, 0xD1, 0xDF, 0xF9, 0x51, 0x05, 0xF5, 0x25,
347 0x3C, 0x40, 0x22, 0xF6, 0x28, 0xA9, 0x96, 0xAD,
348 0x3A, 0x0D, 0x95, 0xFB, 0xF2, 0x1D, 0x46, 0x8A,
349 0x1B, 0x33, 0xF8, 0xC1, 0x60, 0xD8, 0xF5, 0x17
351 unsigned char aux_rand[32] = {
352 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
353 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
354 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
355 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
357 const unsigned char msg[32] = {
358 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
359 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
360 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
361 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
363 const unsigned char sig[64] = {
364 0x7E, 0xB0, 0x50, 0x97, 0x57, 0xE2, 0x46, 0xF1,
365 0x94, 0x49, 0x88, 0x56, 0x51, 0x61, 0x1C, 0xB9,
366 0x65, 0xEC, 0xC1, 0xA1, 0x87, 0xDD, 0x51, 0xB6,
367 0x4F, 0xDA, 0x1E, 0xDC, 0x96, 0x37, 0xD5, 0xEC,
368 0x97, 0x58, 0x2B, 0x9C, 0xB1, 0x3D, 0xB3, 0x93,
369 0x37, 0x05, 0xB3, 0x2B, 0xA9, 0x82, 0xAF, 0x5A,
370 0xF2, 0x5F, 0xD7, 0x88, 0x81, 0xEB, 0xB3, 0x27,
371 0x71, 0xFC, 0x59, 0x22, 0xEF, 0xC6, 0x6E, 0xA3
378 const unsigned char pk[32] = {
379 0xD6, 0x9C, 0x35, 0x09, 0xBB, 0x99, 0xE4, 0x12,
380 0xE6, 0x8B, 0x0F, 0xE8, 0x54, 0x4E, 0x72, 0x83,
381 0x7D, 0xFA, 0x30, 0x74, 0x6D, 0x8B, 0xE2, 0xAA,
382 0x65, 0x97, 0x5F, 0x29, 0xD2, 0x2D, 0xC7, 0xB9
384 const unsigned char msg[32] = {
385 0x4D, 0xF3, 0xC3, 0xF6, 0x8F, 0xCC, 0x83, 0xB2,
386 0x7E, 0x9D, 0x42, 0xC9, 0x04, 0x31, 0xA7, 0x24,
387 0x99, 0xF1, 0x78, 0x75, 0xC8, 0x1A, 0x59, 0x9B,
388 0x56, 0x6C, 0x98, 0x89, 0xB9, 0x69, 0x67, 0x03
390 const unsigned char sig[64] = {
391 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
392 0x00, 0x00, 0x00, 0x3B, 0x78, 0xCE, 0x56, 0x3F,
393 0x89, 0xA0, 0xED, 0x94, 0x14, 0xF5, 0xAA, 0x28,
394 0xAD, 0x0D, 0x96, 0xD6, 0x79, 0x5F, 0x9C, 0x63,
395 0x76, 0xAF, 0xB1, 0x54, 0x8A, 0xF6, 0x03, 0xB3,
396 0xEB, 0x45, 0xC9, 0xF8, 0x20, 0x7D, 0xEE, 0x10,
397 0x60, 0xCB, 0x71, 0xC0, 0x4E, 0x80, 0xF5, 0x93,
398 0x06, 0x0B, 0x07, 0xD2, 0x83, 0x08, 0xD7, 0xF4
404 const unsigned char pk[32] = {
405 0xEE, 0xFD, 0xEA, 0x4C, 0xDB, 0x67, 0x77, 0x50,
406 0xA4, 0x20, 0xFE, 0xE8, 0x07, 0xEA, 0xCF, 0x21,
407 0xEB, 0x98, 0x98, 0xAE, 0x79, 0xB9, 0x76, 0x87,
408 0x66, 0xE4, 0xFA, 0xA0, 0x4A, 0x2D, 0x4A, 0x34
416 const unsigned char pk[32] = {
417 0xDF, 0xF1, 0xD7, 0x7F, 0x2A, 0x67, 0x1C, 0x5F,
418 0x36, 0x18, 0x37, 0x26, 0xDB, 0x23, 0x41, 0xBE,
419 0x58, 0xFE, 0xAE, 0x1D, 0xA2, 0xDE, 0xCE, 0xD8,
420 0x43, 0x24, 0x0F, 0x7B, 0x50, 0x2B, 0xA6, 0x59
422 const unsigned char msg[32] = {
423 0x24, 0x3F, 0x6A, 0x88, 0x85, 0xA3, 0x08, 0xD3,
424 0x13, 0x19, 0x8A, 0x2E, 0x03, 0x70, 0x73, 0x44,
425 0xA4, 0x09, 0x38, 0x22, 0x29, 0x9F, 0x31, 0xD0,
426 0x08, 0x2E, 0xFA, 0x98, 0xEC, 0x4E, 0x6C, 0x89
428 const unsigned char sig[64] = {
429 0xFF, 0xF9, 0x7B, 0xD5, 0x75, 0x5E, 0xEE, 0xA4,
430 0x20, 0x45, 0x3A, 0x14, 0x35, 0x52, 0x35, 0xD3,
431 0x82, 0xF6, 0x47, 0x2F, 0x85, 0x68, 0xA1, 0x8B,
432 0x2F, 0x05, 0x7A, 0x14, 0x60, 0x29, 0x75, 0x56,
433 0x3C, 0xC2, 0x79, 0x44, 0x64, 0x0A, 0xC6, 0x07,
434 0xCD, 0x10, 0x7A, 0xE1, 0x09, 0x23, 0xD9, 0xEF,
435 0x7A, 0x73, 0xC6, 0x43, 0xE1, 0x66, 0xBE, 0x5E,
436 0xBE, 0xAF, 0xA3, 0x4B, 0x1A, 0xC5, 0x53, 0xE2
442 const unsigned char pk[32] = {
443 0xDF, 0xF1, 0xD7, 0x7F, 0x2A, 0x67, 0x1C, 0x5F,
444 0x36, 0x18, 0x37, 0x26, 0xDB, 0x23, 0x41, 0xBE,
445 0x58, 0xFE, 0xAE, 0x1D, 0xA2, 0xDE, 0xCE, 0xD8,
446 0x43, 0x24, 0x0F, 0x7B, 0x50, 0x2B, 0xA6, 0x59
448 const unsigned char msg[32] = {
449 0x24, 0x3F, 0x6A, 0x88, 0x85, 0xA3, 0x08, 0xD3,
450 0x13, 0x19, 0x8A, 0x2E, 0x03, 0x70, 0x73, 0x44,
451 0xA4, 0x09, 0x38, 0x22, 0x29, 0x9F, 0x31, 0xD0,
452 0x08, 0x2E, 0xFA, 0x98, 0xEC, 0x4E, 0x6C, 0x89
454 const unsigned char sig[64] = {
455 0x1F, 0xA6, 0x2E, 0x33, 0x1E, 0xDB, 0xC2, 0x1C,
456 0x39, 0x47, 0x92, 0xD2, 0xAB, 0x11, 0x00, 0xA7,
457 0xB4, 0x32, 0xB0, 0x13, 0xDF, 0x3F, 0x6F, 0xF4,
458 0xF9, 0x9F, 0xCB, 0x33, 0xE0, 0xE1, 0x51, 0x5F,
459 0x28, 0x89, 0x0B, 0x3E, 0xDB, 0x6E, 0x71, 0x89,
460 0xB6, 0x30, 0x44, 0x8B, 0x51, 0x5C, 0xE4, 0xF8,
461 0x62, 0x2A, 0x95, 0x4C, 0xFE, 0x54, 0x57, 0x35,
462 0xAA, 0xEA, 0x51, 0x34, 0xFC, 0xCD, 0xB2, 0xBD
468 const unsigned char pk[32] = {
469 0xDF, 0xF1, 0xD7, 0x7F, 0x2A, 0x67, 0x1C, 0x5F,
470 0x36, 0x18, 0x37, 0x26, 0xDB, 0x23, 0x41, 0xBE,
471 0x58, 0xFE, 0xAE, 0x1D, 0xA2, 0xDE, 0xCE, 0xD8,
472 0x43, 0x24, 0x0F, 0x7B, 0x50, 0x2B, 0xA6, 0x59
474 const unsigned char msg[32] = {
475 0x24, 0x3F, 0x6A, 0x88, 0x85, 0xA3, 0x08, 0xD3,
476 0x13, 0x19, 0x8A, 0x2E, 0x03, 0x70, 0x73, 0x44,
477 0xA4, 0x09, 0x38, 0x22, 0x29, 0x9F, 0x31, 0xD0,
478 0x08, 0x2E, 0xFA, 0x98, 0xEC, 0x4E, 0x6C, 0x89
480 const unsigned char sig[64] = {
481 0x6C, 0xFF, 0x5C, 0x3B, 0xA8, 0x6C, 0x69, 0xEA,
482 0x4B, 0x73, 0x76, 0xF3, 0x1A, 0x9B, 0xCB, 0x4F,
483 0x74, 0xC1, 0x97, 0x60, 0x89, 0xB2, 0xD9, 0x96,
484 0x3D, 0xA2, 0xE5, 0x54, 0x3E, 0x17, 0x77, 0x69,
485 0x96, 0x17, 0x64, 0xB3, 0xAA, 0x9B, 0x2F, 0xFC,
486 0xB6, 0xEF, 0x94, 0x7B, 0x68, 0x87, 0xA2, 0x26,
487 0xE8, 0xD7, 0xC9, 0x3E, 0x00, 0xC5, 0xED, 0x0C,
488 0x18, 0x34, 0xFF, 0x0D, 0x0C, 0x2E, 0x6D, 0xA6
494 const unsigned char pk[32] = {
495 0xDF, 0xF1, 0xD7, 0x7F, 0x2A, 0x67, 0x1C, 0x5F,
496 0x36, 0x18, 0x37, 0x26, 0xDB, 0x23, 0x41, 0xBE,
497 0x58, 0xFE, 0xAE, 0x1D, 0xA2, 0xDE, 0xCE, 0xD8,
498 0x43, 0x24, 0x0F, 0x7B, 0x50, 0x2B, 0xA6, 0x59
500 const unsigned char msg[32] = {
501 0x24, 0x3F, 0x6A, 0x88, 0x85, 0xA3, 0x08, 0xD3,
502 0x13, 0x19, 0x8A, 0x2E, 0x03, 0x70, 0x73, 0x44,
503 0xA4, 0x09, 0x38, 0x22, 0x29, 0x9F, 0x31, 0xD0,
504 0x08, 0x2E, 0xFA, 0x98, 0xEC, 0x4E, 0x6C, 0x89
506 const unsigned char sig[64] = {
507 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
508 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
509 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
510 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
511 0x12, 0x3D, 0xDA, 0x83, 0x28, 0xAF, 0x9C, 0x23,
512 0xA9, 0x4C, 0x1F, 0xEE, 0xCF, 0xD1, 0x23, 0xBA,
513 0x4F, 0xB7, 0x34, 0x76, 0xF0, 0xD5, 0x94, 0xDC,
514 0xB6, 0x5C, 0x64, 0x25, 0xBD, 0x18, 0x60, 0x51
520 const unsigned char pk[32] = {
521 0xDF, 0xF1, 0xD7, 0x7F, 0x2A, 0x67, 0x1C, 0x5F,
522 0x36, 0x18, 0x37, 0x26, 0xDB, 0x23, 0x41, 0xBE,
523 0x58, 0xFE, 0xAE, 0x1D, 0xA2, 0xDE, 0xCE, 0xD8,
524 0x43, 0x24, 0x0F, 0x7B, 0x50, 0x2B, 0xA6, 0x59
526 const unsigned char msg[32] = {
527 0x24, 0x3F, 0x6A, 0x88, 0x85, 0xA3, 0x08, 0xD3,
528 0x13, 0x19, 0x8A, 0x2E, 0x03, 0x70, 0x73, 0x44,
529 0xA4, 0x09, 0x38, 0x22, 0x29, 0x9F, 0x31, 0xD0,
530 0x08, 0x2E, 0xFA, 0x98, 0xEC, 0x4E, 0x6C, 0x89
532 const unsigned char sig[64] = {
533 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
534 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
535 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
537 0x76, 0x15, 0xFB, 0xAF, 0x5A, 0xE2, 0x88, 0x64,
538 0x01, 0x3C, 0x09, 0x97, 0x42, 0xDE, 0xAD, 0xB4,
539 0xDB, 0xA8, 0x7F, 0x11, 0xAC, 0x67, 0x54, 0xF9,
540 0x37, 0x80, 0xD5, 0xA1, 0x83, 0x7C, 0xF1, 0x97
546 const unsigned char pk[32] = {
547 0xDF, 0xF1, 0xD7, 0x7F, 0x2A, 0x67, 0x1C, 0x5F,
548 0x36, 0x18, 0x37, 0x26, 0xDB, 0x23, 0x41, 0xBE,
549 0x58, 0xFE, 0xAE, 0x1D, 0xA2, 0xDE, 0xCE, 0xD8,
550 0x43, 0x24, 0x0F, 0x7B, 0x50, 0x2B, 0xA6, 0x59
552 const unsigned char msg[32] = {
553 0x24, 0x3F, 0x6A, 0x88, 0x85, 0xA3, 0x08, 0xD3,
554 0x13, 0x19, 0x8A, 0x2E, 0x03, 0x70, 0x73, 0x44,
555 0xA4, 0x09, 0x38, 0x22, 0x29, 0x9F, 0x31, 0xD0,
556 0x08, 0x2E, 0xFA, 0x98, 0xEC, 0x4E, 0x6C, 0x89
558 const unsigned char sig[64] = {
559 0x4A, 0x29, 0x8D, 0xAC, 0xAE, 0x57, 0x39, 0x5A,
560 0x15, 0xD0, 0x79, 0x5D, 0xDB, 0xFD, 0x1D, 0xCB,
561 0x56, 0x4D, 0xA8, 0x2B, 0x0F, 0x26, 0x9B, 0xC7,
562 0x0A, 0x74, 0xF8, 0x22, 0x04, 0x29, 0xBA, 0x1D,
563 0x69, 0xE8, 0x9B, 0x4C, 0x55, 0x64, 0xD0, 0x03,
564 0x49, 0x10, 0x6B, 0x84, 0x97, 0x78, 0x5D, 0xD7,
565 0xD1, 0xD7, 0x13, 0xA8, 0xAE, 0x82, 0xB3, 0x2F,
566 0xA7, 0x9D, 0x5F, 0x7F, 0xC4, 0x07, 0xD3, 0x9B
572 const unsigned char pk[32] = {
573 0xDF, 0xF1, 0xD7, 0x7F, 0x2A, 0x67, 0x1C, 0x5F,
574 0x36, 0x18, 0x37, 0x26, 0xDB, 0x23, 0x41, 0xBE,
575 0x58, 0xFE, 0xAE, 0x1D, 0xA2, 0xDE, 0xCE, 0xD8,
576 0x43, 0x24, 0x0F, 0x7B, 0x50, 0x2B, 0xA6, 0x59
578 const unsigned char msg[32] = {
579 0x24, 0x3F, 0x6A, 0x88, 0x85, 0xA3, 0x08, 0xD3,
580 0x13, 0x19, 0x8A, 0x2E, 0x03, 0x70, 0x73, 0x44,
581 0xA4, 0x09, 0x38, 0x22, 0x29, 0x9F, 0x31, 0xD0,
582 0x08, 0x2E, 0xFA, 0x98, 0xEC, 0x4E, 0x6C, 0x89
584 const unsigned char sig[64] = {
585 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
586 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
587 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
588 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0x2F,
589 0x69, 0xE8, 0x9B, 0x4C, 0x55, 0x64, 0xD0, 0x03,
590 0x49, 0x10, 0x6B, 0x84, 0x97, 0x78, 0x5D, 0xD7,
591 0xD1, 0xD7, 0x13, 0xA8, 0xAE, 0x82, 0xB3, 0x2F,
592 0xA7, 0x9D, 0x5F, 0x7F, 0xC4, 0x07, 0xD3, 0x9B
598 const unsigned char pk[32] = {
599 0xDF, 0xF1, 0xD7, 0x7F, 0x2A, 0x67, 0x1C, 0x5F,
600 0x36, 0x18, 0x37, 0x26, 0xDB, 0x23, 0x41, 0xBE,
601 0x58, 0xFE, 0xAE, 0x1D, 0xA2, 0xDE, 0xCE, 0xD8,
602 0x43, 0x24, 0x0F, 0x7B, 0x50, 0x2B, 0xA6, 0x59
604 const unsigned char msg[32] = {
605 0x24, 0x3F, 0x6A, 0x88, 0x85, 0xA3, 0x08, 0xD3,
606 0x13, 0x19, 0x8A, 0x2E, 0x03, 0x70, 0x73, 0x44,
607 0xA4, 0x09, 0x38, 0x22, 0x29, 0x9F, 0x31, 0xD0,
608 0x08, 0x2E, 0xFA, 0x98, 0xEC, 0x4E, 0x6C, 0x89
610 const unsigned char sig[64] = {
611 0x6C, 0xFF, 0x5C, 0x3B, 0xA8, 0x6C, 0x69, 0xEA,
612 0x4B, 0x73, 0x76, 0xF3, 0x1A, 0x9B, 0xCB, 0x4F,
613 0x74, 0xC1, 0x97, 0x60, 0x89, 0xB2, 0xD9, 0x96,
614 0x3D, 0xA2, 0xE5, 0x54, 0x3E, 0x17, 0x77, 0x69,
615 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
616 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE,
617 0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B,
618 0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41
624 const unsigned char pk[32] = {
625 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
626 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
627 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
628 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFC, 0x30
637 static int nonce_function_failing(
unsigned char *nonce32,
const unsigned char *msg32,
const unsigned char *key32,
const unsigned char *xonly_pk32,
const unsigned char *algo16,
void *data) {
648 static int nonce_function_0(
unsigned char *nonce32,
const unsigned char *msg32,
const unsigned char *key32,
const unsigned char *xonly_pk32,
const unsigned char *algo16,
void *data) {
655 memset(nonce32, 0, 32);
660 static int nonce_function_overflowing(
unsigned char *nonce32,
const unsigned char *msg32,
const unsigned char *key32,
const unsigned char *xonly_pk32,
const unsigned char *algo16,
void *data) {
667 memset(nonce32, 0xFF, 32);
672 unsigned char sk[32];
674 const unsigned char msg[32] =
"this is a msg for a schnorrsig..";
675 unsigned char sig[64];
676 unsigned char zeros64[64] = { 0 };
683 memset(
sig, 1,
sizeof(
sig));
686 memset(&
sig, 1,
sizeof(
sig));
698 unsigned char sk[32];
699 unsigned char msg[
N_SIGS][32];
710 for (i = 0; i <
N_SIGS; i++) {
722 sig[sig_idx][byte_idx] ^= xorbyte;
724 sig[sig_idx][byte_idx] ^= xorbyte;
727 sig[sig_idx][32+byte_idx] ^= xorbyte;
729 sig[sig_idx][32+byte_idx] ^= xorbyte;
732 msg[sig_idx][byte_idx] ^= xorbyte;
734 msg[sig_idx][byte_idx] ^= xorbyte;
743 memset(&
sig[0][32], 0xFF, 32);
757 unsigned char sk[32];
760 unsigned char internal_pk_bytes[32];
762 unsigned char output_pk_bytes[32];
763 unsigned char tweak[32];
765 unsigned char msg[32];
766 unsigned char sig[64];
799 for (i = 0; i <
count; i++) {
static void secp256k1_sha256_initialize_tagged(secp256k1_sha256 *hash, const unsigned char *tag, size_t taglen)
Internal SHA-1 implementation.
static void secp256k1_scalar_set_b32(secp256k1_scalar *r, const unsigned char *bin, int *overflow)
Set a scalar from a big endian byte array.
static void secp256k1_scalar_get_b32(unsigned char *bin, const secp256k1_scalar *a)
Convert a scalar to a byte array.
static void secp256k1_scalar_negate(secp256k1_scalar *r, const secp256k1_scalar *a)
Compute the complement of a scalar (modulo the group order).
static void secp256k1_nonce_function_bip340_sha256_tagged_aux(secp256k1_sha256 *sha)
static void secp256k1_nonce_function_bip340_sha256_tagged(secp256k1_sha256 *sha)
static void secp256k1_schnorrsig_sha256_tagged(secp256k1_sha256 *sha)
static int nonce_function_bip340(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *xonly_pk32, const unsigned char *algo16, void *data)
void test_schnorrsig_bip_vectors(void)
void test_schnorrsig_sign(void)
static int nonce_function_0(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *xonly_pk32, const unsigned char *algo16, void *data)
void run_nonce_function_bip340_tests(void)
void test_schnorrsig_bip_vectors_check_verify(const unsigned char *pk_serialized, const unsigned char *msg32, const unsigned char *sig, int expected)
void test_schnorrsig_taproot(void)
static int nonce_function_overflowing(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *xonly_pk32, const unsigned char *algo16, void *data)
static int nonce_function_failing(unsigned char *nonce32, const unsigned char *msg32, const unsigned char *key32, const unsigned char *xonly_pk32, const unsigned char *algo16, void *data)
void test_sha256_eq(const secp256k1_sha256 *sha1, const secp256k1_sha256 *sha2)
void test_schnorrsig_bip_vectors_check_signing(const unsigned char *sk, const unsigned char *pk_serialized, unsigned char *aux_rand, const unsigned char *msg, const unsigned char *expected_sig)
void test_schnorrsig_sign_verify(void)
void run_schnorrsig_tests(void)
void test_schnorrsig_sha256_tagged(void)
void nonce_function_bip340_bitflip(unsigned char **args, size_t n_flip, size_t n_bytes)
void test_schnorrsig_api(void)
static SECP256K1_INLINE int secp256k1_memcmp_var(const void *s1, const void *s2, size_t n)
Semantics like memcmp.
#define SECP256K1_CONTEXT_SIGN
SECP256K1_API void secp256k1_context_set_error_callback(secp256k1_context *ctx, void(*fun)(const char *message, void *data), const void *data) SECP256K1_ARG_NONNULL(1)
Set a callback function to be called when an internal consistency check fails.
SECP256K1_API void secp256k1_context_set_illegal_callback(secp256k1_context *ctx, void(*fun)(const char *message, void *data), const void *data) SECP256K1_ARG_NONNULL(1)
Set a callback function to be called when an illegal argument is passed to an API call.
#define SECP256K1_CONTEXT_NONE
SECP256K1_API secp256k1_context * secp256k1_context_create(unsigned int flags) SECP256K1_WARN_UNUSED_RESULT
Create a secp256k1 context object (in dynamically allocated memory).
#define SECP256K1_CONTEXT_VERIFY
Flags to pass to secp256k1_context_create, secp256k1_context_preallocated_size, and secp256k1_context...
SECP256K1_API void secp256k1_context_destroy(secp256k1_context *ctx)
Destroy a secp256k1 context object (created in dynamically allocated memory).
SECP256K1_API int secp256k1_schnorrsig_sign(const secp256k1_context *ctx, unsigned char *sig64, const unsigned char *msg32, const secp256k1_keypair *keypair, secp256k1_nonce_function_hardened noncefp, void *ndata) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4)
Create a Schnorr signature.
SECP256K1_API SECP256K1_WARN_UNUSED_RESULT int secp256k1_schnorrsig_verify(const secp256k1_context *ctx, const unsigned char *sig64, const unsigned char *msg32, const secp256k1_xonly_pubkey *pubkey) SECP256K1_ARG_NONNULL(1) SECP256K1_ARG_NONNULL(2) SECP256K1_ARG_NONNULL(3) SECP256K1_ARG_NONNULL(4)
Verify a Schnorr signature.
Opaque data structure that holds a keypair consisting of a secret and a public key.
A scalar modulo the group order of the secp256k1 curve.
Opaque data structure that holds a parsed and valid "x-only" public key.
static uint32_t secp256k1_testrand_int(uint32_t range)
Generate a pseudorandom number in the range [0..range-1].
static void secp256k1_testrand_flip(unsigned char *b, size_t len)
Flip a single random bit in a byte array.
static void secp256k1_testrand256(unsigned char *b32)
Generate a pseudorandom 32-byte array.
static void counting_illegal_callback_fn(const char *str, void *data)