Yawning Angel 6bafa21bee crypto: Add rand_bytes 3 years ago
..
_blake2 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
_fiat 4647081f49 core/crypto/poly1305: Triple performance on amd64 with -o:speed 3 years ago
_sha3 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
_tiger c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
blake c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
blake2b c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
blake2s c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
chacha20 7bed317636 core/crypto: Add chacha20 3 years ago
chacha20poly1305 6c4c9aef61 core/crypto: Add chacha20poly1305 3 years ago
gost c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
groestl c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
haval c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
jh c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
keccak c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
md2 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
md4 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
md5 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
poly1305 64db286582 core/crypto: Add poly1305 3 years ago
ripemd c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
sha1 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
sha2 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
sha3 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
shake c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
sm3 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
streebog c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
tiger c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
tiger2 c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
util b7a0627d09 Remove the read_entire_file from the crypto utils and now use the one within core:os 3 years ago
whirlpool c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
x25519 1a7a6a9116 core/crypto: Add x25519 3 years ago
README.md c24454ae70 Removed context switching system from the crypto library to simplify the code 3 years ago
crypto.odin 6bafa21bee crypto: Add rand_bytes 3 years ago
rand_generic.odin 6bafa21bee crypto: Add rand_bytes 3 years ago
rand_linux.odin 6bafa21bee crypto: Add rand_bytes 3 years ago

README.md

crypto

A crypto library for the Odin language

Supported

This library offers various algorithms implemented in Odin. Please see the chart below for the options.

Hashing algorithms

Algorithm
BLAKE ✔️
BLAKE2B ✔️
BLAKE2S ✔️
GOST ✔️
Grøstl ✔️
HAVAL ✔️
JH ✔️
Keccak ✔️
MD2 ✔️
MD4 ✔️
MD5 ✔️
RIPEMD ✔️
SHA-1 ✔️
SHA-2 ✔️
SHA-3 ✔️
SHAKE ✔️
SM3 ✔️
Streebog ✔️
Tiger ✔️
Tiger2 ✔️
Whirlpool ✔️

High level API

Each hash algorithm contains a procedure group named hash, or if the algorithm provides more than one digest size hash_<size>*.
Included in these groups are four procedures.

  • hash_string - Hash a given string and return the computed hash. Just calls hash_bytes internally
  • hash_bytes - Hash a given byte slice and return the computed hash
  • hash_stream - Takes a stream from io.Stream and returns the computed hash from it
  • hash_file - Takes a file handle and returns the computed hash from it. A second optional boolean parameter controls if the file is streamed (this is the default) or read at once (set to true)

* On some algorithms there is another part to the name, since they might offer control about additional parameters.
For instance, HAVAL offers different sizes as well as three different round amounts.
Computing a 256-bit hash with 3 rounds is therefore achieved by calling haval.hash_256_3(...).

Low level API

The above mentioned procedures internally call three procedures: init, update and final. You may also directly call them, if you wish.

Example

package crypto_example

// Import the desired package
import "core:crypto/md4"

main :: proc() {
    input := "foo"

    // Compute the hash, using the high level API
    computed_hash := md4.hash(input)

    // Compute the hash, using the low level API
    ctx: md4.Md4_Context
    computed_hash_low: [16]byte
    md4.init(&ctx)
    md4.update(&ctx, transmute([]byte)input)
    md4.final(&ctx, computed_hash_low[:])
}

For example uses of all available algorithms, please see the tests within tests/core/crypto.

Thread safety

The crypto package is not thread-safe at the moment. This may change in the future.

Disclaimer

The algorithms were ported out of curiosity and due to interest in the field. We have not had any of the code verified by a third party or tested/fuzzed by any automatic means. Whereever we were able to find official test vectors, those were used to verify the implementation. We do not recommend using them in a production environment, without any additional testing and/or verification.

ToDo

  • Ciphers (Symmetric, Asymmetric)
  • MACs (Message Authentication Code)
  • CSPRNGs (Cryptographically Secure PseudoRandom Number Generator)
  • KDFs (Key Derivation Function)
  • KEAs (Key Exchange Algorithm)

License

This library is made available under the BSD-3 license.