Build Status

Hi and welcome on the git page of my crate "edcert".

Edcert is a simple library for certification and authentication of data.

How it works

  1. You create a master keypair. This will be used to sign the highest certificate.
  2. You create a root certificate. Sign this with the master key.
  3. You can now create other certificates and use certificates to sign each other.
  4. Transmit your certificates in a json-encoded format over the network.
  5. Sign and verify data with the certificates using the ".sign" and ".verify" methods.

The design uses the "super-secure, super-fast" elliptic curve [Ed25519], which you can learn more about here

For cryptography it uses the [sodiumoxide] library, which is based on [NaCl], the well known cryptography libraray by Dan Bernstein et al.

Example

```rust use chrono::Timelike; use chrono::UTC; use time::Duration;

// create random master key let (mpk, msk) = ed25519::generate_keypair();

// create random certificate let meta = Meta::newempty(); let expires = UTC::now() .checkedadd(Duration::days(90)) .expect("Failed to add 90 days to expiration date.") .withnanosecond(0) .unwrap(); let mut cert = Certificate::generaterandom(meta, expires);

// sign certificate with master key cert.signwithmaster(&msk);

// the certificate is valid given the master public key asserteq!(true, cert.isvalid(&mpk).is_ok());

// now we sign data with it let data = [1; 42];

// and sign the data with the certificate let signature = cert.sign(&data[..]).expect("This fails, if no private key is known to the certificate.");

// the signature must be valid assert_eq!(true, cert.verify(&data[..], &signature[..])); ```

License

MIT

That means you can use this code in open source projects and/or commercial projects without any problems. Please read the license file "LICENSE" for details