Skip to content

Commit

Permalink
Merge #20326: tests: Fix ecdsa_verify in test framework
Browse files Browse the repository at this point in the history
568a1d7 fix ecdsa verify in test framework (Stepan Snigirev)

Pull request description:

  This PR fixes a small bug in the test framework in `verify_ecdsa` function.
  `r` in ecdsa signature is modulo curve order, so if the point `R` calculated during verification has x-coordinate that is larger than the curve order, the verification will fail in the test framework but pass in libsecp256k1.

  Example (all in hex):
  public key: `0289d889551598a0263746c01e5882ccf9b7dc4ca5a37108482c9d80de40e0a8cf`
  der signature: `3006020104020104` (r = 4, s = 4)
  message: `3232323232323232323232323232323232323232323232323232323232323232`

  libsecp256k1 returns `true`, test framework returns `false`.

ACKs for top commit:
  sipa:
    utACK 568a1d7

Tree-SHA512: 9e9c58498f10085d2ad85e95caff6c92793799d2a40696ef43febcd7d313c8c3d5ecec715ca903cbb8432a8a96bd0065d86d060966d4ee651c3871ce16c252bf
  • Loading branch information
MarcoFalke committed Nov 6, 2020
2 parents 65460c2 + 568a1d7 commit c51c275
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion test/functional/test_framework/key.py
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ def verify_ecdsa(self, sig, msg, low_s=True):
u1 = z*w % SECP256K1_ORDER
u2 = r*w % SECP256K1_ORDER
R = SECP256K1.affine(SECP256K1.mul([(SECP256K1_G, u1), (self.p, u2)]))
if R is None or R[0] != r:
if R is None or (R[0] % SECP256K1_ORDER) != r:
return False
return True

Expand Down

0 comments on commit c51c275

Please sign in to comment.