Struct KeyRegistry

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

Thread-safe registry of trusted verification keys, keyed by kid.

The registry supports key rotation via Self::rotate: when a new key is added under the same kid, the old key is preserved for the grace period so tokens signed by the old key continue to verify during the cutover.

Bounded by DEFAULT_KEY_KID_CAP distinct kids. When the cap is reached, Self::add and Self::rotate evict the oldest kid before inserting a new one. This prevents a misbehaving IdP with thousands of distinct kids from growing the registry without bound.

Implementations§

Source§

impl KeyRegistry

Source

pub fn new() -> KeyRegistry

Construct an empty registry.

Source

pub fn with_cap(cap: usize) -> KeyRegistry

Construct a registry with a custom kid cap (used in tests).

Source

pub fn cap(&self) -> usize

Source

pub fn add(&self, kid: impl Into<String>, alg: Algorithm, key: KeyMaterial)

Register a key. Replaces any existing active key with the same kid and alg (grace-window keys from a rotation are preserved). If the registry is at its cap, the oldest kid is evicted first.

Source

pub fn rotate( &self, kid: impl Into<String>, alg: Algorithm, key: KeyMaterial, grace: Duration, )

Register a new key under the same kid, marking the previous key as in grace for the given duration.

Source

pub fn get(&self, kid: &str, alg: Algorithm) -> Vec<KeyMaterial>

Look up a key by kid and alg. Returns all matching keys that have not yet exhausted their grace period. Returns an empty Vec if no matching key is found (caller decides the error mapping).

Source

pub fn contains(&self, kid: &str) -> bool

Returns true if a key with this kid is registered (any algorithm).

Source

pub fn kid_count(&self) -> usize

Number of distinct kids registered.

Trait Implementations§

Source§

impl Debug for KeyRegistry

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for KeyRegistry

Source§

fn default() -> KeyRegistry

Returns the “default value” for a type. 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,