9 releases

Uses new Rust 2024

0.1.0-rc.8 Oct 26, 2025
0.1.0-rc.7 Oct 2, 2025
0.1.0-rc.6 Sep 29, 2025

#2902 in Cryptography

Download history 269/week @ 2025-09-15 160/week @ 2025-09-22 366/week @ 2025-09-29 37/week @ 2025-10-06 10/week @ 2025-10-13 71/week @ 2025-10-20 45/week @ 2025-10-27

127 downloads per month

Apache-2.0

82KB
2K SLoC

paseto-v3

RustCrypto based PASETO V3 implementation.

Examples

use paseto_v3::UnsignedToken;
use paseto_v3::key::{SecretKey, SealingKey};
use paseto_json::RegisteredClaims;
use std::time::Duration;

// create a new keypair
let secret_key = SecretKey::random().unwrap();
let public_key = secret_key.public_key();

// create a set of token claims
let claims = RegisteredClaims::now(Duration::from_secs(3600))
    .from_issuer("https://paseto.conrad.cafe/".to_string())
    .for_subject("conradludgate".to_string());

// create and sign a new token
let signed_token = UnsignedToken::new(claims).sign(&secret_key).unwrap();

// serialize the token.
let token = signed_token.to_string();
// "v3.public..."

// serialize the public key.
let key = public_key.to_string();
// "k3.public..."
use paseto_v3::SignedToken;
use paseto_v3::key::PublicKey;
use paseto_json::{RegisteredClaims, Time, HasExpiry, FromIssuer, ForSubject, Validate};

// parse the token
let signed_token: SignedToken<RegisteredClaims> = token.parse().unwrap();

// parse the key
let public_key: PublicKey = key.parse().unwrap();

// verify the token signature and validate the claims.
let validation = Time::valid_now()
    .and_then(HasExpiry)
    .and_then(FromIssuer("https://paseto.conrad.cafe/"))
    .and_then(ForSubject("conradludgate"));
let verified_token = signed_token.verify(&public_key, &validation).unwrap();

Dependencies

~1.4–2.9MB
~56K SLoC