def pt_add_hex(pt0_hex, pt1_hex): pt0 = ed25519.pt_xform(ed25519.decodepoint(binascii.unhexlify(pt0_hex))) pt1 = ed25519.pt_xform(ed25519.decodepoint(binascii.unhexlify(pt1_hex))) sum_pt = ed25519.pt_unxform(ed25519.xpt_add(pt0, pt1)) sum_hex = binascii.hexlify(ed25519.encodepoint(sum_pt)) return sum_hex
def schnorr_verify(M, PK_hex, e_hex, s_hex): sG_hex = scalarmult_base(s_hex) eP_hex = scalarmult(PK_hex, e_hex) sG = ed25519.pt_xform(ed25519.decodepoint(binascii.unhexlify(sG_hex))) eP = ed25519.pt_xform(ed25519.decodepoint(binascii.unhexlify(eP_hex))) Q_pt = ed25519.pt_unxform(ed25519.xpt_add(sG, eP)) Q_hex = binascii.hexlify(ed25519.encodepoint(Q_pt)) ee_hex = H(M.encode() + Q_hex) return e_hex == ee_hex
def test_curve1(): sk = b'd17f7ee37fc904cd04692a0db2a8aa003008de6865d7b0ed7c1515b9892cca03' PK = scalarmult_base(sk) # sk, PK = gen_keypair() alpha_hex = rand() print(sk) print(PK) print(alpha_hex) print('------ ------ ------') alpha_int_1 = ed25519.decodeint(binascii.unhexlify(alpha_hex)) # alpha_int_2 = ed25519.decodeint(alpha_hex) # alpha_int_3 = int.from_hexs(alpha_hex,byteorder='big') # print('{',alpha_int_1) # print('{',alpha_int_2) # print('{',alpha_int_3) # print(':',binascii.hexlify(ed25519.encodeint(alpha_int_1))) sk_int_1 = ed25519.decodeint(binascii.unhexlify(sk)) alphaPK_hex = scalarmult(PK, alpha_hex) print('1: ', alphaPK_hex) PK_pt = ed25519.decodepoint(binascii.unhexlify(PK)) alphaPK_pt = ed25519.decodepoint(binascii.unhexlify(alphaPK_hex)) print(ed25519.isoncurve(PK_pt)) print(ed25519.isoncurve(alphaPK_pt)) print('------ ------ ------') # (alpha * sk) mod l sk_x_alpha_int = (alpha_int_1 * sk_int_1) % ed25519.l print(sk_x_alpha_int) sk_x_alpha_hex = binascii.hexlify(ed25519.encodeint(sk_x_alpha_int)) print(sk_x_alpha_hex) print(ed25519.decodeint(binascii.unhexlify(sk_x_alpha_hex))) sk_x_alpha_x_G_hex = scalarmult_base(sk_x_alpha_hex) print('2: ', sk_x_alpha_x_G_hex) sk_x_alpha_x_G_pt = ed25519.decodepoint( binascii.unhexlify(sk_x_alpha_x_G_hex)) print(ed25519.isoncurve(sk_x_alpha_x_G_pt)) print('------ ------ ------') print(alphaPK_pt == sk_x_alpha_x_G_pt)
def scalarmult(P_hex, k_hex): a = ed25519.decodeint(binascii.unhexlify(k_hex)) P = ed25519.decodepoint(binascii.unhexlify(P_hex)) A = ed25519.scalarmult(P, a) return binascii.hexlify(ed25519.encodepoint(A))