paseto-v4-sodium 0.1.0-rc.10

PASETO/PASERK V4 based on libsodium
Documentation
//! PASETO v4 (libsodium)
//!
//! ```
//! use paseto_v4_sodium::{SignedToken, UnsignedToken, SecretKey, PublicKey};
//! use paseto_json::{RegisteredClaims, Time, HasExpiry, FromIssuer, ForSubject, Validate};
//! use std::time::Duration;
//!
//! // init libsodium
//! paseto_v4_sodium::ensure_init().expect("libsodium should initialise successfully");
//!
//! // 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();
//! // "v4.public.eyJpc3MiOiJodHRwczovL3Bhc2V0by5jb25yYWQuY2FmZS8iLCJzdWIiOiJjb25yYWRsdWRnYXRlIiwiYXVkIjpudWxsLCJleHAiOiIyMDI1LTA5LTIwVDEyOjAxOjEzLjcyMjQ3OVoiLCJuYmYiOiIyMDI1LTA5LTIwVDExOjAxOjEzLjcyMjQ3OVoiLCJpYXQiOiIyMDI1LTA5LTIwVDExOjAxOjEzLjcyMjQ3OVoiLCJqdGkiOm51bGx9N7O1CAXQpQ3rpxhq6xFZt32z27VSL8suiek38-5W4LRGr1tDmKcP0_xrlp5-kdE6o7B_K8KU-6Fwmu0hzrkiDQ"
//!
//! // serialize the public key.
//! let key = public_key.to_string();
//! // "k4.public.xRPdFzRvXY-H-6L3S2I3_TmdMKu6XwLKLSR10lZ-yfk"
//!
//! // ...
//!
//! // 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();
//! ```
#![forbid(unsafe_code)]

#[cfg(feature = "zeroize")]
macro_rules! secret {
    ($value:expr) => {
        zeroize::Zeroizing::new($value)
    };
}
#[cfg(not(feature = "zeroize"))]
macro_rules! secret {
    ($value:expr) => {
        $value
    };
}

/// Low level implementation primitives.
pub mod core;

pub use paseto_core::PasetoError;

/// A token with publically readable data, but not yet verified
pub type SignedToken<M, F = ()> = paseto_core::SignedToken<core::V4, M, F>;
/// A token with secret data
pub type EncryptedToken<M, F = ()> = paseto_core::EncryptedToken<core::V4, M, F>;
/// A [`SignedToken`] that has been verified
pub type UnsignedToken<M, F = ()> = paseto_core::UnsignedToken<core::V4, M, F>;
/// An [`EncryptedToken`] that has been decrypted
pub type UnencryptedToken<M, F = ()> = paseto_core::UnencryptedToken<core::V4, M, F>;

/// Private key used for [`encryption`](UnencryptedToken::encrypt) and [`decryption`](EncryptedToken::decrypt)
pub type LocalKey = paseto_core::LocalKey<core::V4>;
/// Public key used for signature [`verification`](SignedToken::verify)
pub type PublicKey = paseto_core::PublicKey<core::V4>;
/// Private key used for token [`signing`](UnsignedToken::sign)
pub type SecretKey = paseto_core::SecretKey<core::V4>;

/// A short ID for a key.
pub type KeyId<K> = paseto_core::paserk::KeyId<core::V4, K>;
/// A plaintext encoding of a key.
pub type KeyText<K> = paseto_core::paserk::KeyText<core::V4, K>;

/// Public key used for [`sealing`](LocalKey::seal) a [`LocalKey`] for a recipient.
pub type PkePublicKey = paseto_core::PkePublicKey<core::V4>;
/// Private key used for [`unsealing`](SealedKey::unseal) a sealed [`LocalKey`].
pub type PkeSecretKey = paseto_core::PkeSecretKey<core::V4>;

/// An asymmetrically encrypted [`LocalKey`].
pub type SealedKey = paseto_core::paserk::SealedKey<core::V4>;

pub use libsodium_rs::ensure_init;