Skip to main content

CryptoVerifier

Struct CryptoVerifier 

Source
pub struct CryptoVerifier { /* private fields */ }
Expand description

Algorithm-agnostic license verifier that automatically selects the correct algorithm

This verifier uses the algorithm identifier stored in the license to select the appropriate signature verification algorithm. This enables support for multiple signature algorithms (RSA-SHA256, Ed25519, etc.) with automatic detection.

§Example

use licenz_core::verifier::CryptoVerifier;
use std::collections::HashMap;

// Create verifier with multiple public keys
let mut keys = HashMap::new();
keys.insert("RSA-SHA256".to_string(), rsa_public_key_pem.to_string());
keys.insert("Ed25519".to_string(), ed25519_public_key_pem.to_string());

let verifier = CryptoVerifier::new(keys);
let result = verifier.validate(&license);

Implementations§

Source§

impl CryptoVerifier

Source

pub fn new(public_keys: HashMap<String, String>) -> Self

Create a new crypto verifier with multiple public keys

§Arguments
  • public_keys - Map of algorithm ID to public key PEM
Source

pub fn from_pem(pem: &str) -> Result<Self>

Create a verifier from a single PEM string, auto-detecting the algorithm

This tries to parse the key as RSA first (for backward compatibility), then falls back to Ed25519.

Source

pub fn from_pem_file(path: &Path) -> Result<Self>

Create a verifier from a PEM file

Source

pub fn with_public_key(self, algorithm_id: &str, pem: &str) -> Self

Add a public key for a specific algorithm

Source

pub fn with_hardware_info(self, info: HardwareInfo) -> Self

Set custom hardware info (useful for testing or manual override)

Source

pub fn with_hardware_environment( self, env: Arc<dyn HardwareEnvironment>, ) -> Self

Use a custom HardwareEnvironment.

Source

pub fn load_license(&self, path: &Path) -> Result<SignedLicense>

Load a license from a file (auto-detects format)

Source

pub fn parse_license(&self, data: &[u8]) -> Result<SignedLicense>

Parse a license from bytes (auto-detects format)

Source

pub fn verify_signature(&self, license: &SignedLicense) -> Result<()>

Verify the cryptographic signature of a license

Automatically selects the algorithm based on the license’s algorithm field.

Source

pub fn verify_expiration(&self, license: &SignedLicense) -> Result<()>

Verify that the license has not expired

Source

pub fn verify_hardware(&self, license: &SignedLicense) -> Result<()>

Verify hardware binding

Source

pub fn validate(&self, license: &SignedLicense) -> Result<()>

Perform full license validation

This verifies:

  1. Cryptographic signature (algorithm auto-selected from license)
  2. Expiration date
  3. Hardware binding (if enabled)
Source

pub fn load_and_validate(&self, path: &Path) -> Result<SignedLicense>

Load and validate a license from a file

Source

pub fn validate_detailed(&self, license: &SignedLicense) -> ValidationResult

Perform detailed validation and return a result

Trait Implementations§

Source§

impl Clone for CryptoVerifier

Source§

fn clone(&self) -> CryptoVerifier

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more