Skip to content

abeaumont/ocaml-chacha

Folders and files

NameName
Last commit message
Last commit date

Latest commit

116920b · Apr 3, 2022

History

40 Commits
Mar 31, 2020
Mar 31, 2022
Aug 3, 2021
Mar 31, 2020
Mar 30, 2020
Mar 30, 2020
Aug 3, 2021
Oct 30, 2017
Mar 30, 2020
Mar 31, 2020
Aug 5, 2021
Mar 30, 2020

Repository files navigation

docs Build Status

ChaCha family of encryption functions, in OCaml

An OCaml implementation of ChaCha functions, both ChaCha20 and the reduced ChaCha8 and ChaCha12 functions. The hot loop is implemented in C for efficiency reasons.

Installation

opam install chacha

Usage

utop[0]> #require "mirage-crypto";;
utop[1]> #require "mirage-crypto-rng.unix";;
utop[2]> Mirage_crypto_rng_unix.initialize ();;
- : unit = ()
utop[3]> let key = Mirage_crypto_rng.generate 32;;
val key : Cstruct.t = {Cstruct.buffer = <abstr>; off = 0; len = 32}
utop[4]> let nonce = Cstruct.create 8;;
val nonce : Cstruct.t = {Cstruct.buffer = <abstr>; off = 0; len = 8}
utop[5]> #require "chacha";;
utop[6]> let state = Chacha.create key nonce;;
val state : Chacha.t = <abstr>
utop[7]> Chacha.encrypt (Cstruct.of_string "My secret text") state |> Cstruct.to_string;;
- : string = "\026m.\\363\\026\\263\\207Xg\\256l\\262\\232F"
  • Key can either 32 (recommended) or 16 bytes
  • Chacha state may use a different hashing function, the recommended Chacha_core.chacha20 is used by default.