rbtables 0.1.4

Fast & extensible rainbow tables implementation
Documentation
# rbtables

rbtables is a fast, lightweight, and extensible implementation of [rainbow tables](https://en.wikipedia.org/wiki/Rainbow_table) in Rust. 
It is intended as an API to support general use cases of rainbow tables. 
The user will need to supply hashing and reduction functions.

## Usage

Begin by implementing the `Hasher` trait containing the function `digest(&self, plaintext : &str) -> String`. 
This function accepts an arbitrary plaintext string and should produce a hexidecimal-encoded digest string.
For example, this example produces the hex encoding of a plaintext's MD5 hash:

```rust
use rbtables::prelude::Hasher;

struct MD5Hasher;
impl Hasher for MD5Hasher {
  fn digest(&self, plaintext : &str) -> String {
    format!("{:x}", md5::compute(plaintext.as_bytes()))
  }
}
```

Next, you will need to create a set of reduction function(s) by implementing the `Reducer` trait. 
You must implement the function `reduce(&self, hash : &str) -> String`, which accepts the output of your hasher and should produce another plaintext string.
A trivial example involves taking the first `n` characters from the hex encoding of the hash:

```rust
use rbtables::prelude::Reducer;

struct SubstringReducer {
  n: usize
}
impl Reducer for SubstringReducer {

  fn reduce(&self, hash : &str) -> String {
    String::from(&hash[..self.n])
  }

}
```

After that, you can build a rainbow table by supplying the hasher and a vector of reduction functions. 
The rainbow table will need to be supplied with seed values, which will determine the effectiveness of your table along with the reduction functions. 

See the [crates.io documentation](https://docs.rs/rbtables) for additional information.