MetamorphicCrypto.Keys (metamorphic_crypto v0.1.0)

Copy Markdown View Source

Key generation and private key management.

Key types

TypeSizeUse
Symmetric key32 bytesSecretBox encryption
X25519 keypair32 + 32 bytesBoxSeal / Seal public-key encryption
Salt16 bytesArgon2id KDF input

Usage

# Symmetric key for SecretBox
key = MetamorphicCrypto.Keys.generate_key()

# X25519 keypair for BoxSeal
{public_key, private_key} = MetamorphicCrypto.Keys.generate_keypair()

# Salt for KDF
salt = MetamorphicCrypto.Keys.generate_salt()

Summary

Functions

Decrypt an encrypted private key with a session key.

Encrypt a private key (base64) with a session key for storage.

Generate a random 32-byte symmetric key (base64-encoded).

Generate a random X25519 keypair.

Generate a random 16-byte Argon2id salt (base64-encoded).

Functions

decrypt_private_key(ciphertext_b64, session_key_b64)

@spec decrypt_private_key(ciphertext_b64 :: String.t(), session_key_b64 :: String.t()) ::
  {:ok, String.t()} | {:error, String.t()}

Decrypt an encrypted private key with a session key.

Returns {:ok, private_key_b64} or {:error, reason}.

Example

{:ok, private_key} = MetamorphicCrypto.Keys.decrypt_private_key(encrypted_sk, session_key)

encrypt_private_key(private_key_b64, session_key_b64)

@spec encrypt_private_key(
  private_key_b64 :: String.t(),
  session_key_b64 :: String.t()
) ::
  {:ok, String.t()} | {:error, String.t()}

Encrypt a private key (base64) with a session key for storage.

The private key is treated as a UTF-8 string (its base64 representation) and encrypted with XSalsa20-Poly1305.

Example

{_pk, sk} = MetamorphicCrypto.Keys.generate_keypair()
session_key = MetamorphicCrypto.Keys.generate_key()
{:ok, encrypted_sk} = MetamorphicCrypto.Keys.encrypt_private_key(sk, session_key)

generate_key()

@spec generate_key() :: String.t()

Generate a random 32-byte symmetric key (base64-encoded).

Example

key = MetamorphicCrypto.Keys.generate_key()

generate_keypair()

@spec generate_keypair() :: {String.t(), String.t()}

Generate a random X25519 keypair.

Returns {public_key_b64, private_key_b64}.

Example

{public_key, private_key} = MetamorphicCrypto.Keys.generate_keypair()

generate_salt()

@spec generate_salt() :: String.t()

Generate a random 16-byte Argon2id salt (base64-encoded).

Example

salt = MetamorphicCrypto.Keys.generate_salt()