A master certificate with encrypted symmetric keys for each field.
The master keyring maps field names to base64-encoded encrypted symmetric keys. These keys can decrypt the corresponding certificate fields, and can be re-encrypted for specific verifiers.
Summary
Functions
Encrypt certificate fields and generate a master keyring.
Create a keyring for a verifier to decrypt specific fields.
Decrypt a single field using the master keyring.
Decrypt all fields using the master keyring.
Create a new MasterCertificate, validating the keyring covers all fields.
Types
@type t() :: %BSV.Auth.MasterCertificate{ certificate: BSV.Auth.Certificate.t(), master_keyring: %{required(String.t()) => String.t()} }
Functions
@spec create_certificate_fields( BSV.Wallet.ProtoWallet.t(), BSV.Wallet.Types.Counterparty.t(), %{ required(String.t()) => String.t() } ) :: {:ok, %{required(String.t()) => String.t()}, %{required(String.t()) => String.t()}} | {:error, String.t()}
Encrypt certificate fields and generate a master keyring.
Takes a wallet, counterparty (certifier or subject), and plaintext fields.
Returns {encrypted_fields, master_keyring}.
@spec create_keyring_for_verifier( BSV.Wallet.ProtoWallet.t(), BSV.Wallet.Types.Counterparty.t(), BSV.Wallet.Types.Counterparty.t(), %{required(String.t()) => String.t()}, [String.t()], %{required(String.t()) => String.t()}, String.t() ) :: {:ok, %{required(String.t()) => String.t()}} | {:error, String.t()}
Create a keyring for a verifier to decrypt specific fields.
Re-encrypts the field revelation keys for the verifier.
@spec decrypt_field( BSV.Wallet.ProtoWallet.t(), %{required(String.t()) => String.t()}, String.t(), String.t(), BSV.Wallet.Types.Counterparty.t() ) :: {:ok, binary(), String.t()} | {:error, String.t()}
Decrypt a single field using the master keyring.
Returns {field_revelation_key, plaintext_value}.
@spec decrypt_fields( BSV.Wallet.ProtoWallet.t(), %{required(String.t()) => String.t()}, %{required(String.t()) => String.t()}, BSV.Wallet.Types.Counterparty.t() ) :: {:ok, %{required(String.t()) => String.t()}} | {:error, String.t()}
Decrypt all fields using the master keyring.
@spec new(BSV.Auth.Certificate.t(), %{required(String.t()) => String.t()}) :: {:ok, t()} | {:error, String.t()}
Create a new MasterCertificate, validating the keyring covers all fields.