|
3 | 3 |
|
4 | 4 |
|
5 | 5 | from test import NativeResourceTest |
6 | | -from awscrt.crypto import Hash, RSA, RSAEncryptionAlgorithm, RSASignatureAlgorithm, ED25519, ED25519ExportFormat |
| 6 | +from awscrt.crypto import Hash, RSA, RSAEncryptionAlgorithm, RSASignatureAlgorithm, ED25519, ED25519ExportFormat, EC, ECType |
7 | 7 | import base64 |
8 | 8 | import unittest |
9 | 9 |
|
|
114 | 114 | '59309stR/bAhMzxOx31777XEPO1md854iXXr0XDMQlwCYkWyWb6hp4JlsqFBPMjn' |
115 | 115 | 'nGXWA0Gp6UWgpg4Hvjdsu+0FQ3AhDMBKZZ8fBFb4EW+HRQIHPnbH') |
116 | 116 |
|
| 117 | +EC_PRIVATE_KEY_SEC1_BASE64 = ( |
| 118 | + 'MHcCAQEEIJkWKltOY4ZMX4439yu9lx1caIAYw5EPw8P5Osl6S6P2oAoGCCqGSM49' |
| 119 | + 'AwEHoUQDQgAE7GzXS9wzwlYyrVJWrPXw5iiZhIOvc2/+14M7QoFdLuDb9qykxhZ+' |
| 120 | + 'PuD/e0PooTZQkoMGlLPUkwbeY4qhHD+yVw==' |
| 121 | +) |
| 122 | + |
117 | 123 |
|
118 | 124 | class TestCredentials(NativeResourceTest): |
119 | 125 |
|
@@ -326,6 +332,44 @@ def test_ed25519_keygen(self): |
326 | 332 | self.assertEqual(68, len(key.export_public_key(ED25519ExportFormat.OPENSSH_B64))) |
327 | 333 | self.assertEqual(312, len(key.export_private_key(ED25519ExportFormat.OPENSSH_B64))) |
328 | 334 |
|
| 335 | + def test_ec_p256_signing_roundtrip(self): |
| 336 | + h = Hash.sha256_new() |
| 337 | + h.update(b'totally original test string') |
| 338 | + digest = h.digest() |
| 339 | + |
| 340 | + ec = EC.new_generate(ECType.P_256) |
| 341 | + signature = ec.sign(digest) |
| 342 | + |
| 343 | + (r, s) = EC.decode_der_signature(signature) |
| 344 | + self.assertEquals(signature, EC.encode_der_signature(r, s)) |
| 345 | + |
| 346 | + self.assertTrue(ec.verify(digest, signature)) |
| 347 | + |
| 348 | + def test_ec_p384_signing_roundtrip(self): |
| 349 | + h = Hash.sha256_new() |
| 350 | + h.update(b'totally original test string') |
| 351 | + digest = h.digest() |
| 352 | + |
| 353 | + ec = EC.new_generate(ECType.P_384) |
| 354 | + signature = ec.sign(digest) |
| 355 | + |
| 356 | + (r, s) = EC.decode_der_signature(signature) |
| 357 | + self.assertEquals(signature, EC.encode_der_signature(r, s)) |
| 358 | + |
| 359 | + self.assertTrue(ec.verify(digest, signature)) |
| 360 | + |
| 361 | + def test_ec_asn1_signing_roundtrip(self): |
| 362 | + h = Hash.sha256_new() |
| 363 | + h.update(b'totally original test string') |
| 364 | + digest = h.digest() |
| 365 | + |
| 366 | + ec = EC.new_key_from_der_data(base64.decodebytes(EC_PRIVATE_KEY_SEC1_BASE64)) |
| 367 | + signature = ec.sign(digest) |
| 368 | + |
| 369 | + (r, s) = EC.decode_der_signature(signature) |
| 370 | + self.assertEquals(signature, EC.encode_der_signature(r, s)) |
| 371 | + |
| 372 | + self.assertTrue(ec.verify(digest, signature)) |
329 | 373 |
|
330 | 374 | if __name__ == '__main__': |
331 | 375 | unittest.main() |
0 commit comments