ExSwan.CBORUtils (exswan v0.1.0)
View SourceCBOR encoding and decoding utilities for WebAuthn objects.
This module provides functions to encode and decode CBOR data structures used in WebAuthn operations, particularly for attestation objects and credential public keys.
Summary
Functions
Decodes a CBOR-encoded attestation object.
Decodes a base64url-encoded CBOR attestation object.
Decodes a CBOR-encoded credential public key.
Decodes CBOR-encoded authenticator data extensions.
Encodes an attestation object map to CBOR format.
Encodes a credential public key map to CBOR format.
Encodes extensions map to CBOR format.
Validates that a decoded CBOR map contains expected WebAuthn fields.
Validates that a decoded public key contains expected COSE key fields.
Functions
Decodes a CBOR-encoded attestation object.
Examples
iex> ExSwan.CBORUtils.decode_attestation_object(cbor_data)
{:ok, %{
"fmt" => "packed",
"authData" => <<...>>,
"attStmt" => %{...}
}}
Decodes a base64url-encoded CBOR attestation object.
This function is used when the attestation object comes from client as base64url.
Decodes a CBOR-encoded credential public key.
Returns a map containing the public key parameters according to RFC 8152 (CBOR Object Signing and Encryption).
Includes workaround for Firefox 117 EdDSA CBOR encoding bug.
Examples
iex> ExSwan.CBORUtils.decode_credential_public_key(cbor_data)
{:ok, %{
1 => 2, # kty (Key Type): EC2
3 => -7, # alg (Algorithm): ES256
-1 => 1, # crv (Curve): P-256
-2 => x_coordinate,
-3 => y_coordinate
}}
Decodes CBOR-encoded authenticator data extensions.
Encodes an attestation object map to CBOR format.
Encodes a credential public key map to CBOR format.
Encodes extensions map to CBOR format.
Validates that a decoded CBOR map contains expected WebAuthn fields.
Examples
iex> ExSwan.CBORUtils.validate_attestation_object(%{"fmt" => "packed", "authData" => <<...>>})
:ok
iex> ExSwan.CBORUtils.validate_attestation_object(%{"invalid" => "data"})
{:error, :missing_required_fields}
Validates that a decoded public key contains expected COSE key fields.