Skip to content

Commit 208352b

Browse files
committed
add BIP374 test vectors
Add BIP374 test vectors. The vectors are generated with a Python script that converts the 2 csv files from the BIP - test_vectors_generate_proof.csv and test_vectors_verify_proof.csv to C code: $ ./tools/test_vectors_dleq_generate.py bips/bip-0374 > ./src/modules/silentpayments/dleq_vectors.h
1 parent 5f7a716 commit 208352b

File tree

3 files changed

+325
-0
lines changed

3 files changed

+325
-0
lines changed
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
/**
2+
* Automatically generated by tools/test_vectors_dleq_generate.py.
3+
*
4+
* Test vectors according to BIP-374 ("Discrete Log Equality Proofs") are included in this file.
5+
* Tests are included in src/modules/silentpayments/tests_impl.h. */
6+
7+
static const unsigned char a_bytes[6][32] = {
8+
{ 0xC0, 0x8C, 0xA8, 0xE0, 0xBB, 0x59, 0x76, 0x9F, 0xC6, 0xA4, 0xE0, 0x78, 0x45, 0x62, 0x84, 0xE0, 0x0E, 0xA3, 0x4F, 0x65, 0xAD, 0xD9, 0x88, 0xC2, 0x46, 0xE1, 0xBB, 0xA8, 0x58, 0x24, 0xCC, 0xDC },
9+
{ 0x8E, 0x64, 0x1B, 0xA6, 0xBF, 0x7F, 0x64, 0xEE, 0xC7, 0x60, 0x05, 0xA2, 0x95, 0x85, 0xA5, 0x03, 0x53, 0x76, 0x37, 0x5F, 0x33, 0xE3, 0x31, 0x21, 0x5A, 0xED, 0xFE, 0x03, 0xB8, 0xE8, 0x0E, 0x7A },
10+
{ 0xCF, 0xB9, 0xA7, 0xEC, 0xC4, 0x9B, 0xEA, 0x4F, 0x2E, 0x2E, 0xE3, 0x4C, 0x38, 0xA6, 0xF4, 0x8B, 0x5C, 0xD5, 0xBD, 0x06, 0xF4, 0xE4, 0xD4, 0xFF, 0xB4, 0x59, 0x05, 0xB3, 0xD2, 0x6D, 0xB8, 0x42 },
11+
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
12+
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xBA, 0xAE, 0xDC, 0xE6, 0xAF, 0x48, 0xA0, 0x3B, 0xBF, 0xD2, 0x5E, 0x8C, 0xD0, 0x36, 0x41, 0x41 },
13+
{ 0xCF, 0xB9, 0xA7, 0xEC, 0xC4, 0x9B, 0xEA, 0x4F, 0x2E, 0x2E, 0xE3, 0x4C, 0x38, 0xA6, 0xF4, 0x8B, 0x5C, 0xD5, 0xBD, 0x06, 0xF4, 0xE4, 0xD4, 0xFF, 0xB4, 0x59, 0x05, 0xB3, 0xD2, 0x6D, 0xB8, 0x42 },
14+
};
15+
16+
static const unsigned char A_bytes[13][33] = {
17+
{ 0x02, 0x63, 0x7B, 0x2C, 0x3E, 0xA8, 0xCA, 0x80, 0xB9, 0xCA, 0xEC, 0xC5, 0x0F, 0x41, 0x34, 0xC8, 0x6A, 0xE9, 0xCF, 0x7A, 0x26, 0x91, 0x33, 0xE7, 0xAF, 0xC7, 0x1F, 0x30, 0xE3, 0xA3, 0xCD, 0xA6, 0x0C },
18+
{ 0x02, 0x98, 0x3A, 0x72, 0xB4, 0xCB, 0x44, 0xD4, 0x32, 0x26, 0x41, 0xA7, 0xB2, 0x00, 0x19, 0x00, 0xCD, 0x6A, 0xE0, 0x90, 0x8A, 0x61, 0x05, 0x46, 0xC7, 0x3E, 0xD1, 0x26, 0xAC, 0xCD, 0xBA, 0x05, 0x14 },
19+
{ 0x03, 0x61, 0x14, 0x10, 0x56, 0x1C, 0x35, 0xDA, 0xE1, 0x31, 0x35, 0xE4, 0xAD, 0x80, 0x94, 0xBA, 0xAC, 0x9B, 0xBC, 0xF2, 0xF4, 0xE1, 0x84, 0x98, 0x18, 0x1A, 0x8F, 0xF8, 0xA6, 0xD4, 0x3B, 0xE9, 0xD9 },
20+
{ 0x00 },
21+
{ 0x00 },
22+
{ 0x00 },
23+
{ 0x03, 0x61, 0x14, 0x10, 0x56, 0x1C, 0x35, 0xDA, 0xE1, 0x31, 0x35, 0xE4, 0xAD, 0x80, 0x94, 0xBA, 0xAC, 0x9B, 0xBC, 0xF2, 0xF4, 0xE1, 0x84, 0x98, 0x18, 0x1A, 0x8F, 0xF8, 0xA6, 0xD4, 0x3B, 0xE9, 0xD9 },
24+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
25+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
26+
{ 0x03, 0xD9, 0xA9, 0x86, 0x24, 0xC0, 0xC7, 0x4F, 0xC7, 0xEE, 0xBD, 0x39, 0xED, 0x84, 0x17, 0x5F, 0x80, 0xD0, 0x3C, 0x77, 0x49, 0x08, 0xE7, 0x5C, 0xA7, 0x37, 0xA0, 0x74, 0x5D, 0x1C, 0x64, 0xE2, 0x0A },
27+
{ 0x03, 0xD9, 0xA9, 0x86, 0x24, 0xC0, 0xC7, 0x4F, 0xC7, 0xEE, 0xBD, 0x39, 0xED, 0x84, 0x17, 0x5F, 0x80, 0xD0, 0x3C, 0x77, 0x49, 0x08, 0xE7, 0x5C, 0xA7, 0x37, 0xA0, 0x74, 0x5D, 0x1C, 0x64, 0xE2, 0x0A },
28+
{ 0x03, 0x61, 0x14, 0x10, 0x56, 0x1C, 0x35, 0xDA, 0xE1, 0x31, 0x35, 0xE4, 0xAD, 0x80, 0x94, 0xBA, 0xAC, 0x9B, 0xBC, 0xF2, 0xF4, 0xE1, 0x84, 0x98, 0x18, 0x1A, 0x8F, 0xF8, 0xA6, 0xD4, 0x3B, 0xE9, 0xD9 },
29+
{ 0x03, 0x61, 0x14, 0x10, 0x56, 0x1C, 0x35, 0xDA, 0xE1, 0x31, 0x35, 0xE4, 0xAD, 0x80, 0x94, 0xBA, 0xAC, 0x9B, 0xBC, 0xF2, 0xF4, 0xE1, 0x84, 0x98, 0x18, 0x1A, 0x8F, 0xF8, 0xA6, 0xD4, 0x3B, 0xE9, 0xD9 },
30+
};
31+
32+
static const unsigned char B_bytes[13][33] = {
33+
{ 0x03, 0x4B, 0xCC, 0xB1, 0xC5, 0x70, 0xAC, 0x1F, 0x3B, 0xC4, 0x2D, 0x61, 0xFE, 0x35, 0xDE, 0x60, 0x5B, 0x99, 0x62, 0x65, 0x01, 0xCC, 0xB2, 0x02, 0x97, 0xE1, 0xAC, 0xBB, 0xF2, 0xD7, 0x15, 0x2A, 0xA1 },
34+
{ 0x02, 0x31, 0xC6, 0x4E, 0x3E, 0xFA, 0x50, 0x6F, 0xDA, 0xD6, 0xAA, 0xD0, 0xF6, 0x08, 0x4D, 0x5F, 0x67, 0x39, 0xDE, 0x7F, 0x44, 0x8D, 0x7E, 0x66, 0xF9, 0xD2, 0x2F, 0x84, 0x26, 0x38, 0xF4, 0x1D, 0x60 },
35+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
36+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
37+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
38+
{ 0x00 },
39+
{ 0x03, 0xD9, 0xA9, 0x86, 0x24, 0xC0, 0xC7, 0x4F, 0xC7, 0xEE, 0xBD, 0x39, 0xED, 0x84, 0x17, 0x5F, 0x80, 0xD0, 0x3C, 0x77, 0x49, 0x08, 0xE7, 0x5C, 0xA7, 0x37, 0xA0, 0x74, 0x5D, 0x1C, 0x64, 0xE2, 0x0A },
40+
{ 0x03, 0x61, 0x14, 0x10, 0x56, 0x1C, 0x35, 0xDA, 0xE1, 0x31, 0x35, 0xE4, 0xAD, 0x80, 0x94, 0xBA, 0xAC, 0x9B, 0xBC, 0xF2, 0xF4, 0xE1, 0x84, 0x98, 0x18, 0x1A, 0x8F, 0xF8, 0xA6, 0xD4, 0x3B, 0xE9, 0xD9 },
41+
{ 0x03, 0xD9, 0xA9, 0x86, 0x24, 0xC0, 0xC7, 0x4F, 0xC7, 0xEE, 0xBD, 0x39, 0xED, 0x84, 0x17, 0x5F, 0x80, 0xD0, 0x3C, 0x77, 0x49, 0x08, 0xE7, 0x5C, 0xA7, 0x37, 0xA0, 0x74, 0x5D, 0x1C, 0x64, 0xE2, 0x0A },
42+
{ 0x03, 0x61, 0x14, 0x10, 0x56, 0x1C, 0x35, 0xDA, 0xE1, 0x31, 0x35, 0xE4, 0xAD, 0x80, 0x94, 0xBA, 0xAC, 0x9B, 0xBC, 0xF2, 0xF4, 0xE1, 0x84, 0x98, 0x18, 0x1A, 0x8F, 0xF8, 0xA6, 0xD4, 0x3B, 0xE9, 0xD9 },
43+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
44+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
45+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
46+
};
47+
48+
static const unsigned char C_bytes[13][33] = {
49+
{ 0x02, 0x85, 0xB8, 0x26, 0xC8, 0xDD, 0x17, 0x58, 0x05, 0x90, 0x19, 0x06, 0xB6, 0xC9, 0xB4, 0x14, 0x0A, 0x30, 0xCB, 0xCC, 0x94, 0xC6, 0xE7, 0xDC, 0xF3, 0x64, 0x76, 0x03, 0x8B, 0xF9, 0x0D, 0x47, 0x18 },
50+
{ 0x03, 0xAF, 0x1B, 0xC1, 0x4B, 0x38, 0x4E, 0xDA, 0x28, 0x39, 0x8D, 0xF6, 0xA7, 0x90, 0x0E, 0x56, 0x7C, 0x5B, 0x6F, 0x66, 0x13, 0xCA, 0xFC, 0xE5, 0x02, 0x7B, 0x98, 0xBE, 0x01, 0x52, 0x86, 0xF7, 0x1B },
51+
{ 0x03, 0xD9, 0xA9, 0x86, 0x24, 0xC0, 0xC7, 0x4F, 0xC7, 0xEE, 0xBD, 0x39, 0xED, 0x84, 0x17, 0x5F, 0x80, 0xD0, 0x3C, 0x77, 0x49, 0x08, 0xE7, 0x5C, 0xA7, 0x37, 0xA0, 0x74, 0x5D, 0x1C, 0x64, 0xE2, 0x0A },
52+
{ 0x00 },
53+
{ 0x00 },
54+
{ 0x00 },
55+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
56+
{ 0x03, 0xD9, 0xA9, 0x86, 0x24, 0xC0, 0xC7, 0x4F, 0xC7, 0xEE, 0xBD, 0x39, 0xED, 0x84, 0x17, 0x5F, 0x80, 0xD0, 0x3C, 0x77, 0x49, 0x08, 0xE7, 0x5C, 0xA7, 0x37, 0xA0, 0x74, 0x5D, 0x1C, 0x64, 0xE2, 0x0A },
57+
{ 0x03, 0x61, 0x14, 0x10, 0x56, 0x1C, 0x35, 0xDA, 0xE1, 0x31, 0x35, 0xE4, 0xAD, 0x80, 0x94, 0xBA, 0xAC, 0x9B, 0xBC, 0xF2, 0xF4, 0xE1, 0x84, 0x98, 0x18, 0x1A, 0x8F, 0xF8, 0xA6, 0xD4, 0x3B, 0xE9, 0xD9 },
58+
{ 0x02, 0x1C, 0xB8, 0x11, 0x21, 0xA0, 0x0F, 0x89, 0x76, 0x99, 0x03, 0x30, 0x5A, 0x36, 0x7A, 0xD3, 0xCC, 0x02, 0xD5, 0xB4, 0x02, 0xB1, 0x2C, 0x02, 0x6E, 0x06, 0xAC, 0x94, 0xBD, 0xE2, 0x8C, 0xD6, 0x08 },
59+
{ 0x03, 0x61, 0x14, 0x10, 0x56, 0x1C, 0x35, 0xDA, 0xE1, 0x31, 0x35, 0xE4, 0xAD, 0x80, 0x94, 0xBA, 0xAC, 0x9B, 0xBC, 0xF2, 0xF4, 0xE1, 0x84, 0x98, 0x18, 0x1A, 0x8F, 0xF8, 0xA6, 0xD4, 0x3B, 0xE9, 0xD9 },
60+
{ 0x03, 0xD9, 0xA9, 0x86, 0x24, 0xC0, 0xC7, 0x4F, 0xC7, 0xEE, 0xBD, 0x39, 0xED, 0x84, 0x17, 0x5F, 0x80, 0xD0, 0x3C, 0x77, 0x49, 0x08, 0xE7, 0x5C, 0xA7, 0x37, 0xA0, 0x74, 0x5D, 0x1C, 0x64, 0xE2, 0x0A },
61+
{ 0x03, 0xD9, 0xA9, 0x86, 0x24, 0xC0, 0xC7, 0x4F, 0xC7, 0xEE, 0xBD, 0x39, 0xED, 0x84, 0x17, 0x5F, 0x80, 0xD0, 0x3C, 0x77, 0x49, 0x08, 0xE7, 0x5C, 0xA7, 0x37, 0xA0, 0x74, 0x5D, 0x1C, 0x64, 0xE2, 0x0A },
62+
};
63+
64+
static const unsigned char auxrand_bytes[6][32] = {
65+
{ 0xC8, 0xD7, 0x05, 0x6A, 0xBD, 0x47, 0x26, 0xEB, 0x5A, 0x0F, 0x19, 0x87, 0x40, 0xAF, 0x14, 0xD6, 0xC1, 0xF0, 0xC1, 0x6E, 0x5D, 0x7A, 0x37, 0xEA, 0xEC, 0x62, 0x1B, 0x66, 0x1E, 0x66, 0x9A, 0xC4 },
66+
{ 0x02, 0xA7, 0xB2, 0xE2, 0xF5, 0xA5, 0xE9, 0xB1, 0x07, 0x8D, 0xBB, 0x16, 0x05, 0x02, 0xA3, 0x24, 0x91, 0xFE, 0x80, 0xA0, 0x91, 0xE9, 0x1D, 0xD9, 0x2C, 0xF7, 0x7B, 0x0B, 0x7D, 0x90, 0x97, 0x0F },
67+
{ 0xD3, 0x84, 0x66, 0xB7, 0x74, 0x84, 0x15, 0x4A, 0x3F, 0xCB, 0x31, 0x51, 0x09, 0x4C, 0x1C, 0x8A, 0x84, 0x5C, 0x73, 0xA3, 0xC0, 0x36, 0xB3, 0xA8, 0xEB, 0xFF, 0xD8, 0xEF, 0x62, 0xC9, 0x04, 0x7F },
68+
{ 0xD3, 0x84, 0x66, 0xB7, 0x74, 0x84, 0x15, 0x4A, 0x3F, 0xCB, 0x31, 0x51, 0x09, 0x4C, 0x1C, 0x8A, 0x84, 0x5C, 0x73, 0xA3, 0xC0, 0x36, 0xB3, 0xA8, 0xEB, 0xFF, 0xD8, 0xEF, 0x62, 0xC9, 0x04, 0x7F },
69+
{ 0xD3, 0x84, 0x66, 0xB7, 0x74, 0x84, 0x15, 0x4A, 0x3F, 0xCB, 0x31, 0x51, 0x09, 0x4C, 0x1C, 0x8A, 0x84, 0x5C, 0x73, 0xA3, 0xC0, 0x36, 0xB3, 0xA8, 0xEB, 0xFF, 0xD8, 0xEF, 0x62, 0xC9, 0x04, 0x7F },
70+
{ 0xD3, 0x84, 0x66, 0xB7, 0x74, 0x84, 0x15, 0x4A, 0x3F, 0xCB, 0x31, 0x51, 0x09, 0x4C, 0x1C, 0x8A, 0x84, 0x5C, 0x73, 0xA3, 0xC0, 0x36, 0xB3, 0xA8, 0xEB, 0xFF, 0xD8, 0xEF, 0x62, 0xC9, 0x04, 0x7F },
71+
};
72+
73+
static const unsigned char msg_bytes[13][32] = {
74+
{ 0x00 },
75+
{ 0x35, 0x84, 0x1C, 0xA5, 0x32, 0x84, 0x6E, 0x1C, 0xDD, 0x23, 0xA3, 0xD1, 0x07, 0x82, 0x43, 0x43, 0x58, 0x4F, 0x88, 0xEF, 0xF5, 0x80, 0x92, 0x94, 0x69, 0x86, 0x5E, 0xAE, 0x83, 0x55, 0xEE, 0x3C },
76+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
77+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
78+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
79+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
80+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
81+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
82+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
83+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
84+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
85+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0xC4, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
86+
{ 0x22, 0x61, 0x6B, 0xB5, 0xFB, 0x2D, 0x7C, 0x68, 0x27, 0x0F, 0x30, 0x51, 0x22, 0xF2, 0xA0, 0x9E, 0x83, 0x32, 0x39, 0x84, 0xB1, 0xC9, 0xA0, 0x4E, 0x28, 0x51, 0x19, 0xFB, 0x60, 0x6A, 0xC7, 0x94 },
87+
};
88+
89+
static const unsigned char proof_bytes[13][64] = {
90+
{ 0x50, 0x35, 0x62, 0xD3, 0x69, 0x10, 0xCD, 0x2D, 0x61, 0xA4, 0xD0, 0x7C, 0x8F, 0xF6, 0x80, 0x26, 0x5C, 0x71, 0x3E, 0x63, 0xDD, 0xE0, 0xDC, 0xB8, 0x8E, 0x6E, 0xA3, 0xC5, 0x85, 0x97, 0xBD, 0xC0, 0x5B, 0x86, 0xDB, 0x9A, 0xF9, 0x5E, 0xCC, 0xC4, 0x75, 0xCE, 0x21, 0x77, 0xF9, 0x41, 0xC1, 0x18, 0xFE, 0xFE, 0xD2, 0x02, 0x27, 0xD4, 0xCE, 0x8C, 0xE9, 0x55, 0x7C, 0xB0, 0x08, 0x75, 0x8D, 0xE6 },
91+
{ 0x50, 0xAE, 0x4F, 0xF8, 0x0A, 0x6B, 0x33, 0x92, 0x53, 0xF6, 0x9F, 0x5E, 0xB6, 0xFD, 0x9D, 0x01, 0x3D, 0xC9, 0xA0, 0x2A, 0xEF, 0x00, 0x1C, 0xEC, 0x08, 0xC4, 0x86, 0x38, 0xC7, 0x2B, 0xEE, 0x5A, 0x13, 0x7D, 0x15, 0x0E, 0x0B, 0xB4, 0xDE, 0x81, 0xB6, 0x75, 0x82, 0xA9, 0x92, 0x91, 0x0D, 0x94, 0xDF, 0x80, 0xD2, 0xF5, 0x37, 0x49, 0x12, 0x70, 0x02, 0x6A, 0x90, 0xB5, 0x6E, 0xC2, 0xB1, 0x28 },
92+
{ 0xBC, 0xE6, 0xDF, 0xDA, 0x12, 0xAF, 0x1B, 0x86, 0xC1, 0xCF, 0x6C, 0x1E, 0xD6, 0x27, 0x05, 0x32, 0x24, 0xB6, 0xC7, 0x81, 0x75, 0xED, 0xDA, 0xDB, 0xE0, 0x1E, 0xAD, 0x83, 0x6B, 0xB7, 0x77, 0x21, 0x01, 0xCB, 0x33, 0x0A, 0x91, 0xEF, 0x06, 0xA3, 0xF6, 0x3F, 0x82, 0x54, 0xC1, 0xAC, 0x5B, 0x76, 0xE3, 0x12, 0xD9, 0xDA, 0xDA, 0x45, 0x84, 0x1E, 0xA6, 0xA9, 0xB4, 0x43, 0x73, 0x81, 0x99, 0x39 },
93+
{ 0x00 },
94+
{ 0x00 },
95+
{ 0x00 },
96+
{ 0xBC, 0xE6, 0xDF, 0xDA, 0x12, 0xAF, 0x1B, 0x86, 0xC1, 0xCF, 0x6C, 0x1E, 0xD6, 0x27, 0x05, 0x32, 0x24, 0xB6, 0xC7, 0x81, 0x75, 0xED, 0xDA, 0xDB, 0xE0, 0x1E, 0xAD, 0x83, 0x6B, 0xB7, 0x77, 0x21, 0x01, 0xCB, 0x33, 0x0A, 0x91, 0xEF, 0x06, 0xA3, 0xF6, 0x3F, 0x82, 0x54, 0xC1, 0xAC, 0x5B, 0x76, 0xE3, 0x12, 0xD9, 0xDA, 0xDA, 0x45, 0x84, 0x1E, 0xA6, 0xA9, 0xB4, 0x43, 0x73, 0x81, 0x99, 0x39 },
97+
{ 0xBC, 0xE6, 0xDF, 0xDA, 0x12, 0xAF, 0x1B, 0x86, 0xC1, 0xCF, 0x6C, 0x1E, 0xD6, 0x27, 0x05, 0x32, 0x24, 0xB6, 0xC7, 0x81, 0x75, 0xED, 0xDA, 0xDB, 0xE0, 0x1E, 0xAD, 0x83, 0x6B, 0xB7, 0x77, 0x21, 0x01, 0xCB, 0x33, 0x0A, 0x91, 0xEF, 0x06, 0xA3, 0xF6, 0x3F, 0x82, 0x54, 0xC1, 0xAC, 0x5B, 0x76, 0xE3, 0x12, 0xD9, 0xDA, 0xDA, 0x45, 0x84, 0x1E, 0xA6, 0xA9, 0xB4, 0x43, 0x73, 0x81, 0x99, 0x39 },
98+
{ 0xBC, 0xE6, 0xDF, 0xDA, 0x12, 0xAF, 0x1B, 0x86, 0xC1, 0xCF, 0x6C, 0x1E, 0xD6, 0x27, 0x05, 0x32, 0x24, 0xB6, 0xC7, 0x81, 0x75, 0xED, 0xDA, 0xDB, 0xE0, 0x1E, 0xAD, 0x83, 0x6B, 0xB7, 0x77, 0x21, 0x01, 0xCB, 0x33, 0x0A, 0x91, 0xEF, 0x06, 0xA3, 0xF6, 0x3F, 0x82, 0x54, 0xC1, 0xAC, 0x5B, 0x76, 0xE3, 0x12, 0xD9, 0xDA, 0xDA, 0x45, 0x84, 0x1E, 0xA6, 0xA9, 0xB4, 0x43, 0x73, 0x81, 0x99, 0x39 },
99+
{ 0xBC, 0xE6, 0xDF, 0xDA, 0x12, 0xAF, 0x1B, 0x86, 0xC1, 0xCF, 0x6C, 0x1E, 0xD6, 0x27, 0x05, 0x32, 0x24, 0xB6, 0xC7, 0x81, 0x75, 0xED, 0xDA, 0xDB, 0xE0, 0x1E, 0xAD, 0x83, 0x6B, 0xB7, 0x77, 0x21, 0x01, 0xCB, 0x33, 0x0A, 0x91, 0xEF, 0x06, 0xA3, 0xF6, 0x3F, 0x82, 0x54, 0xC1, 0xAC, 0x5B, 0x76, 0xE3, 0x12, 0xD9, 0xDA, 0xDA, 0x45, 0x84, 0x1E, 0xA6, 0xA9, 0xB4, 0x43, 0x73, 0x81, 0x99, 0x39 },
100+
{ 0xBC, 0xE6, 0xDF, 0xDA, 0x12, 0xAF, 0x1B, 0x86, 0xC1, 0xCF, 0x6C, 0x1E, 0xD6, 0x27, 0x05, 0x32, 0x24, 0xB6, 0xC7, 0x81, 0x75, 0xED, 0xDA, 0xDB, 0xE0, 0x1E, 0xAD, 0x83, 0x6B, 0xB7, 0x77, 0x21, 0x01, 0xCB, 0x33, 0x0A, 0x91, 0xEF, 0x06, 0xA3, 0xF6, 0x3F, 0x82, 0x54, 0xC1, 0xAC, 0x5B, 0x76, 0xE3, 0x12, 0xD9, 0xDA, 0xDA, 0x45, 0x84, 0x1E, 0xA6, 0xA9, 0xB4, 0x43, 0x73, 0x81, 0x99, 0x39 },
101+
{ 0xBC, 0xE6, 0xDF, 0xDA, 0x12, 0xAF, 0x1B, 0x86, 0xC1, 0xCF, 0x6C, 0x1E, 0xD6, 0x27, 0x05, 0x32, 0x24, 0xB6, 0xC7, 0x85, 0x75, 0xED, 0xDA, 0xDB, 0xE0, 0x1E, 0xAD, 0x83, 0x6B, 0xB7, 0x77, 0x21, 0x01, 0xCB, 0x33, 0x0A, 0x91, 0xEF, 0x06, 0xA3, 0xF6, 0x3F, 0x82, 0x54, 0xC1, 0xAC, 0x5B, 0x76, 0xE3, 0x12, 0xD9, 0xDA, 0xDA, 0x45, 0x84, 0x1E, 0xA6, 0xA9, 0xB4, 0x43, 0x73, 0x81, 0x99, 0x39 },
102+
{ 0xBC, 0xE6, 0xDF, 0xDA, 0x12, 0xAF, 0x1B, 0x86, 0xC1, 0xCF, 0x6C, 0x1E, 0xD6, 0x27, 0x05, 0x32, 0x24, 0xB6, 0xC7, 0x81, 0x75, 0xED, 0xDA, 0xDB, 0xE0, 0x1E, 0xAD, 0x83, 0x6B, 0xB7, 0x77, 0x21, 0x01, 0xCB, 0x33, 0x0A, 0x91, 0xEF, 0x06, 0xA3, 0xF6, 0x3F, 0x82, 0x54, 0xC1, 0xAC, 0x5B, 0x76, 0xE3, 0x12, 0xD9, 0xDA, 0xDA, 0x45, 0x84, 0x1E, 0xA6, 0xA9, 0xB4, 0x43, 0x73, 0x81, 0x99, 0x39 },
103+
};
104+
105+
static const unsigned char success[13] = { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

src/modules/silentpayments/tests_impl.h

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "../../../include/secp256k1_silentpayments.h"
1010
#include "../../../src/modules/silentpayments/dleq_impl.h"
1111
#include "../../../src/modules/silentpayments/vectors.h"
12+
#include "../../../src/modules/silentpayments/dleq_vectors.h"
1213
#include "include/secp256k1.h"
1314

1415
/** Constants
@@ -706,13 +707,86 @@ static void dleq_tests(void) {
706707
CHECK(secp256k1_dleq_nonce(&k, a32, A_33, C_33, NULL) == 1);
707708
}
708709

710+
/* Test BIP-374 test vectors ("Discrete Log Equality Proofs").
711+
* See tools/test_vectors_dleq_generate.py
712+
* */
713+
714+
static unsigned char zero_array[32] = {0x00};
715+
716+
/* Helper function to check if given array is NOT equivalent to all zero array.
717+
* Used to detect test vectors where zero array can represent:
718+
* B_bytes at infinity
719+
* Empty optional msg_bytes
720+
* */
721+
int is_not_empty(const unsigned char *arr){
722+
return (memcmp(arr, zero_array, 32) != 0);
723+
}
724+
725+
static void test_dleq_bip_vectors(void) {
726+
secp256k1_scalar a, s, e;
727+
secp256k1_ge A;
728+
secp256k1_ge B;
729+
secp256k1_ge C;
730+
int i;
731+
732+
/* bip-0374/test_vectors_generate_proof.csv*/
733+
for (i = 0; i < 6; ++i) {
734+
int ret = 1;
735+
const unsigned char *m = NULL;
736+
secp256k1_ge_set_infinity(&B);
737+
if (i > 2) ret = 0;
738+
739+
secp256k1_scalar_set_b32(&a, a_bytes[i], NULL);
740+
if (is_not_empty(B_bytes[i])) {
741+
CHECK(secp256k1_eckey_pubkey_parse(&B, B_bytes[i], 33) == 1);
742+
}
743+
744+
secp256k1_dleq_pair(&CTX->ecmult_gen_ctx, &A, &C, &a, &B);
745+
746+
if (is_not_empty(msg_bytes[i])) {
747+
m = msg_bytes[i];
748+
}
749+
CHECK(secp256k1_dleq_prove(CTX, &s, &e, &a, &B, &A, &C, (unsigned char*)(auxrand_bytes[i]), m) == ret);
750+
751+
if (ret) {
752+
unsigned char proof[64];
753+
secp256k1_scalar_get_b32(proof, &e);
754+
secp256k1_scalar_get_b32(proof + 32, &s);
755+
CHECK(memcmp(proof, proof_bytes[i], 64) == 0);
756+
CHECK(secp256k1_dleq_verify(&s, &e, &A, &B, &C, m) == 1);
757+
}
758+
}
759+
760+
/* bip-0374/test_vectors_verify_proof.csv*/
761+
for (i = 0; i < 13; ++i) {
762+
const unsigned char *m = NULL;
763+
764+
if (i > 2 && i < 6) {
765+
/* skip invalid test cases which are not present in test_vectors_verify_proof.csv */
766+
continue;
767+
}
768+
secp256k1_scalar_set_b32(&e, proof_bytes[i], NULL);
769+
secp256k1_scalar_set_b32(&s, proof_bytes[i] + 32, NULL);
770+
771+
CHECK(secp256k1_eckey_pubkey_parse(&A, A_bytes[i], 33) == 1);
772+
CHECK(secp256k1_eckey_pubkey_parse(&B, B_bytes[i], 33) == 1);
773+
CHECK(secp256k1_eckey_pubkey_parse(&C, C_bytes[i], 33) == 1);
774+
775+
if (is_not_empty(msg_bytes[i])) {
776+
m = msg_bytes[i];
777+
}
778+
CHECK(secp256k1_dleq_verify(&s, &e, &A, &B, &C, m) == success[i]);
779+
}
780+
}
781+
709782
void run_silentpayments_tests(void) {
710783
test_recipient_sort();
711784
test_send_api();
712785
test_label_api();
713786
test_recipient_api();
714787
run_silentpayments_test_vectors();
715788
dleq_tests();
789+
test_dleq_bip_vectors();
716790
}
717791

718792
#endif

0 commit comments

Comments
 (0)