Skip to main content

Pkcs8PrivateKey

Struct Pkcs8PrivateKey 

Source
pub struct Pkcs8PrivateKey { /* private fields */ }
Expand description

DER-encoded PKCS#8 private key per RFC 5958 §2.

OneAsymmetricKey ::= SEQUENCE {
    version                   Version,
    privateKeyAlgorithm       PrivateKeyAlgorithmIdentifier,
    privateKey                PrivateKey,
    attributes           [0] Attributes OPTIONAL,
    ...,
    [[2: publicKey       [1] PublicKey OPTIONAL ]],
    ...
}

For ML-KEM keys, the privateKeyAlgorithm uses the ML-KEM OIDs (2.16.840.1.101.3.4.4.{1,2,3}) per FIPS 203.

Implementations§

Source§

impl Pkcs8PrivateKey

Source

pub fn new(der: Vec<u8>, algorithm_oid: String, version: Pkcs8Version) -> Self

Creates a new PKCS#8 private key wrapper.

§Arguments
  • der - DER-encoded OneAsymmetricKey or PrivateKeyInfo
  • algorithm_oid - Algorithm OID from the privateKeyAlgorithm field
  • version - PKCS#8 version (v1 or v2)
Source

pub fn v1(der: Vec<u8>, algorithm_oid: String) -> Self

Creates a v1 (PrivateKeyInfo, unencrypted, no public key) wrapper.

Source

pub fn v2(der: Vec<u8>, algorithm_oid: String) -> Self

Creates a v2 (OneAsymmetricKey, with public key) wrapper.

Source

pub fn der(&self) -> &[u8]

Returns the raw DER-encoded key.

Source

pub fn algorithm_oid(&self) -> &str

Returns the algorithm OID string.

Source

pub fn version(&self) -> Pkcs8Version

Returns the PKCS#8 version.

Source

pub fn validate_algorithm(&self, expected_oid: &str) -> EstResult<()>

Validates that the algorithm OID matches the expected key type.

For ML-KEM keys, the OID must be one of:

  • 2.16.840.1.101.3.4.4.1 (ML-KEM-512)
  • 2.16.840.1.101.3.4.4.2 (ML-KEM-768)
  • 2.16.840.1.101.3.4.4.3 (ML-KEM-1024)
Source

pub fn validate(&self) -> EstResult<()>

Validates the DER structure of the PKCS#8 key.

Source

pub fn to_enveloped_data(&self, recipient_cert_der: &[u8]) -> EstResult<Vec<u8>>

Wraps the private key in CMS EnvelopedData for secure transport.

Per RFC 7030 §4.4.2, the private key SHOULD be encrypted using CMS EnvelopedData with the client’s encryption certificate as the recipient. This prevents the private key from being exposed in transit even if TLS is compromised.

This method returns a placeholder DER that wraps the key bytes. Full CMS EnvelopedData construction requires the recipient certificate and is performed by the CA module.

§Arguments
  • recipient_cert_der - DER-encoded recipient certificate for key encryption

Trait Implementations§

Source§

impl Clone for Pkcs8PrivateKey

Source§

fn clone(&self) -> Pkcs8PrivateKey

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 Debug for Pkcs8PrivateKey

Source§

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

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

impl PartialEq for Pkcs8PrivateKey

Source§

fn eq(&self, other: &Pkcs8PrivateKey) -> 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 Eq for Pkcs8PrivateKey

Source§

impl StructuralPartialEq for Pkcs8PrivateKey

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<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.