Skip to content

Commit d34d384

Browse files
committed
Add ssl_opts helper to simplify integrations
This saves boilerplate code when using a NervesKey with libraries that use TLS like NervesHub, Tortoise, etc.
1 parent 9d01140 commit d34d384

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

lib/nerves_key.ex

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,35 @@ defmodule NervesKey do
5757
serial_number
5858
end
5959

60+
@doc """
61+
Return ssl_opts for using the NervesKey
62+
63+
Pass an engine and optionally which certificate that you'd like to use.
64+
"""
65+
@spec ssl_opts(ATECC508A.Transport.t(), certificate_pair()) :: keyword()
66+
def ssl_opts(transport, which \\ :primary) do
67+
{:ok, engine} = NervesKey.PKCS11.load_engine()
68+
69+
cert =
70+
NervesKey.device_cert(transport, which)
71+
|> X509.Certificate.to_der()
72+
73+
signer_cert =
74+
NervesKey.signer_cert(transport, which)
75+
|> X509.Certificate.to_der()
76+
77+
transport_info = ATECC508A.Transport.info(transport)
78+
79+
key = NervesKey.PKCS11.private_key(engine, i2c: i2c_instance(transport_info.bus_name))
80+
cacerts = [signer_cert]
81+
82+
[key: key, cert: cert, cacerts: cacerts]
83+
end
84+
85+
defp i2c_instance(<<"i2c-", instance::binary>>) do
86+
String.to_integer(instance)
87+
end
88+
6089
@doc """
6190
Read the device certificate from the slot
6291

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ defmodule NervesKey.MixProject do
4747

4848
defp deps do
4949
[
50-
{:atecc508a, "~> 0.2"},
50+
{:atecc508a, "~> 0.2.1"},
5151
{:nerves_key_pkcs11, "~> 0.1"},
5252
{:ex_doc, "~> 0.20", only: :dev, runtime: false},
5353
{:dialyxir, "~> 1.0.0-rc.6", only: :dev, runtime: false}

0 commit comments

Comments
 (0)