From 3998dbbc8a3ab3bfabb1b2e90a4840ad93a84adb Mon Sep 17 00:00:00 2001 From: Jonas Nick Date: Fri, 19 Aug 2022 18:58:44 +0000 Subject: BIP 340: fix function signature of lift_x in reference code bip-0340.mediawiki defines lift_x as taking an integer argument. This commit changes the argument of lift_x in the reference code to be identical to the specification. Previously it took a byte array. --- bip-0340.mediawiki | 6 ++++++ bip-0340/reference.py | 5 ++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/bip-0340.mediawiki b/bip-0340.mediawiki index a67afe3..8128650 100644 --- a/bip-0340.mediawiki +++ b/bip-0340.mediawiki @@ -243,6 +243,12 @@ Blind Schnorr signatures could for example be used in [https://github.com/Elemen For development and testing purposes, we provide a [[bip-0340/test-vectors.csv|collection of test vectors in CSV format]] and a naive, highly inefficient, and non-constant time [[bip-0340/reference.py|pure Python 3.7 reference implementation of the signing and verification algorithm]]. The reference implementation is for demonstration purposes only and not to be used in production environments. +== Changelog == + +To help implementors understand updates to this BIP, we keep a list of substantial changes. + +* 2022-08: Fix function signature of lift_x in reference code + == Footnotes == diff --git a/bip-0340/reference.py b/bip-0340/reference.py index 5b38c0a..162bb88 100644 --- a/bip-0340/reference.py +++ b/bip-0340/reference.py @@ -68,8 +68,7 @@ def bytes_from_point(P: Point) -> bytes: def xor_bytes(b0: bytes, b1: bytes) -> bytes: return bytes(x ^ y for (x, y) in zip(b0, b1)) -def lift_x(b: bytes) -> Optional[Point]: - x = int_from_bytes(b) +def lift_x(x: int) -> Optional[Point]: if x >= p: return None y_sq = (pow(x, 3, p) + 7) % p @@ -128,7 +127,7 @@ def schnorr_verify(msg: bytes, pubkey: bytes, sig: bytes) -> bool: raise ValueError('The public key must be a 32-byte array.') if len(sig) != 64: raise ValueError('The signature must be a 64-byte array.') - P = lift_x(pubkey) + P = lift_x(int_from_bytes(pubkey)) r = int_from_bytes(sig[0:32]) s = int_from_bytes(sig[32:64]) if (P is None) or (r >= p) or (s >= n): -- cgit v1.2.3