pub struct RSAPublicKey<'a> {
pub modulus: &'a [u8],
pub exponent: &'a [u8],
}
Expand description
RSA public Key, defined in rfc3279
Fields§
§modulus: &'a [u8]
Raw bytes of the modulus
This possibly includes a leading 0 if the MSB is 1
exponent: &'a [u8]
Raw bytes of the exponent
This possibly includes a leading 0 if the MSB is 1
Implementations§
Source§impl RSAPublicKey<'_>
impl RSAPublicKey<'_>
Sourcepub fn try_exponent(&self) -> Result<u64, X509Error>
pub fn try_exponent(&self) -> Result<u64, X509Error>
Attempt to convert exponent to u64
Returns an error if integer is too large, empty, or negative
Examples found in repository?
examples/print-cert.rs (line 302)
292fn print_x509_ski(public_key: &SubjectPublicKeyInfo) {
293 println!(" Public Key Algorithm:");
294 print_x509_digest_algorithm(&public_key.algorithm, 6);
295 match public_key.parsed() {
296 Ok(PublicKey::RSA(rsa)) => {
297 println!(" RSA Public Key: ({} bit)", rsa.key_size());
298 // print_hex_dump(rsa.modulus, 1024);
299 for l in format_number_to_hex_with_colon(rsa.modulus, 16) {
300 println!(" {}", l);
301 }
302 if let Ok(e) = rsa.try_exponent() {
303 println!(" exponent: 0x{:x} ({})", e, e);
304 } else {
305 println!(" exponent: <INVALID>:");
306 print_hex_dump(rsa.exponent, 32);
307 }
308 }
309 Ok(PublicKey::EC(ec)) => {
310 println!(" EC Public Key: ({} bit)", ec.key_size());
311 for l in format_number_to_hex_with_colon(ec.data(), 16) {
312 println!(" {}", l);
313 }
314 // // identify curve
315 // if let Some(params) = &public_key.algorithm.parameters {
316 // let curve_oid = params.as_oid();
317 // let curve = curve_oid
318 // .map(|oid| {
319 // oid_registry()
320 // .get(oid)
321 // .map(|entry| entry.sn())
322 // .unwrap_or("<UNKNOWN>")
323 // })
324 // .unwrap_or("<ERROR: NOT AN OID>");
325 // println!(" Curve: {}", curve);
326 // }
327 }
328 Ok(PublicKey::DSA(y)) => {
329 println!(" DSA Public Key: ({} bit)", 8 * y.len());
330 for l in format_number_to_hex_with_colon(y, 16) {
331 println!(" {}", l);
332 }
333 }
334 Ok(PublicKey::GostR3410(y)) => {
335 println!(" GOST R 34.10-94 Public Key: ({} bit)", 8 * y.len());
336 for l in format_number_to_hex_with_colon(y, 16) {
337 println!(" {}", l);
338 }
339 }
340 Ok(PublicKey::GostR3410_2012(y)) => {
341 println!(" GOST R 34.10-2012 Public Key: ({} bit)", 8 * y.len());
342 for l in format_number_to_hex_with_colon(y, 16) {
343 println!(" {}", l);
344 }
345 }
346 Ok(PublicKey::Unknown(b)) => {
347 println!(" Unknown key type");
348 print_hex_dump(b, 256);
349 if let Ok((rem, res)) = der_parser::parse_der(b) {
350 eprintln!("rem: {} bytes", rem.len());
351 eprintln!("{:?}", res);
352 } else {
353 eprintln!(" <Could not parse key as DER>");
354 }
355 }
356 Err(_) => {
357 println!(" INVALID PUBLIC KEY");
358 }
359 }
360 // dbg!(&public_key);
361 // todo!();
362}
Sourcepub fn key_size(&self) -> usize
pub fn key_size(&self) -> usize
Return the key size (in bits) or 0
Examples found in repository?
examples/print-cert.rs (line 297)
292fn print_x509_ski(public_key: &SubjectPublicKeyInfo) {
293 println!(" Public Key Algorithm:");
294 print_x509_digest_algorithm(&public_key.algorithm, 6);
295 match public_key.parsed() {
296 Ok(PublicKey::RSA(rsa)) => {
297 println!(" RSA Public Key: ({} bit)", rsa.key_size());
298 // print_hex_dump(rsa.modulus, 1024);
299 for l in format_number_to_hex_with_colon(rsa.modulus, 16) {
300 println!(" {}", l);
301 }
302 if let Ok(e) = rsa.try_exponent() {
303 println!(" exponent: 0x{:x} ({})", e, e);
304 } else {
305 println!(" exponent: <INVALID>:");
306 print_hex_dump(rsa.exponent, 32);
307 }
308 }
309 Ok(PublicKey::EC(ec)) => {
310 println!(" EC Public Key: ({} bit)", ec.key_size());
311 for l in format_number_to_hex_with_colon(ec.data(), 16) {
312 println!(" {}", l);
313 }
314 // // identify curve
315 // if let Some(params) = &public_key.algorithm.parameters {
316 // let curve_oid = params.as_oid();
317 // let curve = curve_oid
318 // .map(|oid| {
319 // oid_registry()
320 // .get(oid)
321 // .map(|entry| entry.sn())
322 // .unwrap_or("<UNKNOWN>")
323 // })
324 // .unwrap_or("<ERROR: NOT AN OID>");
325 // println!(" Curve: {}", curve);
326 // }
327 }
328 Ok(PublicKey::DSA(y)) => {
329 println!(" DSA Public Key: ({} bit)", 8 * y.len());
330 for l in format_number_to_hex_with_colon(y, 16) {
331 println!(" {}", l);
332 }
333 }
334 Ok(PublicKey::GostR3410(y)) => {
335 println!(" GOST R 34.10-94 Public Key: ({} bit)", 8 * y.len());
336 for l in format_number_to_hex_with_colon(y, 16) {
337 println!(" {}", l);
338 }
339 }
340 Ok(PublicKey::GostR3410_2012(y)) => {
341 println!(" GOST R 34.10-2012 Public Key: ({} bit)", 8 * y.len());
342 for l in format_number_to_hex_with_colon(y, 16) {
343 println!(" {}", l);
344 }
345 }
346 Ok(PublicKey::Unknown(b)) => {
347 println!(" Unknown key type");
348 print_hex_dump(b, 256);
349 if let Ok((rem, res)) = der_parser::parse_der(b) {
350 eprintln!("rem: {} bytes", rem.len());
351 eprintln!("{:?}", res);
352 } else {
353 eprintln!(" <Could not parse key as DER>");
354 }
355 }
356 Err(_) => {
357 println!(" INVALID PUBLIC KEY");
358 }
359 }
360 // dbg!(&public_key);
361 // todo!();
362}
Trait Implementations§
Source§impl<'a> Debug for RSAPublicKey<'a>
impl<'a> Debug for RSAPublicKey<'a>
Source§impl<'a> FromDer<'a, X509Error> for RSAPublicKey<'a>
impl<'a> FromDer<'a, X509Error> for RSAPublicKey<'a>
Source§fn from_der(bytes: &'a [u8]) -> X509Result<'a, Self>
fn from_der(bytes: &'a [u8]) -> X509Result<'a, Self>
Attempt to parse input bytes into a DER object (enforcing constraints)
Source§impl<'a> PartialEq for RSAPublicKey<'a>
impl<'a> PartialEq for RSAPublicKey<'a>
impl<'a> Eq for RSAPublicKey<'a>
impl<'a> StructuralPartialEq for RSAPublicKey<'a>
Auto Trait Implementations§
impl<'a> Freeze for RSAPublicKey<'a>
impl<'a> RefUnwindSafe for RSAPublicKey<'a>
impl<'a> Send for RSAPublicKey<'a>
impl<'a> Sync for RSAPublicKey<'a>
impl<'a> Unpin for RSAPublicKey<'a>
impl<'a> UnwindSafe for RSAPublicKey<'a>
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more