nerves_key v0.3.0 NervesKey View Source

This is a high level interface to provisioning and using the NervesKey or any ATECC508A/608A that can be configured similarly.

Link to this section Summary

Types

Which device/signer certificate pair to use

Functions

Create a signing key pair

Read the device certificate from the slot

Read the manufacturer's serial number

Provision a NervesKey in one step

Provision the auxilliary device/signer certificates on a NervesKey

Check whether the NervesKey has been provisioned

Read the signer certificate from the slot

Link to this section Types

Link to this type

certificate_pair() View Source
certificate_pair() :: :primary | :aux

Which device/signer certificate pair to use

Link to this section Functions

Link to this function

create_signing_key_pair(opts \\ []) View Source
create_signing_key_pair(keyword()) ::
  {X509.Certificate.t(), X509.PrivateKey.t()}

Create a signing key pair

This returns a tuple that contains a new signer certificate and private key. It is compatible with the ATECC508A certificate compression.

Options:

  • :years_valid - how many years this signing key is valid for
Link to this function

device_cert(transport, which \\ :primary) View Source

Read the device certificate from the slot

The device must be programmed for this to work.

Link to this function

manufacturer_sn(transport) View Source
manufacturer_sn(ATECC508A.Transport.t()) :: binary()

Read the manufacturer's serial number

Link to this function

provision(transport, info, signer_cert, signer_key) View Source

Provision a NervesKey in one step.

See the README.md for how to use this. This function locks the ATECC508A down, so you'll want to be sure what you pass it is correct.

This function does it all. It requires the signer's private key so handle that with care. Alternatively, please consider sending a PR for supporting off-device signatures so that HSMs can be used.

Link to this function

provision_aux_certificates(transport, signer_cert, signer_key) View Source
provision_aux_certificates(
  ATECC508A.Transport.t(),
  X509.Certificate.t(),
  X509.PrivateKey.t()
) :: :ok

Provision the auxilliary device/signer certificates on a NervesKey.

This function creates and saves the auxilliary certificates. These are only needed if the ones written by provision/4 are not usable. They are not used unless explicitly requested. See the README.md for details.

You may call this function multiple times after the ATECC508A has been provisioned.

Link to this function

provisioned?(transport) View Source
provisioned?(ATECC508A.Transport.t()) :: boolean()

Check whether the NervesKey has been provisioned

Link to this function

signer_cert(transport, which \\ :primary) View Source

Read the signer certificate from the slot