Skip to main content

Parameters

Struct Parameters 

Source
pub struct Parameters<'a> { /* private fields */ }
Expand description

Original PSS schema values, not algorithm support or signature validity.

Implementations§

Source§

impl<'a> Parameters<'a>

Source

pub fn profile<W: Work>(&self, execution: &W) -> Result<Resolution<Profile<'a>>>

Interprets already decoded fields without a second PSS schema pass.

Written digests reuse the shared digest resolver (SHA-1/SHA-2/SHA3); schema defaults impose SHA-1 without a fabricated identifier. MGF1 may use a different digest from the message. Unknown digests/mask functions or nonnegative trailers other than 1 are Unsupported, never a key mismatch. Recognition does not promise backend support. Negative trailers and invalid known digest parameters are located malformed errors. Original fields remain available for inspection. Strict versus recoverable DER spelling is determined by the caller’s earlier pss::read or pss::inspect; projection does not erase faults or turn an inspection result into conforming evidence.

§Errors

Located malformed fields or terminal source/current resource refusal.

§Examples
use std::sync::Arc;
use structured_asn1::{Parser, digest::Resolution, memory::{Memory, MemoryAccount}};
use structured_pkix::algorithm::{self, digest, pss};
let parser = Parser::ber(Memory::new(Arc::new(MemoryAccount::new(4096, 4096))));
// id-RSASSA-PSS, empty parameters: SHA1, MGF1-SHA1, salt 20, trailer 1.
let bytes = b"\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x0a\x30\x00";
let mut reader = parser.read(bytes, 400).unwrap();
let element = reader.next_element().unwrap().unwrap();
let identifier = algorithm::read(&reader, &element, "signatureAlgorithm")?;
let fields = pss::read(identifier, parser.memory())?.unwrap();
let current = Memory::new(Arc::new(MemoryAccount::new(0, 4096)));
let Resolution::Supported(profile) = fields.profile(&current)? else { panic!("PSS") };
assert_eq!(profile.hash(), digest::Algorithm::Sha1);
assert_eq!(profile.salt().as_u64(), Some(20));
assert!(profile.allows(&profile, &current)?);
Source§

impl<'a> Parameters<'a>

Source

pub fn element(self) -> Element<'a>

Complete original parameter SEQUENCE, without copies or normalization.

Source

pub fn hash(self) -> Option<Written<'a, AlgorithmIdentifier<'a>>>

Written hash identifier; None is the schema’s SHA-1 default.

Source

pub fn mask(self) -> Mask<'a>

Mask identity and original MGF1 hash, including omitted default.

Source

pub fn salt(self) -> Number<'a>

Salt octet length (default 20, independently of the selected hash). Its applicability as an exact signature length or key minimum is a caller role decision (RFC4055 §3.3); no backend maximum is imposed here.

Source

pub fn trailer(self) -> Number<'a>

Trailer number (default 1). Other numbers are retained for inspection; RFC8017 A.2.3 defines support only for trailer 1, not other schemes.

Trait Implementations§

Source§

impl<'a> Clone for Parameters<'a>

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl<'a> Copy for Parameters<'a>

Source§

impl<'a> Debug for Parameters<'a>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> !RefUnwindSafe for Parameters<'a>

§

impl<'a> !Send for Parameters<'a>

§

impl<'a> !Sync for Parameters<'a>

§

impl<'a> !UnwindSafe for Parameters<'a>

§

impl<'a> Freeze for Parameters<'a>

§

impl<'a> Unpin for Parameters<'a>

§

impl<'a> UnsafeUnpin for Parameters<'a>

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, 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> 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 = !

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

fn try_from(value: U) -> Result<T, !>

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.