Skip to content

Commit 43a42b3

Browse files
committed
add test coverage for canonicalizing signature encoders
1 parent da44d14 commit 43a42b3

File tree

1 file changed

+80
-2
lines changed

1 file changed

+80
-2
lines changed

src/ecdsa/test_pyecdsa.py

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,14 @@
2020
from .keys import SigningKey, VerifyingKey
2121
from .keys import BadSignatureError, MalformedPointError, BadDigestError
2222
from . import util
23-
from .util import sigencode_der, sigencode_strings
24-
from .util import sigdecode_der, sigdecode_strings
23+
from .util import (
24+
sigencode_der,
25+
sigencode_strings,
26+
sigencode_strings_canonize,
27+
sigencode_string_canonize,
28+
sigencode_der_canonize,
29+
)
30+
from .util import sigdecode_der, sigdecode_strings, sigdecode_string
2531
from .util import number_to_string, encoded_oid_ecPublicKey, MalformedSignature
2632
from .curves import Curve, UnknownCurveError
2733
from .curves import (
@@ -451,6 +457,78 @@ def test_signature_strings(self):
451457
self.assertEqual(type(sig_der), binary_type)
452458
self.assertTrue(pub1.verify(sig_der, data, sigdecode=sigdecode_der))
453459

460+
def test_sigencode_string_canonize_no_change(self):
461+
r = 12
462+
s = 400
463+
order = SECP112r1.order
464+
465+
new_r, new_s = sigdecode_string(
466+
sigencode_string_canonize(r, s, order), order
467+
)
468+
469+
self.assertEqual(r, new_r)
470+
self.assertEqual(s, new_s)
471+
472+
def test_sigencode_string_canonize(self):
473+
r = 12
474+
order = SECP112r1.order
475+
s = order - 10
476+
477+
new_r, new_s = sigdecode_string(
478+
sigencode_string_canonize(r, s, order), order
479+
)
480+
481+
self.assertEqual(r, new_r)
482+
self.assertEqual(order - s, new_s)
483+
484+
def test_sigencode_strings_canonize_no_change(self):
485+
r = 12
486+
s = 400
487+
order = SECP112r1.order
488+
489+
new_r, new_s = sigdecode_strings(
490+
sigencode_strings_canonize(r, s, order), order
491+
)
492+
493+
self.assertEqual(r, new_r)
494+
self.assertEqual(s, new_s)
495+
496+
def test_sigencode_strings_canonize(self):
497+
r = 12
498+
order = SECP112r1.order
499+
s = order - 10
500+
501+
new_r, new_s = sigdecode_strings(
502+
sigencode_strings_canonize(r, s, order), order
503+
)
504+
505+
self.assertEqual(r, new_r)
506+
self.assertEqual(order - s, new_s)
507+
508+
def test_sigencode_der_canonize_no_change(self):
509+
r = 13
510+
s = 200
511+
order = SECP112r1.order
512+
513+
new_r, new_s = sigdecode_der(
514+
sigencode_der_canonize(r, s, order), order
515+
)
516+
517+
self.assertEqual(r, new_r)
518+
self.assertEqual(s, new_s)
519+
520+
def test_sigencode_der_canonize(self):
521+
r = 13
522+
order = SECP112r1.order
523+
s = order - 14
524+
525+
new_r, new_s = sigdecode_der(
526+
sigencode_der_canonize(r, s, order), order
527+
)
528+
529+
self.assertEqual(r, new_r)
530+
self.assertEqual(order - s, new_s)
531+
454532
def test_sig_decode_strings_with_invalid_count(self):
455533
with self.assertRaises(MalformedSignature):
456534
sigdecode_strings([b("one"), b("two"), b("three")], 0xFF)

0 commit comments

Comments
 (0)