Struct x509_parser::public_key::RSAPublicKey
source · 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<'a> RSAPublicKey<'a>
impl<'a> RSAPublicKey<'a>
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)
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
fn print_x509_ski(public_key: &SubjectPublicKeyInfo) {
println!(" Public Key Algorithm:");
print_x509_digest_algorithm(&public_key.algorithm, 6);
match public_key.parsed() {
Ok(PublicKey::RSA(rsa)) => {
println!(" RSA Public Key: ({} bit)", rsa.key_size());
// print_hex_dump(rsa.modulus, 1024);
for l in format_number_to_hex_with_colon(rsa.modulus, 16) {
println!(" {}", l);
}
if let Ok(e) = rsa.try_exponent() {
println!(" exponent: 0x{:x} ({})", e, e);
} else {
println!(" exponent: <INVALID>:");
print_hex_dump(rsa.exponent, 32);
}
}
Ok(PublicKey::EC(ec)) => {
println!(" EC Public Key: ({} bit)", ec.key_size());
for l in format_number_to_hex_with_colon(ec.data(), 16) {
println!(" {}", l);
}
// // identify curve
// if let Some(params) = &public_key.algorithm.parameters {
// let curve_oid = params.as_oid();
// let curve = curve_oid
// .map(|oid| {
// oid_registry()
// .get(oid)
// .map(|entry| entry.sn())
// .unwrap_or("<UNKNOWN>")
// })
// .unwrap_or("<ERROR: NOT AN OID>");
// println!(" Curve: {}", curve);
// }
}
Ok(PublicKey::DSA(y)) => {
println!(" DSA Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::GostR3410(y)) => {
println!(" GOST R 34.10-94 Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::GostR3410_2012(y)) => {
println!(" GOST R 34.10-2012 Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::Unknown(b)) => {
println!(" Unknown key type");
print_hex_dump(b, 256);
if let Ok((rem, res)) = der_parser::parse_der(b) {
eprintln!("rem: {} bytes", rem.len());
eprintln!("{:?}", res);
} else {
eprintln!(" <Could not parse key as DER>");
}
}
Err(_) => {
println!(" INVALID PUBLIC KEY");
}
}
// dbg!(&public_key);
// todo!();
}
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)
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
fn print_x509_ski(public_key: &SubjectPublicKeyInfo) {
println!(" Public Key Algorithm:");
print_x509_digest_algorithm(&public_key.algorithm, 6);
match public_key.parsed() {
Ok(PublicKey::RSA(rsa)) => {
println!(" RSA Public Key: ({} bit)", rsa.key_size());
// print_hex_dump(rsa.modulus, 1024);
for l in format_number_to_hex_with_colon(rsa.modulus, 16) {
println!(" {}", l);
}
if let Ok(e) = rsa.try_exponent() {
println!(" exponent: 0x{:x} ({})", e, e);
} else {
println!(" exponent: <INVALID>:");
print_hex_dump(rsa.exponent, 32);
}
}
Ok(PublicKey::EC(ec)) => {
println!(" EC Public Key: ({} bit)", ec.key_size());
for l in format_number_to_hex_with_colon(ec.data(), 16) {
println!(" {}", l);
}
// // identify curve
// if let Some(params) = &public_key.algorithm.parameters {
// let curve_oid = params.as_oid();
// let curve = curve_oid
// .map(|oid| {
// oid_registry()
// .get(oid)
// .map(|entry| entry.sn())
// .unwrap_or("<UNKNOWN>")
// })
// .unwrap_or("<ERROR: NOT AN OID>");
// println!(" Curve: {}", curve);
// }
}
Ok(PublicKey::DSA(y)) => {
println!(" DSA Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::GostR3410(y)) => {
println!(" GOST R 34.10-94 Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::GostR3410_2012(y)) => {
println!(" GOST R 34.10-2012 Public Key: ({} bit)", 8 * y.len());
for l in format_number_to_hex_with_colon(y, 16) {
println!(" {}", l);
}
}
Ok(PublicKey::Unknown(b)) => {
println!(" Unknown key type");
print_hex_dump(b, 256);
if let Ok((rem, res)) = der_parser::parse_der(b) {
eprintln!("rem: {} bytes", rem.len());
eprintln!("{:?}", res);
} else {
eprintln!(" <Could not parse key as DER>");
}
}
Err(_) => {
println!(" INVALID PUBLIC KEY");
}
}
// dbg!(&public_key);
// todo!();
}
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>
source§fn eq(&self, other: &RSAPublicKey<'a>) -> bool
fn eq(&self, other: &RSAPublicKey<'a>) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.impl<'a> Eq for RSAPublicKey<'a>
impl<'a> StructuralPartialEq for RSAPublicKey<'a>
Auto Trait Implementations§
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