Struct x509_parser::x509::SubjectPublicKeyInfo
source · pub struct SubjectPublicKeyInfo<'a> {
pub algorithm: AlgorithmIdentifier<'a>,
pub subject_public_key: BitString<'a>,
pub raw: &'a [u8],
}
Fields§
§algorithm: AlgorithmIdentifier<'a>
§subject_public_key: BitString<'a>
§raw: &'a [u8]
A raw unparsed PKIX, ASN.1 DER form (see RFC 5280, Section 4.1).
Note: use the Self::parsed()
function to parse this object.
Implementations§
source§impl<'a> SubjectPublicKeyInfo<'a>
impl<'a> SubjectPublicKeyInfo<'a>
sourcepub fn parsed(&self) -> Result<PublicKey<'_>, X509Error>
pub fn parsed(&self) -> Result<PublicKey<'_>, X509Error>
Attempt to parse the public key, and return the parsed version or an error
Examples found in repository?
examples/print-cert.rs (line 295)
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> Clone for SubjectPublicKeyInfo<'a>
impl<'a> Clone for SubjectPublicKeyInfo<'a>
source§fn clone(&self) -> SubjectPublicKeyInfo<'a>
fn clone(&self) -> SubjectPublicKeyInfo<'a>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<'a> Debug for SubjectPublicKeyInfo<'a>
impl<'a> Debug for SubjectPublicKeyInfo<'a>
source§impl<'a> FromDer<'a, X509Error> for SubjectPublicKeyInfo<'a>
impl<'a> FromDer<'a, X509Error> for SubjectPublicKeyInfo<'a>
source§fn from_der(i: &'a [u8]) -> X509Result<'_, Self>
fn from_der(i: &'a [u8]) -> X509Result<'_, Self>
Parse the SubjectPublicKeyInfo struct portion of a DER-encoded X.509 Certificate
source§impl<'a> PartialEq for SubjectPublicKeyInfo<'a>
impl<'a> PartialEq for SubjectPublicKeyInfo<'a>
source§fn eq(&self, other: &SubjectPublicKeyInfo<'a>) -> bool
fn eq(&self, other: &SubjectPublicKeyInfo<'a>) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.impl<'a> StructuralPartialEq for SubjectPublicKeyInfo<'a>
Auto Trait Implementations§
impl<'a> RefUnwindSafe for SubjectPublicKeyInfo<'a>
impl<'a> Send for SubjectPublicKeyInfo<'a>
impl<'a> Sync for SubjectPublicKeyInfo<'a>
impl<'a> Unpin for SubjectPublicKeyInfo<'a>
impl<'a> UnwindSafe for SubjectPublicKeyInfo<'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