@@ -208,6 +208,21 @@ def SECP256K1_GE_CONST(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p):
208
208
[SECP256K1_GE_CONST (0x34986625 , 0x04b73c7c , 0x8cecb6c3 , 0x3cd493bd , 0xfc190e0f , 0x87d913d7 , 0xff9ad42e , 0x222bfe95 , 0x245b3a61 , 0xb8d46997 , 0xf14f2fea , 0x28748996 , 0x91eb3254 , 0x2b9907d6 , 0x5eb9d21d , 0x42454021 ), [SECP256K1_FE_CONST (0x7f556282 , 0xc3dd9d26 , 0x3390d6bb , 0xddada698 , 0xab8fd7c7 , 0xd1a06498 , 0xf42b3043 , 0x7c8361ad ), SECP256K1_FE_CONST (0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 ), SECP256K1_FE_CONST (0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 ), SECP256K1_FE_CONST (0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 , 0x00000000 )]]
209
209
]
210
210
211
+ ellsq_enc_tests = [
212
+ [[0x54 ,0xca ,0xd2 ,0x27 ,0xb2 ,0xc9 ,0x8d ,0x5f ,0x7c ,0x78 ,0x8c ,0xfc ,0x3d ,0xaf ,0xd6 ,0x52 ,0xf5 ,0x8f ,0x69 ,0xcf ,0xef ,0x63 ,0x2b ,0x82 ,0x2b ,0x35 ,0xd0 ,0xb0 ,0xe2 ,0x4f ,0xc0 ,0x3a ,0xd2 ,0x8c ,0xa1 ,0x4b ,0x6f ,0x62 ,0xd4 ,0x53 ,0x79 ,0xc5 ,0x3f ,0x70 ,0xee ,0x40 ,0x5c ,0xa9 ,0x2c ,0xe7 ,0xb6 ,0xf9 ,0x70 ,0x83 ,0x13 ,0x05 ,0xf2 ,0x7d ,0xc4 ,0x1e ,0xb6 ,0x9d ,0xe0 ,0x6e ], [0x02 ,0x11 ,0x62 ,0x89 ,0x03 ,0x32 ,0x88 ,0x91 ,0xae ,0x09 ,0xd1 ,0x08 ,0xd8 ,0x92 ,0x43 ,0xe4 ,0x7e ,0x10 ,0x9f ,0xe7 ,0xb8 ,0xbb ,0x1e ,0x2d ,0xf1 ,0xa3 ,0xae ,0x9b ,0x0e ,0x78 ,0x08 ,0x54 ,0x9c ]],
213
+ [[0xfb ,0xe6 ,0xce ,0xab ,0x4c ,0x5f ,0xdf ,0xa5 ,0xfb ,0xee ,0x8f ,0x3d ,0x09 ,0xa2 ,0xf7 ,0x23 ,0x53 ,0xe7 ,0x4e ,0x5a ,0x9c ,0xd4 ,0xab ,0x8e ,0x6a ,0x34 ,0xd4 ,0x95 ,0x23 ,0xa7 ,0xd1 ,0xa2 ,0xc4 ,0x50 ,0xb7 ,0x45 ,0xda ,0xb1 ,0xaf ,0xa9 ,0x95 ,0x4b ,0x3a ,0x35 ,0x75 ,0xe4 ,0xe8 ,0xe2 ,0xdb ,0x3d ,0xa5 ,0xcd ,0x4d ,0x56 ,0x48 ,0xea ,0xd0 ,0x0a ,0x60 ,0xb4 ,0xcd ,0xfe ,0x84 ,0xb3 ], [0x02 ,0xc0 ,0x4c ,0x84 ,0x85 ,0xf9 ,0x8d ,0x56 ,0x6c ,0x79 ,0xbf ,0x33 ,0xa7 ,0x0c ,0xb2 ,0x32 ,0x54 ,0x9e ,0x3d ,0xe1 ,0xc3 ,0xe3 ,0x01 ,0xe3 ,0x57 ,0x1c ,0x83 ,0x68 ,0x97 ,0xf0 ,0x7c ,0x5d ,0x12 ]],
214
+ [[0x71 ,0x7e ,0x63 ,0xd7 ,0x71 ,0xdb ,0xda ,0x67 ,0x67 ,0xd5 ,0x8f ,0x26 ,0xab ,0x5f ,0x54 ,0x9b ,0xd2 ,0xd1 ,0x8a ,0xcf ,0x59 ,0xff ,0x50 ,0x77 ,0x5f ,0x4e ,0xb5 ,0x0a ,0xc0 ,0x17 ,0x4d ,0xf1 ,0x7d ,0xd0 ,0x34 ,0xc8 ,0xed ,0x08 ,0x11 ,0x61 ,0x5e ,0x3e ,0xbb ,0x36 ,0xf8 ,0xf3 ,0x3e ,0x09 ,0x23 ,0x8e ,0x4d ,0xa8 ,0xf5 ,0x01 ,0x9d ,0x37 ,0x00 ,0x78 ,0x4f ,0x37 ,0xc1 ,0x53 ,0x53 ,0x94 ], [0x02 ,0x72 ,0x81 ,0x15 ,0x0c ,0xeb ,0xc3 ,0xd7 ,0xb3 ,0xbb ,0xb9 ,0x92 ,0xf5 ,0x81 ,0xbb ,0xcb ,0x9e ,0x30 ,0x4f ,0x87 ,0x44 ,0xf0 ,0x19 ,0x98 ,0xa7 ,0x1f ,0x5d ,0xe1 ,0x14 ,0xf8 ,0x22 ,0x91 ,0xc4 ]],
215
+ [[0x01 ,0xf0 ,0xbf ,0xe4 ,0xf9 ,0xbd ,0xee ,0x52 ,0x5e ,0xb7 ,0x7c ,0x8e ,0x35 ,0x1e ,0x1f ,0x88 ,0x3f ,0xb9 ,0xcd ,0x37 ,0x7e ,0xf7 ,0xc5 ,0xbd ,0xde ,0xe4 ,0xf6 ,0x60 ,0x64 ,0x43 ,0x90 ,0xf5 ,0x95 ,0x3e ,0x7d ,0x2b ,0x6c ,0xde ,0x36 ,0x90 ,0x3e ,0xa1 ,0x34 ,0x4b ,0x0d ,0x16 ,0x33 ,0x5c ,0xc5 ,0x11 ,0x5d ,0xaa ,0x97 ,0x7c ,0x3c ,0x2b ,0xf9 ,0x31 ,0xac ,0xde ,0x2f ,0xf5 ,0x78 ,0x9a ], [0x02 ,0x10 ,0x44 ,0x9d ,0x7e ,0xa0 ,0x62 ,0x3e ,0x80 ,0xa5 ,0x87 ,0x01 ,0x9f ,0xa5 ,0x11 ,0xaf ,0xd3 ,0x94 ,0xb2 ,0x55 ,0xb0 ,0x8f ,0x91 ,0xb5 ,0xf7 ,0x48 ,0x2a ,0xe9 ,0xd1 ,0xa1 ,0xa7 ,0xfb ,0x7c ]],
216
+ [[0x82 ,0xd5 ,0x87 ,0x1e ,0x18 ,0x37 ,0x66 ,0xbd ,0x22 ,0xe1 ,0x13 ,0xa8 ,0x52 ,0x79 ,0xaa ,0x61 ,0x7e ,0x6b ,0x9f ,0x73 ,0x52 ,0x2c ,0xd4 ,0x6b ,0x90 ,0x59 ,0xba ,0x51 ,0x97 ,0xfa ,0x56 ,0x44 ,0xaf ,0x90 ,0x41 ,0x89 ,0x30 ,0x98 ,0x7d ,0xb7 ,0xab ,0x4a ,0x84 ,0x0c ,0x72 ,0x64 ,0x1b ,0x58 ,0xb3 ,0x66 ,0xe5 ,0x7c ,0x92 ,0x8c ,0x98 ,0x3a ,0x47 ,0x37 ,0x82 ,0x00 ,0x3c ,0x36 ,0x10 ,0xab ], [0x03 ,0xc8 ,0xb2 ,0x62 ,0xf9 ,0x31 ,0x69 ,0x43 ,0x75 ,0x51 ,0x48 ,0x3b ,0x8a ,0x61 ,0x19 ,0x83 ,0x82 ,0xe3 ,0x11 ,0x41 ,0xaf ,0x61 ,0xbf ,0x36 ,0x10 ,0x0b ,0xd0 ,0x68 ,0x46 ,0x5d ,0xdd ,0xa8 ,0x40 ]],
217
+ [[0xda ,0x82 ,0x53 ,0xb4 ,0x3b ,0x5a ,0xc2 ,0x3b ,0x42 ,0x36 ,0x07 ,0xe9 ,0x18 ,0xab ,0x5c ,0xaa ,0x5d ,0x7d ,0x34 ,0x3d ,0x77 ,0xa3 ,0x99 ,0x6a ,0x42 ,0xeb ,0x33 ,0x2a ,0x3b ,0x55 ,0x1d ,0x8c ,0xda ,0x6c ,0xb6 ,0xf9 ,0x57 ,0x4c ,0xe3 ,0x60 ,0x91 ,0x2c ,0xf4 ,0x5b ,0x90 ,0x9a ,0x96 ,0x2e ,0x4d ,0xed ,0x63 ,0xae ,0x5a ,0xac ,0xb0 ,0xab ,0x23 ,0x29 ,0x45 ,0xb1 ,0x01 ,0xf7 ,0x2b ,0x62 ], [0x02 ,0xe7 ,0x28 ,0x34 ,0x1d ,0xf6 ,0x93 ,0x48 ,0x71 ,0xb3 ,0x94 ,0xbb ,0x4f ,0xb2 ,0x8b ,0xd8 ,0xd2 ,0xdf ,0x39 ,0x92 ,0x55 ,0xb0 ,0x30 ,0x02 ,0xed ,0x6f ,0xc3 ,0x8f ,0x28 ,0xcf ,0xbf ,0x53 ,0x56 ]],
218
+ [[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 ,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 ], [0x03 ,0x1b ,0x41 ,0x2e ,0x7a ,0x96 ,0x6d ,0x2c ,0x24 ,0x3d ,0xbc ,0x5b ,0x18 ,0xb7 ,0xf9 ,0xba ,0xf1 ,0x85 ,0xbc ,0xfe ,0x41 ,0x38 ,0x96 ,0x04 ,0x79 ,0x64 ,0x1a ,0xb1 ,0xe6 ,0x3b ,0x38 ,0x1e ,0x11 ]],
219
+ [[0xdc ,0x30 ,0x98 ,0xe4 ,0x00 ,0x61 ,0x83 ,0x30 ,0xf3 ,0x8b ,0x19 ,0xe9 ,0x20 ,0x0a ,0xdf ,0x7f ,0xfb ,0x96 ,0x84 ,0x3f ,0xa8 ,0x3c ,0x49 ,0x1c ,0xf6 ,0x7f ,0x34 ,0xa7 ,0x90 ,0xbb ,0xcf ,0xe1 ,0x23 ,0xdc ,0x30 ,0x07 ,0xa4 ,0xfd ,0x13 ,0x3a ,0x39 ,0x44 ,0x0b ,0x06 ,0x03 ,0x1e ,0x9e ,0x2c ,0x38 ,0x8e ,0x41 ,0x47 ,0xaf ,0x0e ,0x82 ,0xbe ,0xda ,0x6d ,0x56 ,0x4b ,0xf8 ,0xcc ,0x37 ,0xb1 ], [0x02 ,0x5b ,0x74 ,0x48 ,0x15 ,0x22 ,0xd4 ,0xc2 ,0x9f ,0x2e ,0x6a ,0x2f ,0x11 ,0x7f ,0x9e ,0x39 ,0xf9 ,0xab ,0x01 ,0xb1 ,0xe9 ,0xf2 ,0xc3 ,0x4c ,0x68 ,0xbe ,0x8f ,0x53 ,0x1b ,0xe0 ,0x1f ,0x6e ,0xa7 ]],
220
+ [[0x35 ,0xd7 ,0x0a ,0x71 ,0x2c ,0xc0 ,0x85 ,0x7f ,0x8d ,0xb1 ,0xbc ,0x55 ,0x6a ,0x6c ,0x4e ,0xf8 ,0x66 ,0x24 ,0xfd ,0x0a ,0x47 ,0x7f ,0x96 ,0x7e ,0xed ,0xc0 ,0x32 ,0xfc ,0xda ,0xac ,0xe7 ,0x96 ,0xc6 ,0x73 ,0xc5 ,0x43 ,0xd0 ,0x07 ,0x34 ,0x32 ,0x07 ,0x85 ,0x5b ,0xeb ,0xad ,0x85 ,0xe9 ,0x4b ,0xca ,0xc7 ,0x78 ,0x2b ,0x11 ,0x57 ,0x9a ,0x70 ,0xdc ,0x88 ,0xe2 ,0xa4 ,0x8d ,0x9d ,0xf2 ,0xd4 ], [0x02 ,0xdb ,0x21 ,0xb4 ,0x8f ,0xe9 ,0xf9 ,0x95 ,0x08 ,0x3a ,0x1f ,0x9c ,0x1f ,0x3f ,0x4b ,0x31 ,0x1d ,0x2c ,0x43 ,0xa1 ,0x28 ,0xdb ,0xb3 ,0xa4 ,0xd4 ,0x78 ,0x41 ,0xe4 ,0xff ,0x5d ,0xd0 ,0x2e ,0x61 ]],
221
+ [[0x5f ,0xb8 ,0x07 ,0xce ,0x10 ,0x0c ,0x90 ,0xd2 ,0x83 ,0x7c ,0xcf ,0xc9 ,0x4d ,0x8f ,0x8b ,0xa5 ,0xd3 ,0x5c ,0xd3 ,0xd6 ,0xfa ,0xfc ,0xd2 ,0xf4 ,0x1f ,0x24 ,0x5b ,0x59 ,0x6e ,0x36 ,0x00 ,0x57 ,0xa0 ,0x47 ,0xf8 ,0x31 ,0xef ,0xf3 ,0x6f ,0x2d ,0x7c ,0x83 ,0x30 ,0x36 ,0xb2 ,0x70 ,0x74 ,0x5a ,0x2c ,0xa3 ,0x2c ,0x29 ,0x05 ,0x03 ,0x2d ,0x0b ,0xe0 ,0xdb ,0xa4 ,0xa5 ,0x91 ,0xc9 ,0xfb ,0xd8 ], [0x03 ,0x41 ,0x58 ,0x28 ,0x65 ,0x43 ,0x5e ,0xe9 ,0xc8 ,0xc9 ,0x27 ,0xc3 ,0x49 ,0xbd ,0x3e ,0x43 ,0x7b ,0xce ,0x2b ,0x5c ,0xfc ,0xd0 ,0xc4 ,0x17 ,0x77 ,0xc3 ,0x4c ,0x71 ,0xc6 ,0x7b ,0x14 ,0x06 ,0x93 ]],
222
+ [[0x1e ,0x76 ,0x57 ,0x72 ,0xbf ,0x72 ,0xde ,0xb8 ,0x81 ,0x54 ,0x16 ,0xbd ,0x54 ,0x45 ,0xdd ,0x75 ,0x50 ,0xcd ,0x86 ,0x7a ,0xa2 ,0x5a ,0xc6 ,0x3f ,0x6f ,0xd9 ,0xaf ,0xd3 ,0x2f ,0x92 ,0x1c ,0xc8 ,0x8a ,0x06 ,0x1a ,0xb5 ,0xf6 ,0x98 ,0x1b ,0x55 ,0x92 ,0x1b ,0x90 ,0x5b ,0x6f ,0x4f ,0x3d ,0xf4 ,0x82 ,0x5d ,0x79 ,0x72 ,0xd6 ,0x99 ,0xe3 ,0xb4 ,0x21 ,0x4e ,0x40 ,0x44 ,0xcf ,0xbe ,0x65 ,0x34 ], [0x03 ,0x90 ,0xd2 ,0x94 ,0x30 ,0x92 ,0xec ,0x7e ,0xd8 ,0xff ,0x5a ,0xf7 ,0x04 ,0x43 ,0x2d ,0x0d ,0xbe ,0xb0 ,0x33 ,0x7c ,0xbf ,0x58 ,0x22 ,0x87 ,0x18 ,0x32 ,0x76 ,0x38 ,0x68 ,0x1f ,0x70 ,0xd7 ,0xf0 ]],
223
+ [[0x86 ,0xef ,0x92 ,0xfd ,0x28 ,0x09 ,0x85 ,0x4f ,0x74 ,0xf7 ,0x5a ,0xeb ,0xbe ,0xa1 ,0x8a ,0xee ,0xc0 ,0xee ,0xdd ,0x4e ,0x81 ,0x92 ,0xc8 ,0x8c ,0xd7 ,0xcf ,0xf5 ,0xdf ,0xc0 ,0x8a ,0x57 ,0xdc ,0x32 ,0x73 ,0xbf ,0x6f ,0x39 ,0x2d ,0xee ,0x48 ,0x4a ,0x72 ,0x2c ,0x3d ,0xb0 ,0x0c ,0x0e ,0xfb ,0x40 ,0xd5 ,0x1e ,0x8a ,0x72 ,0xfc ,0xfb ,0x78 ,0x3f ,0xa7 ,0xeb ,0xd4 ,0x30 ,0x82 ,0xdb ,0x71 ], [0x02 ,0x31 ,0x74 ,0x79 ,0x29 ,0x80 ,0x2d ,0x79 ,0x76 ,0x02 ,0x26 ,0x71 ,0xb2 ,0xf7 ,0x5a ,0xc0 ,0x31 ,0x18 ,0x56 ,0xb3 ,0x84 ,0xf4 ,0xb9 ,0xa8 ,0x00 ,0x0d ,0x44 ,0xa2 ,0xab ,0xc5 ,0x90 ,0x3a ,0xd4 ]]
224
+ ]
225
+
211
226
class TestFrameworkEllsq (unittest .TestCase ):
212
227
def test_fe_to_ge_fe (self ):
213
228
for i in range (100 ):
@@ -246,4 +261,26 @@ def test_ellsq_mapping(self):
246
261
if field_ele is not None :
247
262
assert (field_ele == fe [j - 1 ])
248
263
group_ele = f (field_ele )
249
- assert (ge [0 ] == group_ele [0 ] and ge [1 ] == group_ele [1 ])
264
+ assert (ge [0 ] == group_ele [0 ] and ge [1 ] == group_ele [1 ])
265
+
266
+ def test_encode_decode (self ):
267
+ for i in range (100 ):
268
+ m = random .randrange (1 , SECP256K1_ORDER )
269
+ A = SECP256K1 .affine (SECP256K1 .mul ([(SECP256K1_G , m )]))
270
+ A = A [0 :2 ] + (1 ,)
271
+ u1 , v1 = (fe (A [0 ]), fe (A [1 ]))
272
+ ell64 = encode_bytes (A )
273
+ u2 , v2 = decode_bytes (ell64 )
274
+ assert (u1 == u2 and v1 == v2 )
275
+
276
+ def test_decode_test_vectors (self ):
277
+ for test_vector in ellsq_enc_tests :
278
+ ell64 = test_vector [0 ]
279
+ pubkey = test_vector [1 ]
280
+ u , v = decode_bytes (ell64 )
281
+ if v .val % 2 == 0 :
282
+ compressed_sec = b'\x02 ' + u .val .to_bytes (32 , 'big' )
283
+ else :
284
+ compressed_sec = b'\x03 ' + u .val .to_bytes (32 , 'big' )
285
+ calc_pubkey = [x for x in compressed_sec ]
286
+ assert (calc_pubkey == pubkey )
0 commit comments