PrivateKeyInfo (Bouncy Castle Library 1.85 API Specification)
Date: 2026-07-12

org.bouncycastle.asn1.pkcs

## Class PrivateKeyInfo

- java.lang.Object
- - org.bouncycastle.asn1.ASN1Object
  - - org.bouncycastle.asn1.pkcs.PrivateKeyInfo

- All Implemented Interfaces:
    ASN1Encodable, Encodable

      public class PrivateKeyInfo
      extends ASN1Object

  RFC 5958

        [IMPLICIT TAGS]

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

        PrivateKeyInfo ::= OneAsymmetricKey

        Version ::= INTEGER { v1(0), v2(1) } (v1, ..., v2)

        PrivateKeyAlgorithmIdentifier ::= AlgorithmIdentifier
                                           { PUBLIC-KEY,
                                             { PrivateKeyAlgorithms } }

        PrivateKey ::= OCTET STRING
                           -- Content varies based on type of key.  The
                           -- algorithm identifier dictates the format of
                           -- the key.

        PublicKey ::= BIT STRING
                           -- Content varies based on type of key.  The
                           -- algorithm identifier dictates the format of
                           -- the key.

        Attributes ::= SET OF Attribute { { OneAsymmetricKeyAttributes } }

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm, ASN1Encodable privateKey)` Construct a PrivateKeyInfo around an ASN.1 structure/primitive.
    `PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm, ASN1Encodable privateKey, ASN1Set attributes)` Construct a PrivateKeyInfo around an ASN.1 structure/primitive with attributes.
    `PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm, ASN1Encodable privateKey, ASN1Set attributes, byte[] publicKey)` Construct a PrivateKeyInfo around an ASN.1 structure/primitive with attributes and the public key.
    `PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm, byte[] privateKey)` Construct a PrivateKeyInfo around a raw encoding.
    `PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm, byte[] privateKey, ASN1Set attributes)` Construct a PrivateKeyInfo around an ASN.1 structure/primitive with attributes.
    `PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm, byte[] privateKey, ASN1Set attributes, byte[] publicKey)` Construct a PrivateKeyInfo around a raw encoding with attributes and the public key.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `ASN1Set` | `getAttributes()`
    `static PrivateKeyInfo` | `getInstance(ASN1TaggedObject obj, boolean explicit)`
    `static PrivateKeyInfo` | `getInstance(java.lang.Object obj)`
    `ASN1OctetString` | `getPrivateKey()`
    `AlgorithmIdentifier` | `getPrivateKeyAlgorithm()`
    `int` | `getPrivateKeyLength()`
    `ASN1BitString` | `getPublicKeyData()` for when the public key is raw bits.
    `ASN1Integer` | `getVersion()`
    `boolean` | `hasPublicKey()` Return true if a public key is present, false otherwise.
    `ASN1Encodable` | `parsePrivateKey()`
    `ASN1Encodable` | `parsePublicKey()` for when the public key is an encoded object - if the bitstring can't be decoded this routine throws an IOException.
    `ASN1Primitive` | `toASN1Primitive()` Method providing a primitive representation of this object suitable for encoding.

    - ### Methods inherited from class org.bouncycastle.asn1.ASN1Object

      `encodeTo, encodeTo, equals, getEncoded, getEncoded, hasEncodedTagValue, hashCode`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### PrivateKeyInfo

          public PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm,
                                byte[] privateKey)
                         throws java.io.IOException

      Construct a PrivateKeyInfo around a raw encoding.
      Parameters:
        `privateKeyAlgorithm` - algorithm identifier for the private key.
        `privateKey` - byte encoding of the private key, used as a raw encoding.
      Throws:
        `java.io.IOException`

    - #### PrivateKeyInfo

          public PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm,
                                ASN1Encodable privateKey)
                         throws java.io.IOException

      Construct a PrivateKeyInfo around an ASN.1 structure/primitive.
      Parameters:
        `privateKeyAlgorithm` - algorithm identifier for the private key.
        `privateKey` - the ASN.1 structure/primitive representing the private key.
      Throws:
        `java.io.IOException` - if encoding the privateKey object into an OCTET STRING fails.

    - #### PrivateKeyInfo

          public PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm,
                                ASN1Encodable privateKey,
                                ASN1Set attributes)
                         throws java.io.IOException

      Construct a PrivateKeyInfo around an ASN.1 structure/primitive with attributes.
      Parameters:
        `privateKeyAlgorithm` - algorithm identifier for the private key.
        `privateKey` - the ASN.1 structure/primitive representing the private key.
        `attributes` - attributes associated with private key.
      Throws:
        `java.io.IOException` - if encoding the privateKey object into an OCTET STRING fails.

    - #### PrivateKeyInfo

          public PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm,
                                byte[] privateKey,
                                ASN1Set attributes)
                         throws java.io.IOException

      Construct a PrivateKeyInfo around an ASN.1 structure/primitive with attributes.
      Parameters:
        `privateKeyAlgorithm` - algorithm identifier for the private key.
        `privateKey` - byte encoding of the private key, used as a raw encoding.
        `attributes` - attributes associated with private key.
      Throws:
        `java.io.IOException` - if encoding the privateKey object into an OCTET STRING fails.

    - #### PrivateKeyInfo

          public PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm,
                                ASN1Encodable privateKey,
                                ASN1Set attributes,
                                byte[] publicKey)
                         throws java.io.IOException

      Construct a PrivateKeyInfo around an ASN.1 structure/primitive with attributes and the public key.
      Parameters:
        `privateKeyAlgorithm` - algorithm identifier for the private key.
        `privateKey` - the ASN.1 structure/primitive representing the private key.
        `attributes` - attributes associated with private key.
        `publicKey` - public key encoding.
      Throws:
        `java.io.IOException` - if encoding the privateKey object into an OCTET STRING fails.

    - #### PrivateKeyInfo

          public PrivateKeyInfo(AlgorithmIdentifier privateKeyAlgorithm,
                                byte[] privateKey,
                                ASN1Set attributes,
                                byte[] publicKey)

      Construct a PrivateKeyInfo around a raw encoding with attributes and the public key.
      Parameters:
        `privateKeyAlgorithm` - algorithm identifier for the private key.
        `privateKey` - byte encoding of the private key, used as a raw encoding.
        `attributes` - attributes associated with private key.
        `publicKey` - public key encoding.

  - ### Method Detail

    - #### getInstance

          public static PrivateKeyInfo getInstance(ASN1TaggedObject obj,
                                                   boolean explicit)

    - #### getInstance

          public static PrivateKeyInfo getInstance(java.lang.Object obj)

    - #### getVersion

          public ASN1Integer getVersion()

    - #### getAttributes

          public ASN1Set getAttributes()

    - #### getPrivateKeyAlgorithm

          public AlgorithmIdentifier getPrivateKeyAlgorithm()

    - #### getPrivateKey

          public ASN1OctetString getPrivateKey()

    - #### getPrivateKeyLength

          public int getPrivateKeyLength()

    - #### parsePrivateKey

          public ASN1Encodable parsePrivateKey()
                                        throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### hasPublicKey

          public boolean hasPublicKey()

      Return true if a public key is present, false otherwise.
      Returns:
        true if public included, otherwise false.

    - #### parsePublicKey

          public ASN1Encodable parsePublicKey()
                                       throws java.io.IOException

      for when the public key is an encoded object - if the bitstring can't be decoded this routine throws an IOException.
      Returns:
        the public key as an ASN.1 primitive.
      Throws:
        `java.io.IOException` - - if the bit string doesn't represent a DER encoded object.

    - #### getPublicKeyData

          public ASN1BitString getPublicKeyData()

      for when the public key is raw bits.
      Returns:
        the public key as the raw bit string...

    - #### toASN1Primitive

          public ASN1Primitive toASN1Primitive()

      Description copied from class: `ASN1Object`
      Method providing a primitive representation of this object suitable for encoding.
      Specified by:
        `toASN1Primitive` in interface `ASN1Encodable`
      Specified by:
        `toASN1Primitive` in class `ASN1Object`
      Returns:
        a primitive representation of this object.