Kcl (KCl v1.4.1) View Source

pure Elixir NaCl crypto suite substitute

The box and unbox functions exposed here are the equivalent of NaCl's:

  • crypto_box_curve25519xsalsa20poly1305
  • crypto_box_curve25519xsalsa20poly1305_open

Link to this section Summary

Types

public or private key

key varieties

key visibility

shared nonce

computed signature

Functions

crypto_auth equivalent

box up an authenticated packet

derive a public key from a private key

generate a {private, public} key pair

create an inital state for a peer connection

box based on a shared secret

unbox based on a shared secret

pre-compute a shared key

convert a signing Ed25519 key to a Curve25519 encryption key

unbox an authenticated packet

Link to this section Types

Specs

key() :: binary()

public or private key

Specs

key_variety() :: :sign | :encrypt

key varieties

Specs

key_vis() :: :public | :secret

key visibility

Specs

nonce() :: binary()

shared nonce

Specs

signature() :: binary()

computed signature

Link to this section Functions

Specs

auth(binary(), key()) :: signature()

crypto_auth equivalent

Specs

box(binary(), nonce(), Kcl.State.t()) :: {binary(), Kcl.State.t()}
Link to this function

box(msg, nonce, our_private, their_public)

View Source

Specs

box(binary(), nonce(), key(), key()) :: {binary(), Kcl.State.t()}

box up an authenticated packet

Link to this function

derive_public_key(private_key, variety \\ :encrypt)

View Source

Specs

derive_public_key(key(), key_variety()) :: key() | :error

derive a public key from a private key

Link to this function

generate_key_pair(variety \\ :encrypt)

View Source

Specs

generate_key_pair(key_variety()) :: {key(), key()} | :error

generate a {private, public} key pair

Link to this function

new_connection_state(our_private, our_public \\ nil, their_public)

View Source

Specs

new_connection_state(key(), key() | nil, key()) :: Kcl.State.t()

create an inital state for a peer connection

A convenience wrapper around Kcl.State.init and Kcl.State.new_peer

Link to this function

secretbox(msg, nonce, key)

View Source

Specs

secretbox(binary(), nonce(), key()) :: binary()

box based on a shared secret

Link to this function

secretunbox(packet, nonce, key)

View Source

Specs

secretunbox(binary(), nonce(), key()) :: binary() | :error

unbox based on a shared secret

Link to this function

shared_secret(our_private, their_public)

View Source

pre-compute a shared key

Mainly useful in a situation where many messages will be exchanged.

Link to this function

sign(message, secret_key, public_key \\ nil)

View Source

Specs

sign(binary(), key(), key()) :: signature()

sign a message

If only the secret key is provided, the public key will be derived therefrom. This can add significant overhead to the signing operation.

Link to this function

sign_to_encrypt(key, which)

View Source

Specs

sign_to_encrypt(key(), key_vis()) :: key()

convert a signing Ed25519 key to a Curve25519 encryption key

Link to this function

unbox(packet, nonce, state)

View Source
Link to this function

unbox(packet, nonce, our_private, their_public)

View Source

Specs

unbox(binary(), nonce(), key(), key()) :: {binary(), Kcl.State.t()} | :error

unbox an authenticated packet

Returns :error when the packet contents cannot be authenticated, otherwise the decrypted payload and updated state.

Link to this function

valid_auth?(signature, message, key)

View Source

Specs

valid_auth?(signature(), binary(), key()) :: boolean()

Compare auth HMAC

Link to this function

valid_signature?(signature, message, public_key)

View Source

Specs

valid_signature?(signature(), binary(), key()) :: boolean()

validate a message signature