keylight 0.3.0

Keylight licensing SDK — activate/validate licenses with offline Ed25519 lease verification.
Documentation
use keylight::{Lease, verify_lease};
use serde::Deserialize;
use std::collections::HashMap;

#[derive(Deserialize)]
struct Corpus {
    #[serde(rename = "skewSeconds")]
    skew_seconds: i64,
    vectors: Vec<Vector>,
}
#[derive(Deserialize)]
struct Vector {
    name: String,
    lease: Lease,
    #[serde(rename = "trustedKeys")]
    trusted_keys: HashMap<String, String>,
    now: i64,
    expect: Expect,
}
#[derive(Deserialize, Debug, PartialEq, Eq)]
struct Expect {
    #[serde(rename = "kidKnown")]
    kid_known: bool,
    #[serde(rename = "signatureValid")]
    signature_valid: bool,
    expired: bool,
}

#[test]
fn passes_all_sp0_conformance_vectors() {
    let raw = include_str!("fixtures/vectors.json");
    let corpus: Corpus = serde_json::from_str(raw).expect("parse vectors.json");
    assert!(!corpus.vectors.is_empty());
    for v in &corpus.vectors {
        let r = verify_lease(&v.lease, &v.trusted_keys, v.now, corpus.skew_seconds);
        let got = Expect {
            kid_known: r.kid_known,
            signature_valid: r.signature_valid,
            expired: r.expired,
        };
        assert_eq!(got, v.expect, "vector failed: {}", v.name);
    }
}