Skip to main content

Rs256Signer

Struct Rs256Signer 

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

Signs RS256 JWTs with an RSA private key.

Google’s service-account JSON ships its key as PKCS#8 (-----BEGIN PRIVATE KEY-----); older exports and other providers use the legacy PKCS#1 form (-----BEGIN RSA PRIVATE KEY-----). Self::from_pem takes either, so a venture never has to know which it was handed.

PKCS#1 v1.5 signing is deterministic and takes no RNG, which is what lets this run on a Workers isolate. That is a portability property, not a security one: rsa 0.9 blinds the private-key modexp only in sign_with_rng, so signing here is unblinded and carries no timing countermeasure. It is safe in this crate because there is no decryption oracle, the claims are ours rather than an attacker’s, and the JWT is minted off the request path where nobody can time it — see the RUSTSEC-2023-0071 acceptance in deny.toml. Signing attacker-supplied bytes, or signing where the duration can be observed, re-opens that.

Implementations§

Source§

impl Rs256Signer

Source

pub fn from_pkcs8_pem(pem: &str) -> Result<Self, KeyError>

Parses a PKCS#8 PEM RSA private key — the form Google’s service-account JSON carries in private_key.

§Errors

KeyError::Parse if the PEM is not a PKCS#8 RSA private key.

Source

pub fn from_pkcs1_pem(pem: &str) -> Result<Self, KeyError>

Parses the legacy PKCS#1 PEM form (-----BEGIN RSA PRIVATE KEY-----).

§Errors

KeyError::Parse if the PEM is not a PKCS#1 RSA private key.

Source

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

Parses either PEM form, choosing by the label so the error a caller sees names the format they actually supplied.

§Errors

KeyError::Parse if the PEM is neither a PKCS#8 nor a PKCS#1 RSA private key.

Source

pub fn sign_jwt(&self, header: &Value, claims: &Value) -> String

Signs header/claims into a compact JWS.

Trait Implementations§

Source§

impl Debug for Rs256Signer

Source§

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

Never prints the key.

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

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

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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

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.
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