1
0
mirror of https://github.com/bitcoin/bips.git synced 2025-05-12 12:03:29 +00:00

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.
This commit is contained in:
Jonas Nick 2022-08-19 18:58:44 +00:00
parent 2119931f01
commit 3998dbbc8a
2 changed files with 8 additions and 3 deletions

View File

@ -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]]. 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. 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 == == Footnotes ==
<references /> <references />

View File

@ -68,8 +68,7 @@ def bytes_from_point(P: Point) -> bytes:
def xor_bytes(b0: bytes, b1: bytes) -> bytes: def xor_bytes(b0: bytes, b1: bytes) -> bytes:
return bytes(x ^ y for (x, y) in zip(b0, b1)) return bytes(x ^ y for (x, y) in zip(b0, b1))
def lift_x(b: bytes) -> Optional[Point]: def lift_x(x: int) -> Optional[Point]:
x = int_from_bytes(b)
if x >= p: if x >= p:
return None return None
y_sq = (pow(x, 3, p) + 7) % p 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.') raise ValueError('The public key must be a 32-byte array.')
if len(sig) != 64: if len(sig) != 64:
raise ValueError('The signature must be a 64-byte array.') 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]) r = int_from_bytes(sig[0:32])
s = int_from_bytes(sig[32:64]) s = int_from_bytes(sig[32:64])
if (P is None) or (r >= p) or (s >= n): if (P is None) or (r >= p) or (s >= n):