diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c8f5ad --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# Basic JWT + +This crate provide basic functions to: +* Sign JWT +* Parse and validate JWT + + +Basic usage: + +```rust +let claims = ...; // note : claims must be serializable + +// Generate a key pair. Public and private key are both serializable +let (pub_key, priv_key) = generate_ec384_keypair().unwrap(); + +// Create a JWT for the given claims (note: standard claims: sub, iss, ...) are not +// automatically added if they are missing +let jwt = sign_jwt(&priv_key, &claims).expect("Failed to sign JWT!"); + +// Validate signed JWT +let claims_out = validate_jwt::(&pub_key, &jwt).expect("Failed to validate JWT!"); +``` diff --git a/src/lib.rs b/src/lib.rs index 1273452..dd5e1dd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -65,19 +65,18 @@ pub fn validate_jwt(key: &TokenPubKey, token: &str) -> anyh #[cfg(test)] mod test { - use std::time::{SystemTime, UNIX_EPOCH}; use crate::{generate_ec384_keypair, sign_jwt, validate_jwt}; + use std::time::{SystemTime, UNIX_EPOCH}; use serde::{Deserialize, Serialize}; - fn time() -> u64 { + fn time() -> u64 { SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() .as_secs() } - #[derive(Debug, Serialize, Deserialize, Eq, PartialEq)] pub struct Claims { sub: String, @@ -98,7 +97,7 @@ mod test { let (pub_key, priv_key) = generate_ec384_keypair().unwrap(); let claims = Claims::default(); let jwt = sign_jwt(&priv_key, &claims).expect("Failed to sign JWT!"); - let claims_out = validate_jwt(&pub_key, &jwt).expect("Failed to validate JWT!"); + let claims_out = validate_jwt::(&pub_key, &jwt).expect("Failed to validate JWT!"); assert_eq!(claims, claims_out) }