Skip to content

Commit d564539

Browse files
committed
test coverage for keys module
1 parent 307fa3a commit d564539

File tree

1 file changed

+114
-1
lines changed

1 file changed

+114
-1
lines changed

src/ecdsa/test_keys.py

Lines changed: 114 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,12 @@
1313
import pytest
1414
import hashlib
1515

16-
from .keys import VerifyingKey, SigningKey, MalformedPointError
16+
from .keys import (
17+
VerifyingKey,
18+
SigningKey,
19+
MalformedPointError,
20+
BadSignatureError,
21+
)
1722
from .der import (
1823
unpem,
1924
UnexpectedDER,
@@ -120,6 +125,10 @@ def test_bytearray_compressed(self):
120125

121126
self.assertEqual(self.vk.to_string(), vk.to_string())
122127

128+
def test_ed25519_VerifyingKey_from_string_imported(self):
129+
with self.assertRaises(MalformedPointError):
130+
VerifyingKey.from_string(b"AAA", Ed25519)
131+
123132

124133
class TestVerifyingKeyFromDer(unittest.TestCase):
125134
"""
@@ -405,6 +414,28 @@ def test_ed25519_sig_verify(self):
405414

406415
self.assertTrue(vk.verify(sig, data))
407416

417+
def test_ed25519_sig_verify_malformed(self):
418+
vk_pem = (
419+
"-----BEGIN PUBLIC KEY-----\n"
420+
"MCowBQYDK2VwAyEAIwBQ0NZkIiiO41WJfm5BV42u3kQm7lYnvIXmCy8qy2U=\n"
421+
"-----END PUBLIC KEY-----\n"
422+
)
423+
424+
vk = VerifyingKey.from_pem(vk_pem)
425+
426+
data = b"data\n"
427+
428+
# modified signature from test_ed25519_sig_verify
429+
sig = (
430+
b"\xAA\x47\xab\x6a\x33\xcd\x79\x45\xad\x98\x11\x6c\xb9\xf2\x20\xeb"
431+
b"\x90\xd6\x50\xe3\xc7\x8f\x9f\x60\x10\xec\x75\xe0\x2f\x27\xd3\x96"
432+
b"\xda\xe8\x58\x7f\xe0\xfe\x46\x5c\x81\xef\x50\xec\x29\x9f\xae\xd5"
433+
b"\xad\x46\x3c\x91\x68\x83\x4d\xea\x8d\xa8\x19\x04\x04\x79\x03\x0b"
434+
)
435+
436+
with self.assertRaises(BadSignatureError):
437+
vk.verify(sig, data)
438+
408439
def test_ed448_from_pem(self):
409440
pem_str = (
410441
"-----BEGIN PUBLIC KEY-----\n"
@@ -517,6 +548,17 @@ def setUpClass(cls):
517548
)
518549
cls.sk2 = SigningKey.from_pem(prv_key_str)
519550

551+
def test_to_der_pkcs8(self):
552+
self.assertEqual(
553+
self.sk1.to_der(format="pkcs8"),
554+
b"0o\x02\x01\x010\x13\x06\x07*\x86H\xce=\x02\x01\x06\x08*\x86H"
555+
b"\xce=\x03\x01\x01\x04U0S\x02\x01\x01\x04\x18^\xc8B\x0b\xd6\xef"
556+
b"\x92R\xa9B\xe9\x89\x04<\xa2\x9fV\x1f\xa5%w\x0e\xb1\xc5\xa14\x03"
557+
b"2\x00\x04\xb8\x81w\xd0\x84\xef\x17\xf5\xe4V9@\x80(6\x0f\x9fY"
558+
b"\xb4\xa4\xd7&Nb\xda\x06Q\xdc\xe4z5\xa4\xc5\xb4\\\xf5\x15\x93B:"
559+
b"\x8bU{\x9c \x99\xf3l",
560+
)
561+
520562
def test_decoding_explicit_curve_parameters(self):
521563
prv_key_str = (
522564
"-----BEGIN PRIVATE KEY-----\n"
@@ -626,6 +668,71 @@ def test_ed25519_from_pem(self):
626668

627669
self.assertEqual(sk, sk_str)
628670

671+
def test_ed25519_sign(self):
672+
sk_str = SigningKey.from_string(
673+
b"\x34\xBA\xC7\xD1\x4E\xD4\xF1\xBC\x4F\x8C\x48\x3E\x0F\x19\x77\x4C"
674+
b"\xFC\xB8\xBE\xAC\x54\x66\x45\x11\x9A\xD7\xD7\xB8\x07\x0B\xF5\xD4",
675+
Ed25519,
676+
)
677+
678+
msg = b"message"
679+
680+
sig = sk_str.sign(msg, sigencode=sigencode_der)
681+
682+
self.assertEqual(
683+
sig,
684+
b"\xe1,v\xc9>%\xda\xd2~>\xc3&\na\xf4@|\x9e`X\x11\x13@<\x987\xd4"
685+
b"\r\xb1\xf5\xb3\x15\x7f%i{\xdf}\xdd\xb1\xf3\x02\x7f\x80\x02\xc2"
686+
b'|\xe5\xd6\x06\xc4\n\xa3\xb0\xf6}\xc0\xed)"+E\xaf\x00',
687+
)
688+
689+
def test_ed25519_sign_digest_deterministic(self):
690+
sk_str = SigningKey.from_string(
691+
b"\x34\xBA\xC7\xD1\x4E\xD4\xF1\xBC\x4F\x8C\x48\x3E\x0F\x19\x77\x4C"
692+
b"\xFC\xB8\xBE\xAC\x54\x66\x45\x11\x9A\xD7\xD7\xB8\x07\x0B\xF5\xD4",
693+
Ed25519,
694+
)
695+
with self.assertRaises(ValueError) as e:
696+
sk_str.sign_digest_deterministic(b"a" * 20)
697+
698+
self.assertIn("Method unsupported for Edwards", str(e.exception))
699+
700+
def test_ed25519_sign_digest(self):
701+
sk_str = SigningKey.from_string(
702+
b"\x34\xBA\xC7\xD1\x4E\xD4\xF1\xBC\x4F\x8C\x48\x3E\x0F\x19\x77\x4C"
703+
b"\xFC\xB8\xBE\xAC\x54\x66\x45\x11\x9A\xD7\xD7\xB8\x07\x0B\xF5\xD4",
704+
Ed25519,
705+
)
706+
with self.assertRaises(ValueError) as e:
707+
sk_str.sign_digest(b"a" * 20)
708+
709+
self.assertIn("Method unsupported for Edwards", str(e.exception))
710+
711+
def test_ed25519_sign_number(self):
712+
sk_str = SigningKey.from_string(
713+
b"\x34\xBA\xC7\xD1\x4E\xD4\xF1\xBC\x4F\x8C\x48\x3E\x0F\x19\x77\x4C"
714+
b"\xFC\xB8\xBE\xAC\x54\x66\x45\x11\x9A\xD7\xD7\xB8\x07\x0B\xF5\xD4",
715+
Ed25519,
716+
)
717+
with self.assertRaises(ValueError) as e:
718+
sk_str.sign_number(20)
719+
720+
self.assertIn("Method unsupported for Edwards", str(e.exception))
721+
722+
def test_ed25519_to_der_ssleay(self):
723+
pem_str = (
724+
"-----BEGIN PRIVATE KEY-----\n"
725+
"MC4CAQAwBQYDK2VwBCIEIDS6x9FO1PG8T4xIPg8Zd0z8uL6sVGZFEZrX17gHC/XU\n"
726+
"-----END PRIVATE KEY-----\n"
727+
)
728+
729+
sk = SigningKey.from_pem(pem_str)
730+
731+
with self.assertRaises(ValueError) as e:
732+
sk.to_der(format="ssleay")
733+
734+
self.assertIn("Only PKCS#8 format", str(e.exception))
735+
629736
def test_ed25519_to_pem(self):
630737
sk = SigningKey.from_string(
631738
b"\x34\xBA\xC7\xD1\x4E\xD4\xF1\xBC\x4F\x8C\x48\x3E\x0F\x19\x77\x4C"
@@ -667,6 +774,12 @@ def test_ed25519_to_and_from_pem(self):
667774

668775
self.assertEqual(sk, decoded)
669776

777+
def test_ed25519_from_secret_exponent(self):
778+
with self.assertRaises(ValueError) as e:
779+
SigningKey.from_secret_exponent(1234567890, curve=Ed25519)
780+
781+
self.assertIn("don't support setting the secret", str(e.exception))
782+
670783
def test_ed448_from_pem(self):
671784
pem_str = (
672785
"-----BEGIN PRIVATE KEY-----\n"

0 commit comments

Comments
 (0)