SubjectPublicKeyInfo

Struct 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 SubjectPublicKeyInfo<'_>

Source

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

Trait Implementations§

Source§

impl<'a> Clone for SubjectPublicKeyInfo<'a>

Source§

fn clone(&self) -> SubjectPublicKeyInfo<'a>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a> Debug for SubjectPublicKeyInfo<'a>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'a> FromDer<'a, X509Error> for SubjectPublicKeyInfo<'a>

Source§

fn from_der(i: &'a [u8]) -> X509Result<'a, Self>

Parse the SubjectPublicKeyInfo struct portion of a DER-encoded X.509 Certificate

Source§

impl<'a> PartialEq for SubjectPublicKeyInfo<'a>

Source§

fn eq(&self, other: &SubjectPublicKeyInfo<'a>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a> StructuralPartialEq for SubjectPublicKeyInfo<'a>

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<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.