NervesKey.Data (nerves_key v1.3.0)

View Source

This module handles Data Zone data stored in the NervesKey.

Summary

Functions

Clear out the auxillary slots

Return the slot that stores the compressed device certificate.

Create a public/private key pair

Run the genkey operation on the NervesKey private key slot

Return the slot that stores the compressed signer certificate.

Return the slot that stores the signer's public key.

Determine what's in all of the data slots

Write new device and signer certificates to the auxillary slots

Write all of the slots

Functions

clear_aux_certs(transport)

@spec clear_aux_certs(ATECC508A.Transport.t()) :: :ok

Clear out the auxillary slots

device_cert_slot(atom)

@spec device_cert_slot(NervesKey.certificate_pair()) :: ATECC508A.Request.slot()

Return the slot that stores the compressed device certificate.

genkey(transport, create? \\ true)

@spec genkey(ATECC508A.Transport.t(), boolean()) ::
  {:ok, X509.PublicKey.t()} | {:error, atom()}

Create a public/private key pair

The public key is returned on success. This can only be called on devices that have their configuration locked, but not their data.

genkey_raw(transport, create?)

@spec genkey_raw(ATECC508A.Transport.t(), boolean()) ::
  {:ok, ATECC508A.ecc_public_key()} | {:error, atom()}

Run the genkey operation on the NervesKey private key slot

lock(transport, otp_data, slot_data)

@spec lock(ATECC508A.Transport.t(), binary(), [{ATECC508A.Request.slot(), binary()}]) ::
  :ok | {:error, atom()}

signer_cert_slot(atom)

@spec signer_cert_slot(NervesKey.certificate_pair()) :: ATECC508A.Request.slot()

Return the slot that stores the compressed signer certificate.

signer_pubkey_slot(atom)

@spec signer_pubkey_slot(NervesKey.certificate_pair()) :: ATECC508A.Request.slot()

Return the slot that stores the signer's public key.

slot_data(device_sn, device_cert, signer_cert)

Determine what's in all of the data slots

volatile_slot_data(device_sn, device_cert, signer_cert, activation_key, encryption_key)

Determine what's in all of the data slots

write_aux_certs(transport, device_sn, device_cert, signer_cert)

Write new device and signer certificates to the auxillary slots

write_slots(transport, slot_data)

@spec write_slots(ATECC508A.Transport.t(), [{ATECC508A.Request.slot(), binary()}]) ::
  :ok

Write all of the slots