kryptos

Package Version Hex Docs

A cryptography library for Gleam targeting both Erlang and JavaScript runtimes.

Why kryptos?

kryptos logo

Installation

gleam add kryptos

Features

ModuleAlgorithms
hashSHA-1, SHA-2, SHA-3, BLAKE2
hmacAll hash algorithms
aeadAES-GCM, AES-CCM, ChaCha20-Poly1305
blockAES-128, AES-192, AES-256
ecdsaP-256, P-384, P-521
eddsaEd25519, Ed448
ecdhP-256, P-384, P-521
xdhX25519, X448
rsaOAEP, PKCS#1 v1.5, PSS, PKCS#1 v1.5 signatures
cryptoHKDF, PBKDF2, random bytes

Getting Started

Encrypt and decrypt data using AES-GCM:

import kryptos/aead
import kryptos/block
import kryptos/crypto

pub fn main() {
  // Generate a random 256-bit key
  let assert Ok(cipher) = block.aes_256(crypto.random_bytes(32))
  let ctx = aead.gcm(cipher)

  // Generate a random nonce (never reuse with the same key!)
  let nonce = crypto.random_bytes(aead.nonce_size(ctx))

  // Encrypt
  let plaintext = <<"hello, world!":utf8>>
  let assert Ok(#(ciphertext, tag)) = aead.seal(ctx, nonce:, plaintext:)

  // Decrypt
  let assert Ok(decrypted) = aead.open(ctx, nonce:, ciphertext:, tag:)
  // decrypted == plaintext
}

Security

For guidance on choosing cryptographic primitives, see Cryptographic Right Answers.

Search Document