.. _rfc9864:

RFC 9864
========

RFC9864 defines the concept of **fully-specified algorithm identifiers**
for JOSE and COSE. Under this specification, algorithm names must uniquely
and unambiguously determine all underlying cryptographic operations. As a
result, ambiguous or polymorphic identifiers are considered deprecated.

Implementation
--------------

**joserfc** implements ONLY the JOSE-related portions of RFC 9864.

In accordance with the specification, the use of the polymorphic ``EdDSA``
algorithm identifier is deprecated. You should instead select a fully-specified
algorithm:

- ``Ed25519``
- ``Ed448``

By using fully-specified identifiers, you ensure deterministic, interoperable
behavior and avoid ambiguity during algorithm negotiation.

Example Usage
-------------

Signing with an ``Ed25519`` key:

.. code-block:: python

    from joserfc import jws
    from joserfc.jwk import OKPKey

    private_key = OKPKey.generate_key("Ed25519")
    payload = b"hello"
    # using Ed25519 instead of EdDSA
    protected = {"alg": "Ed25519"}

    output = jws.serialize_compact(protected, payload, private_key, algorithms=["Ed25519"])

Verification:

.. code-block:: python

    public_key = OKPKey.import_key(private_key.as_dict(private=False))
    jws.deserialize_compact(output, public_key, algorithms=["Ed25519"])
