Skip to content

Commit bcfb6b0

Browse files
committed
add accelerate for verify
1 parent 5cda868 commit bcfb6b0

4 files changed

Lines changed: 12 additions & 10 deletions

File tree

src/ecdsa/ecdsa.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ def __ne__(self, other):
181181
"""Return False if the keys are identical, True otherwise."""
182182
return not self == other
183183

184-
def verifies(self, hash, signature):
184+
def verifies(self, hash, signature, accelerate=False):
185185
"""Verify that signature is a valid signature of hash.
186186
Return True if the signature is valid.
187187
"""
@@ -194,9 +194,9 @@ def verifies(self, hash, signature):
194194
s = signature.s
195195
if s < 1 or s > n - 1:
196196
return False
197-
if not isinstance(r, int):
197+
if accelerate:
198198
point = ellipticcurve.AbstractPoint.from_bytes(
199-
self.generator.curve(), bytearray(r))
199+
self.generator.curve(),r)
200200
r = point[0] % n
201201
if r < 1 or r > n - 1:
202202
return False

src/ecdsa/keys.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,7 @@ def verify(
633633
hashfunc=None,
634634
sigdecode=sigdecode_string,
635635
allow_truncate=True,
636+
accelerate=False
636637
):
637638
"""
638639
Verify a signature made over provided data.
@@ -682,14 +683,15 @@ def verify(
682683

683684
hashfunc = hashfunc or self.default_hashfunc
684685
digest = hashfunc(data).digest()
685-
return self.verify_digest(signature, digest, sigdecode, allow_truncate)
686+
return self.verify_digest(signature, digest, sigdecode, allow_truncate, accelerate)
686687

687688
def verify_digest(
688689
self,
689690
signature,
690691
digest,
691692
sigdecode=sigdecode_string,
692693
allow_truncate=False,
694+
accelerate=False
693695
):
694696
"""
695697
Verify a signature made over provided hash value.
@@ -736,7 +738,7 @@ def verify_digest(
736738
except (der.UnexpectedDER, MalformedSignature) as e:
737739
raise BadSignatureError("Malformed formatting of signature", e)
738740
sig = ecdsa.Signature(r, s)
739-
if self.pubkey.verifies(number, sig):
741+
if self.pubkey.verifies(number, sig, accelerate):
740742
return True
741743
raise BadSignatureError("Signature verification failed")
742744

src/ecdsa/test_malformed_sigs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ def test_random_der_ecdsa_sig_value_full_r(params):
269269
verifying_key, sig = params
270270

271271
with pytest.raises(BadSignatureError):
272-
verifying_key.verify(sig, example_data, sigdecode=sigdecode_der)
272+
verifying_key.verify(sig, example_data, sigdecode=sigdecode_der, accelerate=True)
273273

274274

275275
def st_der_integer(*args, **kwargs): # pragma: no cover

src/ecdsa/test_pyecdsa.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,7 @@ def test_sigencode_der_full_r(self):
459459
sig = priv1.sign(data, sigencode=util.sigencode_der_full_r, accelerate=True)
460460

461461
self.assertEqual(type(sig), binary_type)
462-
self.assertTrue(pub1.verify(sig, data, sigdecode=util.sigdecode_der_full_r))
462+
self.assertTrue(pub1.verify(sig, data, sigdecode=util.sigdecode_der_full_r, accelerate=True))
463463

464464
def test_sigencode_der_full_r_uncompressed(self):
465465
priv1 = SigningKey.generate()
@@ -483,7 +483,7 @@ def test_sigencode_der_full_r_compressed(self):
483483
sig = util.sigencode_der_full_r(point, s, encoding="compressed")
484484

485485
self.assertEqual(type(sig), binary_type)
486-
self.assertTrue(pub1.verify(sig, data, sigdecode=util.sigdecode_der_full_r))
486+
self.assertTrue(pub1.verify(sig, data, sigdecode=util.sigdecode_der_full_r, accelerate=True))
487487

488488
def test_sigencode_der_sig_value_with_y_boolean(self):
489489
priv1 = SigningKey.generate()
@@ -492,7 +492,7 @@ def test_sigencode_der_sig_value_with_y_boolean(self):
492492
sig = priv1.sign(data, sigencode=util.sigencode_der_sig_value_y_boolean,
493493
accelerate=True)
494494
self.assertEqual(type(sig), binary_type)
495-
self.assertTrue(pub1.verify(sig, data, sigdecode=util.sigdecode_der_ecdsa_sig_value))
495+
self.assertTrue(pub1.verify(sig, data, sigdecode=util.sigdecode_der_ecdsa_sig_value, accelerate=True))
496496

497497
def test_sigencode_der_sig_value_with_y_field_elem(self):
498498
priv1 = SigningKey.generate()
@@ -501,7 +501,7 @@ def test_sigencode_der_sig_value_with_y_field_elem(self):
501501
sig = priv1.sign(data, sigencode=util.sigencode_der_sig_value_y_field_elem,
502502
accelerate=True)
503503
self.assertEqual(type(sig), binary_type)
504-
self.assertTrue(pub1.verify(sig, data, sigdecode=util.sigdecode_der_ecdsa_sig_value))
504+
self.assertTrue(pub1.verify(sig, data, sigdecode=util.sigdecode_der_ecdsa_sig_value, accelerate=True))
505505

506506
def test_sigencode_string_canonize_no_change(self):
507507
r = 12

0 commit comments

Comments
 (0)