sun.security.pkcs
Class PKCS8Key

java.lang.Object
  extended by sun.security.pkcs.PKCS8Key
All Implemented Interfaces:
Serializable, Key, PrivateKey
Direct Known Subclasses:
DSAPrivateKey

public class PKCS8Key
extends Object
implements PrivateKey

Holds a PKCS#8 key, for example a private key

See Also:
Serialized Form

Field Summary
protected  AlgorithmId algid
           
protected  byte[] encodedKey
           
protected  byte[] key
           
static BigInteger version
           
 
Constructor Summary
PKCS8Key()
          Default constructor.
 
Method Summary
 void decode(byte[] encodedKey)
           
 void decode(InputStream in)
          Initialize an PKCS8Key object from an input stream.
 byte[] encode()
          Returns the DER-encoded form of the key as a byte array.
 void encode(DerOutputStream out)
          PKCS#8 sequence on the DER output stream.
 boolean equals(Object object)
          Compares two private keys.
 String getAlgorithm()
          Returns the algorithm to be used with this key.
 AlgorithmId getAlgorithmId()
          Returns the algorithm ID to be used with this key.
 byte[] getEncoded()
          Returns the DER-encoded form of the key as a byte array.
 String getFormat()
          Returns the format for this key: "PKCS#8"
 int hashCode()
          Calculates a hash code value for this object.
static PKCS8Key parse(DerValue in)
           
static PrivateKey parseKey(DerValue in)
          Construct PKCS#8 subject public key from a DER value.
protected  void parseKeyBits()
          Parse the key bits.
 String toString()
          Returns a string representation of the object.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

algid

protected AlgorithmId algid

key

protected byte[] key

encodedKey

protected byte[] encodedKey

version

public static final BigInteger version
Constructor Detail

PKCS8Key

public PKCS8Key()
Default constructor. The key constructed must have its key and algorithm initialized before it may be used, for example by using decode.

Method Detail

parse

public static PKCS8Key parse(DerValue in)
                      throws IOException
Throws:
IOException

parseKey

public static PrivateKey parseKey(DerValue in)
                           throws IOException
Construct PKCS#8 subject public key from a DER value. If the runtime environment is configured with a specific class for this kind of key, a subclass is returned. Otherwise, a generic PKCS8Key object is returned.

This mechanism gurantees that keys (and algorithms) may be freely manipulated and transferred, without risk of losing information. Also, when a key (or algorithm) needs some special handling, that specific need can be accomodated.

Parameters:
in - the DER-encoded SubjectPublicKeyInfo value
Throws:
IOException - on data format errors

parseKeyBits

protected void parseKeyBits()
                     throws IOException,
                            InvalidKeyException
Parse the key bits. This may be redefined by subclasses to take advantage of structure within the key. For example, RSA public keys encapsulate two unsigned integers (modulus and exponent) as DER values within the key bits; Diffie-Hellman and DSS/DSA keys encapsulate a single unsigned integer.

This function is called when creating PKCS#8 SubjectPublicKeyInfo values using the PKCS8Key member functions, such as parse and decode.

Throws:
IOException - if a parsing error occurs.
InvalidKeyException - if the key encoding is invalid.

getAlgorithm

public String getAlgorithm()
Returns the algorithm to be used with this key.

Specified by:
getAlgorithm in interface Key
Returns:
the name of the algorithm associated with this key.

getAlgorithmId

public AlgorithmId getAlgorithmId()
Returns the algorithm ID to be used with this key.


encode

public final void encode(DerOutputStream out)
                  throws IOException
PKCS#8 sequence on the DER output stream.

Throws:
IOException

getEncoded

public byte[] getEncoded()
Returns the DER-encoded form of the key as a byte array.

Specified by:
getEncoded in interface Key
Returns:
the encoded key, or null if the key does not support encoding.

getFormat

public String getFormat()
Returns the format for this key: "PKCS#8"

Specified by:
getFormat in interface Key
Returns:
the primary encoding format of the key.

encode

public byte[] encode()
              throws InvalidKeyException
Returns the DER-encoded form of the key as a byte array.

Throws:
InvalidKeyException - if an encoding error occurs.

toString

public String toString()
Description copied from class: Object
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

 getClass().getName() + '@' + Integer.toHexString(hashCode())
 

Overrides:
toString in class Object
Returns:
a string representation of the object.

decode

public void decode(InputStream in)
            throws InvalidKeyException
Initialize an PKCS8Key object from an input stream. The data on that input stream must be encoded using DER, obeying the PKCS#8 format: a sequence consisting of a version, an algorithm ID and a bit string which holds the key. (That bit string is often used to encapsulate another DER encoded sequence.)

Subclasses should not normally redefine this method; they should instead provide a parseKeyBits method to parse any fields inside the key member.

Parameters:
in - an input stream with a DER-encoded PKCS#8 SubjectPublicKeyInfo value
Throws:
InvalidKeyException - if a parsing error occurs.

decode

public void decode(byte[] encodedKey)
            throws InvalidKeyException
Throws:
InvalidKeyException

equals

public boolean equals(Object object)
Compares two private keys. This returns false if the object with which to compare is not of type Key. Otherwise, the encoding of this key object is compared with the encoding of the given key object.

Overrides:
equals in class Object
Parameters:
object - the object with which to compare
Returns:
true if this key has the same encoding as the object argument; false otherwise.
See Also:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
Calculates a hash code value for this object. Objects which are equal will also have the same hashcode.

Overrides:
hashCode in class Object
Returns:
a hash code value for this object.
See Also:
Object.equals(java.lang.Object), Hashtable