first commit
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
from .jws_eddsa import JWS_ALGORITHMS, Ed25519, Ed448
|
||||
|
||||
|
||||
__all__ = [
|
||||
"JWS_ALGORITHMS",
|
||||
"Ed25519",
|
||||
"Ed448",
|
||||
]
|
||||
@@ -0,0 +1,39 @@
|
||||
import typing as t
|
||||
from cryptography.exceptions import InvalidSignature
|
||||
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey, Ed25519PrivateKey
|
||||
from cryptography.hazmat.primitives.asymmetric.ed448 import Ed448PublicKey, Ed448PrivateKey
|
||||
from ..errors import InvalidKeyCurveError
|
||||
from .._rfc7515.model import JWSAlgModel
|
||||
from .._rfc8037.okp_key import OKPKey
|
||||
|
||||
|
||||
class EdDSAAlgorithm(JWSAlgModel):
|
||||
key_type = "OKP"
|
||||
|
||||
def __init__(self, curve: t.Literal["Ed25519", "Ed448"]):
|
||||
self.name = curve
|
||||
self.curve = curve
|
||||
self.description = f"EdDSA using the {curve} parameter set"
|
||||
|
||||
def check_key(self, key: OKPKey) -> None:
|
||||
super().check_key(key)
|
||||
if key.curve_name != self.curve:
|
||||
raise InvalidKeyCurveError(f"Key for '{self.name}' not supported, only '{self.curve}' allowed")
|
||||
|
||||
def sign(self, msg: bytes, key: OKPKey) -> bytes:
|
||||
op_key = t.cast(t.Union[Ed25519PrivateKey, Ed448PrivateKey], key.get_op_key("sign"))
|
||||
return op_key.sign(msg)
|
||||
|
||||
def verify(self, msg: bytes, sig: bytes, key: OKPKey) -> bool:
|
||||
op_key = t.cast(t.Union[Ed25519PublicKey, Ed448PublicKey], key.get_op_key("verify"))
|
||||
try:
|
||||
op_key.verify(sig, msg)
|
||||
return True
|
||||
except InvalidSignature:
|
||||
return False
|
||||
|
||||
|
||||
Ed25519 = EdDSAAlgorithm("Ed25519")
|
||||
Ed448 = EdDSAAlgorithm("Ed448")
|
||||
|
||||
JWS_ALGORITHMS: list[EdDSAAlgorithm] = [Ed25519, Ed448]
|
||||
Reference in New Issue
Block a user