Current section
Files
Jump to
Current section
Files
lib/cose.ex
defmodule COSE do
@moduledoc """
Documentation for `COSE`.
"""
@cose_key_types %{
okp: 1,
symmetric: 4
}
def key_type(kty) when is_atom(kty), do: @cose_key_types[kty]
def key_type(kty) when is_integer(kty), do: invert_map(@cose_key_types)[kty]
@cose_curves %{
x25519: 4,
ed25519: 6
}
def curve(crv) when is_atom(crv), do: @cose_curves[crv]
def curve(crv) when is_integer(crv), do: invert_map(@cose_curves)[crv]
@cose_algs %{
direct: -6,
aes_ccm_16_64_128: 10,
ecdh_ss_hkdf_256: -27,
eddsa: -8
}
def algorithm(alg) when is_atom(alg), do: @cose_algs[alg]
def algorithm(alg) when is_integer(alg), do: invert_map(@cose_algs)[alg]
@cose_headers %{
alg: 1,
kid: 4,
iv: 5,
party_v_identity: -24
}
def header(hdr) when is_atom(hdr), do: @cose_headers[hdr]
def header(hdr) when is_integer(hdr), do: invert_map(@cose_headers)[hdr]
def invert_map(a_map) do
Enum.map(a_map, fn {key, value} -> {value, key} end) |> Enum.into(%{})
end
def tag_as_byte(data) when is_binary(data) do
%CBOR.Tag{tag: :bytes, value: data}
end
def tag_as_byte(nil) do
%CBOR.Tag{tag: :bytes, value: <<>>}
end
end