|
6 | 6 | import pytest
|
7 | 7 | from cryptography.hazmat.backends import default_backend
|
8 | 8 | from cryptography.hazmat.primitives.asymmetric import ec
|
| 9 | +from cryptography.hazmat.primitives.asymmetric import ed25519 |
9 | 10 |
|
10 | 11 | from cryptojwt import as_unicode
|
11 | 12 | from cryptojwt.exception import BadSignature
|
12 | 13 | from cryptojwt.exception import UnknownAlgorithm
|
13 | 14 | from cryptojwt.exception import WrongNumberOfParts
|
14 | 15 | from cryptojwt.jwk.ec import ECKey
|
15 | 16 | from cryptojwt.jwk.hmac import SYMKey
|
| 17 | +from cryptojwt.jwk.okp import OKPKey |
16 | 18 | from cryptojwt.jwk.rsa import RSAKey
|
17 | 19 | from cryptojwt.jwk.rsa import import_private_rsa_key_from_file
|
18 | 20 | from cryptojwt.jws.exception import FormatError
|
@@ -601,6 +603,39 @@ def test_signer_ps512():
|
601 | 603 | assert _rj.verify_alg("PS512")
|
602 | 604 |
|
603 | 605 |
|
| 606 | +def test_signer_eddsa(): |
| 607 | + payload = "Please take a moment to register today" |
| 608 | + okp = ed25519.Ed25519PrivateKey.generate() |
| 609 | + _key = OKPKey().load_key(okp) |
| 610 | + keys = [_key] |
| 611 | + _jws = JWS(payload, alg="EdDSA") |
| 612 | + _jwt = _jws.sign_compact(keys) |
| 613 | + |
| 614 | + _pubkey = OKPKey().load_key(okp.public_key()) |
| 615 | + _rj = JWS(alg="EdDSA") |
| 616 | + info = _rj.verify_compact(_jwt, [_pubkey]) |
| 617 | + assert info == payload |
| 618 | + |
| 619 | + |
| 620 | +def test_signer_eddsa_fail(): |
| 621 | + payload = "Please take a moment to register today" |
| 622 | + okp = ed25519.Ed25519PrivateKey.generate() |
| 623 | + _key = OKPKey().load_key(okp) |
| 624 | + keys = [_key] |
| 625 | + _jws = JWS(payload, alg="EdDSA") |
| 626 | + _jwt = _jws.sign_compact(keys) |
| 627 | + |
| 628 | + okp2 = ed25519.Ed25519PrivateKey.generate() |
| 629 | + _pubkey = OKPKey().load_key(okp2.public_key()) |
| 630 | + _rj = JWS(alg="EdDSA") |
| 631 | + try: |
| 632 | + info = _rj.verify_compact(_jwt, [_pubkey]) |
| 633 | + except BadSignature: |
| 634 | + pass |
| 635 | + else: |
| 636 | + assert False |
| 637 | + |
| 638 | + |
604 | 639 | def test_no_alg_and_alg_none_same():
|
605 | 640 | payload = "Please take a moment to register today"
|
606 | 641 | _jws = JWS(payload, alg="none")
|
|
0 commit comments