use crate::{
arithmetic::bigint,
bits, error,
io::{self, der},
limb,
};
use untrusted;
mod padding;
pub use self::padding::{
RsaEncoding, RSA_PKCS1_SHA256, RSA_PKCS1_SHA384, RSA_PKCS1_SHA512, RSA_PSS_SHA256,
RSA_PSS_SHA384, RSA_PSS_SHA512,
};
const PUBLIC_KEY_PUBLIC_MODULUS_MAX_LEN: usize = bigint::MODULUS_MAX_LIMBS * limb::LIMB_BYTES;
const PRIVATE_KEY_PUBLIC_MODULUS_MAX_BITS: bits::BitLength = bits::BitLength::from_usize_bits(4096);
#[derive(Debug)]
pub struct RsaParameters {
padding_alg: &'static dyn padding::Verification,
min_bits: bits::BitLength,
}
fn parse_public_key(
input: untrusted::Input,
) -> Result<(io::Positive, io::Positive), error::Unspecified> {
input.read_all(error::Unspecified, |input| {
der::nested(input, der::Tag::Sequence, error::Unspecified, |input| {
let n = der::positive_integer(input)?;
let e = der::positive_integer(input)?;
Ok((n, e))
})
})
}
#[derive(Copy, Clone)]
pub enum N {}
unsafe impl bigint::PublicModulus for N {}
pub mod verification;
pub mod signing;