# 🔐 keybob 

[![travis](https://travis-ci.org/spacekookie/keybob.svg?branch=master)](https://travis-ci.org/spacekookie/keybob)
[![coveralls](https://coveralls.io/repos/github/spacekookie/keybob/badge.svg?branch=master&service=github)](https://coveralls.io/github/spacekookie/keybob?branch=master)
[![docs.rs](https://docs.rs/keybob/badge.svg)](https://docs.rs/keybob/)
[![crates.io](https://img.shields.io/crates/v/keybob.svg)](https://crates.io/crates/keybob)
[![downloads](https://img.shields.io/crates/d/keybob.svg)](https://crates.io/crates/keybob)

A cryptographic key utility crate.

## Features

- Create `Aes128` and `Aes256` keys from scratch
- Expand user passphrase via `pbkdf2` and `Blake2b`
- Custom `serde` Serialiser/ Deserialiser
- No heap-allocated structures required (exception: Serialisation currently uses `Vec<_>`)

```rust
extern crate keybob;
use keybob::{Key, KeyType};

/* Let's assume you want to use miscreant */
extern crate miscreant;
use miscreant::aead::{Aes256Siv, Algorithm};

fn main() {
    let key = Key::new(KeyType::Aes256);
    let aes = Aes256Siv::new(key.as_slice());

    /* ... etc ... */
}
```
