# rigel
 [](https://codecov.io/gh/brycx/rigel)
### About
`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](https://brycx.github.io/2018/08/06/hmac-and-precomputation-optimization.html).
### Rust nightly
`rigel` requires Rust nightly.
### Security
This library has at no point received any formal cryptographic/security audit. It
should be **used at own risk**.
### Example
***One-shot API:***
```rust
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()));
```
***Streaming API:***
```rust
extern crate rigel;
let mut mac = rigel::init("Secret key".as_bytes());
mac.update("Message".as_bytes());
let res = mac.finalize();
assert!(mac.verify(&res, "Secret key".as_bytes(), "Message".as_bytes()));
let mut mac_out = [0u8; 64];
mac.reset();
mac.update("Other message".as_bytes());
mac.finalize_with_dst(&mut mac_out);
```
### Performance
```rust
test RustCrypto ... bench: 2,185 ns/iter (+/- 241)
test orion ... bench: 2,350 ns/iter (+/- 60)
test rigel_one_shot ... bench: 2,070 ns/iter (+/- 43)
test rigel_stream ... bench: 2,122 ns/iter (+/- 35)
test ring ... bench: 3,357 ns/iter (+/- 91)
```
This was benchmarked on a MacBook Air 1,6 GHz Intel Core i5, 4GB.
### License
`rigel` is licensed under the MIT license. See the `LICENSE` file for more information.