mirror of
https://github.com/bitcoin/bips.git
synced 2026-11-02 19:41:29 +00:00
Merge pull request #2335 from ViniciusCestarii/bip-374-new-test-vectors
bip374: add new test vectors checking for boundaries
This commit is contained in:
3 files changed
+26
-5
No files matched your search
+3
-1
@@ -11,7 +11,7 @@
|
||||
License: BSD-2-Clause
|
||||
Discussion: https://gist.github.com/andrewtoth/df97c3260cc8d12f09d3855ee61322ea
|
||||
https://groups.google.com/g/bitcoindev/c/MezoKV5md7s
|
||||
Version: 0.3.0
|
||||
Version: 0.3.1
|
||||
</pre>
|
||||
|
||||
== Introduction ==
|
||||
@@ -124,6 +124,8 @@ Test vectors can be generated by running <code>./bip-0374/gen_test_vectors.py</c
|
||||
|
||||
== Changelog ==
|
||||
|
||||
* 0.3.1 (2026-10-26):
|
||||
** Add test vectors checking scalar boundaries
|
||||
* 0.3.0 (2026-08-19):
|
||||
** Treat the challenge ''e'' as a scalar (reduced modulo the curve order) and reject proofs with ''e ≥ n''
|
||||
* 0.2.0 (2025-02-27):
|
||||
|
||||
@@ -59,7 +59,19 @@ def gen_all_generate_proof_vectors(f):
|
||||
writer.writerow((idx, G.to_bytes_compressed().hex(), f"{a:064x}", B.to_bytes_compressed().hex(), auxrand.hex(), msg.hex(), proof.hex(), f"Success case {i+1}"))
|
||||
idx += 1
|
||||
|
||||
# failure cases: a is not within group order (a=0, a=N)
|
||||
# success cases: a at the bounds of the valid range (a=1, a=N-1)
|
||||
a_bound = 1
|
||||
proof = dleq_generate_proof(a_bound, B, auxrand, G=G, m=msg)
|
||||
assert proof is not None and len(proof) == 64
|
||||
writer.writerow((idx, G.to_bytes_compressed().hex(), f"{a_bound:064x}", B.to_bytes_compressed().hex(), auxrand.hex(), msg.hex(), proof.hex(), f"Success case (a=1)"))
|
||||
idx += 1
|
||||
a_bound = GE.ORDER - 1
|
||||
proof = dleq_generate_proof(a_bound, B, auxrand, G=G, m=msg)
|
||||
assert proof is not None and len(proof) == 64
|
||||
writer.writerow((idx, G.to_bytes_compressed().hex(), f"{a_bound:064x}", B.to_bytes_compressed().hex(), auxrand.hex(), msg.hex(), proof.hex(), f"Success case (a=N-1 [group order - 1])"))
|
||||
idx += 1
|
||||
|
||||
# failure cases: a is not within group order (a=0, a=N, a=N+1)
|
||||
a_invalid = 0
|
||||
assert dleq_generate_proof(a_invalid, B, auxrand, G=G, m=msg) is None
|
||||
writer.writerow((idx, G.to_bytes_compressed().hex(), f"{a_invalid:064x}", B.to_bytes_compressed().hex(), auxrand.hex(), msg.hex(), "INVALID", f"Failure case (a=0)"))
|
||||
@@ -68,6 +80,10 @@ def gen_all_generate_proof_vectors(f):
|
||||
assert dleq_generate_proof(a_invalid, B, auxrand, G=G, m=msg) is None
|
||||
writer.writerow((idx, G.to_bytes_compressed().hex(), f"{a_invalid:064x}", B.to_bytes_compressed().hex(), auxrand.hex(), msg.hex(), "INVALID", f"Failure case (a=N [group order])"))
|
||||
idx += 1
|
||||
a_invalid = GE.ORDER + 1
|
||||
assert dleq_generate_proof(a_invalid, B, auxrand, G=G, m=msg) is None
|
||||
writer.writerow((idx, G.to_bytes_compressed().hex(), f"{a_invalid:064x}", B.to_bytes_compressed().hex(), auxrand.hex(), msg.hex(), "INVALID", f"Failure case (a=N+1 [group order + 1])"))
|
||||
idx += 1
|
||||
|
||||
# failure case: B is point at infinity
|
||||
B_infinity = GE()
|
||||
|
||||
@@ -7,6 +7,9 @@ index,point_G,scalar_a,point_B,auxrand_r,message,result_proof,comment
|
||||
5,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,c08ca8e0bb59769fc6a4e078456284e00ea34f65add988c246e1bba85824ccdc,034bccb1c570ac1f3bc42d61fe35de605b99626501ccb20297e1acbbf2d7152aa1,c8d7056abd4726eb5a0f198740af14d6c1f0c16e5d7a37eaec621b661e669ac4,,503562d36910cd2d61a4d07c8ff680265c713e63dde0dcb88e6ea3c58597bdc05b86db9af95eccc475ce2177f941c118fefed20227d4ce8ce9557cb008758de6,Success case 6
|
||||
6,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,8e641ba6bf7f64eec76005a29585a5035376375f33e331215aedfe03b8e80e7a,0231c64e3efa506fdad6aad0f6084d5f6739de7f448d7e66f9d22f842638f41d60,02a7b2e2f5a5e9b1078dbb160502a32491fe80a091e91dd92cf77b0b7d90970f,35841ca532846e1cdd23a3d107824343584f88eff580929469865eae8355ee3c,5c7b27a33210750e9de8679d9f43497cf9f12ac642cde0a1fc26443aa2fc89bf71aabf7bac89f5d8a96cbe86daba155fa74d6f3e111136179e53b04eb6d7807f,Success case 7
|
||||
7,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,cfb9a7ecc49bea4f2e2ee34c38a6f48b5cd5bd06f4e4d4ffb45905b3d26db842,021cb81121a00f89769903305a367ad3cc02d5b402b12c026e06ac94bde28cd608,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,78a5544afa75bf152653fe55fb76926f2f65131bf090972a0b0b37d310c28a6bde0e7bfacc10ac12d36f55316ba134b6ba0b844a65ae05cad53c0b296c6639bb,Success case 8
|
||||
8,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,0000000000000000000000000000000000000000000000000000000000000000,021cb81121a00f89769903305a367ad3cc02d5b402b12c026e06ac94bde28cd608,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,INVALID,Failure case (a=0)
|
||||
9,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141,021cb81121a00f89769903305a367ad3cc02d5b402b12c026e06ac94bde28cd608,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,INVALID,Failure case (a=N [group order])
|
||||
10,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,cfb9a7ecc49bea4f2e2ee34c38a6f48b5cd5bd06f4e4d4ffb45905b3d26db842,INFINITY,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,INVALID,Failure case (B is point at infinity)
|
||||
8,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,0000000000000000000000000000000000000000000000000000000000000001,021cb81121a00f89769903305a367ad3cc02d5b402b12c026e06ac94bde28cd608,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,fb00c556ac6a084b9eb9b7e0f612f8bcc97c6c2602e2b1a18dfe1459c790c06a04ec11baec2cab0b791f275d9b494ecd51a3599c7a9785053aee2c255e336bd9,Success case (a=1)
|
||||
9,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140,021cb81121a00f89769903305a367ad3cc02d5b402b12c026e06ac94bde28cd608,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,c1267f0fdcd6c01c9633ea287faa4352092a68726e127bdd64668a4d4201d937b798288bf15cea9f7b25f0e7ef37d3e63fc4fede9cced31146784ed2035f2476,Success case (a=N-1 [group order - 1])
|
||||
10,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,0000000000000000000000000000000000000000000000000000000000000000,021cb81121a00f89769903305a367ad3cc02d5b402b12c026e06ac94bde28cd608,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,INVALID,Failure case (a=0)
|
||||
11,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141,021cb81121a00f89769903305a367ad3cc02d5b402b12c026e06ac94bde28cd608,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,INVALID,Failure case (a=N [group order])
|
||||
12,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142,021cb81121a00f89769903305a367ad3cc02d5b402b12c026e06ac94bde28cd608,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,INVALID,Failure case (a=N+1 [group order + 1])
|
||||
13,0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798,cfb9a7ecc49bea4f2e2ee34c38a6f48b5cd5bd06f4e4d4ffb45905b3d26db842,INFINITY,d38466b77484154a3fcb3151094c1c8a845c73a3c036b3a8ebffd8ef62c9047f,22616bb5fb2d7c68270f305122f2a09e833239c4b1c9a04e285119fb606ac794,INVALID,Failure case (B is point at infinity)
|
||||
|
Reference in new issue
Block a user