licensed 0.1.0

licensed is a library to add signed licenses to your binary
Documentation
# Licensed

[![Build Status](https://travis-ci.org/ChrisMacNaughton/licensed.svg?branch=master)](https://travis-ci.org/ChrisMacNaughton/licensed)
[![Coverage Status](https://coveralls.io/repos/github/ChrisMacNaughton/licensed/badge.svg?branch=master)](https://coveralls.io/github/ChrisMacNaughton/licensed?branch=master)

Licensed is a library for adding digitally signed licenses to
your binary projects in a simple, extensible manner. In addition
to providing library functions for usei n your code, it provides
key generation and license signing binaries in the crate.

## Usage

To use `licensed`, you will need to generate keys to use for your
signing. These keys should be kept private as they are used to
proove that a license is valid.

If you want to generate keys in the example directory, you can
invioke `gen_keys` with a single argument, as shown below through
the `cargo run` command:

    cargo run --bin=gen_keys -- examples

The above command will generatae two files in the target directory:

1. `private.pks`
2. `public.pks`

`private.pks` is actually the complete key material for the keys,
but is accompanied by `public.pks` as well to make including the
public key material into a destination binary easier.

`licensed` expects a certain format for its license files, such as:

```json
{
    "features": [
        "string key",
        "another feature"
    ],
    "expires": "2014-11-28T12:00:09Z"
}
```

`expires`, shown above, is an optional field that will be checked,
if present to ensure license validity.

Once you have the above file saved into, for example, `license.json`,
you can run:

    gen_license license.json $KEY_PATH/private.pks $OUTPUT_PATH

The generated file at `$OUTPUT_PATH` will look like the above json with a null byte and the signature appended.

Validating a license in your binary is as simple as:

```rust
let filename = "path/to/license";
let license_file = read(filename)?;
let license = licensed::License::new(&license_file)
    .with_public_key(&PUBLIC_KEY)
    .build()?;
if license.valid() {
    println!("The providded license is valid");
} else {
    println!("The provided license is invalid");
}
```