#cryptography #crypto #hmac #optimization #sha512

no-std rigel

HMAC-SHA512 implementation optimized for embedded devices

7 releases

0.0.7 Sep 5, 2018
0.0.6 Aug 24, 2018

#9 in #optimization

Download history 28/week @ 2018-08-08 50/week @ 2018-08-15 34/week @ 2018-08-22 21/week @ 2018-08-29 13/week @ 2018-09-05

48 downloads per month

MIT license

194 lines

rigel Build Status codecov


rigel is a minimal implementation of HMAC with SHA512, which is optimized for use with embedded devices. rigel minimizes the amount of allocations made, while still upholding performance speed.

You can read more about these optimizations here.


This library has at no point received any formal cryptographic/security audit. It should be used at own risk.


With the one-shot API:

extern crate rigel;

let mac = rigel::hmac_sha512("Secret key".as_bytes(), "Message".as_bytes());

assert!(rigel::verify(&mac, "Secret key".as_bytes(), "Message".as_bytes()));

With streaming messages:

extern crate rigel;

let mut mac = rigel::init("Secret key".as_bytes());
let res = mac.finalize();
assert!(mac.verify(&res, "Secret key".as_bytes(), "Message".as_bytes()));

let mut mac_out = [0u8; 64];
mac.update("Other message".as_bytes());
mac.finalize_with_dst(&mut mac_out);


test RustCrypto     ... bench:       2,629 ns/iter (+/- 293)
test orion          ... bench:       2,224 ns/iter (+/- 78)
test rigel_one_shot ... bench:       2,095 ns/iter (+/- 36)
test rigel_stream   ... bench:       2,188 ns/iter (+/- 81)
test ring           ... bench:       3,296 ns/iter (+/- 51)

This was benchmarked on a MacBook Air 1,6 GHz Intel Core i5, 4GB.


rigel is licensed under the MIT license. See the LICENSE file for more information.