Skip to content

Commit 5812ccb

Browse files
committed
add EdDSA support
1 parent f720c0d commit 5812ccb

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/cryptojwt/jws/jws.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from ..utils import b64e_enc_dec
1515
from ..utils import b64encode_item
1616
from .dsa import ECDSASigner
17+
from .eddsa import EDDSASigner
1718
from .exception import FormatError
1819
from .exception import NoSuitableSigningKeys
1920
from .exception import SignerAlgError
@@ -45,6 +46,7 @@
4546
"PS256": PSSSigner("SHA256"),
4647
"PS384": PSSSigner("SHA384"),
4748
"PS512": PSSSigner("SHA512"),
49+
"EdDSA": EDDSASigner(),
4850
"none": None,
4951
}
5052

tests/test_06_jws.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
import pytest
77
from cryptography.hazmat.backends import default_backend
88
from cryptography.hazmat.primitives.asymmetric import ec
9+
from cryptography.hazmat.primitives.asymmetric import ed25519
910

1011
from cryptojwt import as_unicode
1112
from cryptojwt.exception import BadSignature
1213
from cryptojwt.exception import UnknownAlgorithm
1314
from cryptojwt.exception import WrongNumberOfParts
1415
from cryptojwt.jwk.ec import ECKey
1516
from cryptojwt.jwk.hmac import SYMKey
17+
from cryptojwt.jwk.okp import OKPKey
1618
from cryptojwt.jwk.rsa import RSAKey
1719
from cryptojwt.jwk.rsa import import_private_rsa_key_from_file
1820
from cryptojwt.jws.exception import FormatError
@@ -601,6 +603,39 @@ def test_signer_ps512():
601603
assert _rj.verify_alg("PS512")
602604

603605

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+
604639
def test_no_alg_and_alg_none_same():
605640
payload = "Please take a moment to register today"
606641
_jws = JWS(payload, alg="none")

0 commit comments

Comments
 (0)