Source code for pyeudiw.tests.test_jwk

import pytest
from pydantic import TypeAdapter

from pyeudiw.jwk import JWK
from pyeudiw.jwk.schemas.public import ECJwkSchema, RSAJwkSchema, _JwkSchema_T


[docs] @pytest.mark.parametrize( "key, key_type, hash_func", [(None, None, None), (None, "EC", None), (None, "RSA", None)], ) def test_jwk(key, key_type, hash_func): jwk = JWK(key, key_type, hash_func if hash_func else "SHA-256") assert jwk.key assert jwk.thumbprint assert jwk.jwk assert jwk.jwk["kid"] == jwk.thumbprint.decode()
[docs] def test_export_public__pem(): jwk = JWK(key_type="RSA") assert jwk.public_key assert jwk.public_key["e"] assert jwk.public_key["n"] assert jwk.public_key["kid"] == jwk.jwk["kid"] assert jwk.public_key["kty"] == jwk.jwk["kty"]
[docs] def test_export_public__ec(): jwk = JWK(key_type="EC") assert jwk.public_key assert jwk.public_key["crv"] == jwk.jwk["crv"] assert jwk.public_key["kty"] == jwk.jwk["kty"] assert jwk.public_key["kid"] == jwk.jwk["kid"]
[docs] @pytest.mark.parametrize("key_type", [None, "EC", "RSA"]) def test_export_private_pem(key_type): jwk = JWK(key_type=key_type) jwk_private_pem = jwk.export_private_pem() assert jwk_private_pem if key_type: assert f"BEGIN {key_type} PRIVATE KEY" in jwk_private_pem
[docs] def test_export_public_pem(): jwk = JWK() jwk_public_pem = jwk.export_public_pem() assert jwk_public_pem assert "BEGIN PUBLIC KEY" in jwk_public_pem
[docs] @pytest.mark.parametrize("key_type", ["EC", "RSA"]) def test_dynamic_schema_validation(key_type): jwk = JWK(key_type=key_type) model = TypeAdapter(_JwkSchema_T).validate_python(jwk.as_dict()) match key_type: case "EC": assert isinstance(model, ECJwkSchema) assert not isinstance(model, RSAJwkSchema) case "RSA": assert isinstance(model, RSAJwkSchema) assert not isinstance(model, ECJwkSchema)