paseto_v4/
lib.rs

1//! PASETO v4 (RustCrypto)
2//!
3//! ```
4//! use paseto_v4::{SignedToken, UnsignedToken, SecretKey, PublicKey};
5//! use paseto_json::{RegisteredClaims, Time, HasExpiry, FromIssuer, ForSubject, Validate};
6//! use std::time::Duration;
7//!
8//! // create a new keypair
9//! let secret_key = SecretKey::random().unwrap();
10//! let public_key = secret_key.public_key();
11//!
12//! // create a set of token claims
13//! let claims = RegisteredClaims::now(Duration::from_secs(3600))
14//!     .from_issuer("https://paseto.conrad.cafe/".to_string())
15//!     .for_subject("conradludgate".to_string());
16//!
17//! // create and sign a new token
18//! let signed_token = UnsignedToken::new(claims).sign(&secret_key).unwrap();
19//!
20//! // serialize the token.
21//! let token = signed_token.to_string();
22//! // "v4.public.eyJpc3MiOiJodHRwczovL3Bhc2V0by5jb25yYWQuY2FmZS8iLCJzdWIiOiJjb25yYWRsdWRnYXRlIiwiYXVkIjpudWxsLCJleHAiOiIyMDI1LTA5LTIwVDEyOjAxOjEzLjcyMjQ3OVoiLCJuYmYiOiIyMDI1LTA5LTIwVDExOjAxOjEzLjcyMjQ3OVoiLCJpYXQiOiIyMDI1LTA5LTIwVDExOjAxOjEzLjcyMjQ3OVoiLCJqdGkiOm51bGx9N7O1CAXQpQ3rpxhq6xFZt32z27VSL8suiek38-5W4LRGr1tDmKcP0_xrlp5-kdE6o7B_K8KU-6Fwmu0hzrkiDQ"
23//!
24//! // serialize the public key.
25//! let key = public_key.to_string();
26//! // "k4.public.xRPdFzRvXY-H-6L3S2I3_TmdMKu6XwLKLSR10lZ-yfk"
27//!
28//! // ...
29//!
30//! // parse the token
31//! let signed_token: SignedToken<RegisteredClaims> = token.parse().unwrap();
32//!
33//! // parse the key
34//! let public_key: PublicKey = key.parse().unwrap();
35//!
36//! // verify the token signature and validate the claims.
37//! let validation = Time::valid_now()
38//!     .and_then(HasExpiry)
39//!     .and_then(FromIssuer("https://paseto.conrad.cafe/"))
40//!     .and_then(ForSubject("conradludgate"));
41//! let verified_token = signed_token.verify(&public_key, &validation).unwrap();
42//! ```
43#![no_std]
44#![forbid(unsafe_code)]
45
46extern crate alloc;
47
48/// Low level implementation primitives.
49pub mod core;
50
51pub use paseto_core::PasetoError;
52
53/// A token with publically readable data, but not yet verified
54#[cfg(feature = "verifying")]
55pub type SignedToken<M, F = ()> = paseto_core::SignedToken<core::V4, M, F>;
56
57/// A token with secret data
58#[cfg(feature = "decrypting")]
59pub type EncryptedToken<M, F = ()> = paseto_core::EncryptedToken<core::V4, M, F>;
60
61/// A [`SignedToken`] that has been verified
62#[cfg(feature = "verifying")]
63pub type UnsignedToken<M, F = ()> = paseto_core::UnsignedToken<core::V4, M, F>;
64
65/// An [`EncryptedToken`] that has been decrypted
66#[cfg(feature = "decrypting")]
67pub type UnencryptedToken<M, F = ()> = paseto_core::UnencryptedToken<core::V4, M, F>;
68
69/// Private key used for [`encryption`](UnencryptedToken::encrypt) and [`decryptiom`](EncryptedToken::decrypt)
70#[cfg(feature = "decrypting")]
71pub type LocalKey = paseto_core::LocalKey<core::V4>;
72
73/// Public key used for signature [`verification`](SignedToken::verify)
74#[cfg(feature = "verifying")]
75pub type PublicKey = paseto_core::PublicKey<core::V4>;
76
77/// Private key used for token [`signing`](UnsignedToken::sign)
78#[cfg(feature = "signing")]
79pub type SecretKey = paseto_core::SecretKey<core::V4>;
80
81/// A plaintext encoding of a key.
82pub type KeyText<K> = paseto_core::paserk::KeyText<core::V4, K>;
83
84/// A short ID for a key.
85#[cfg(feature = "id")]
86pub type KeyId<K> = paseto_core::paserk::KeyId<core::V4, K>;
87
88/// An asymmetrically encrypted [`LocalKey`].
89#[cfg(feature = "pke")]
90pub type SealedKey = paseto_core::paserk::SealedKey<core::V4>;
91
92/// An password encrypted [`LocalKey`].
93#[cfg(feature = "pbkw")]
94pub type PasswordWrappedLocalKey =
95    paseto_core::paserk::PasswordWrappedKey<core::V4, paseto_core::version::Local>;
96
97/// An password encrypted [`SecretKey`].
98#[cfg(all(feature = "pbkw", feature = "signing"))]
99pub type PasswordWrappedSecretKey =
100    paseto_core::paserk::PasswordWrappedKey<core::V4, paseto_core::version::Secret>;
101
102/// An password encrypted [`LocalKey`].
103#[cfg(feature = "pie-wrap")]
104pub type PieWrappedLocalKey =
105    paseto_core::paserk::PieWrappedKey<core::V4, paseto_core::version::Local>;
106
107/// An password encrypted [`SecretKey`].
108#[cfg(all(feature = "pie-wrap", feature = "signing"))]
109pub type PieWrappedSecretKey =
110    paseto_core::paserk::PieWrappedKey<core::V4, paseto_core::version::Secret>;