com.ibm.security12.sun.security.pkcs
Class PKCS8Key

java.lang.Object
  |
  +--com.ibm.security12.sun.security.pkcs.PKCS8Key
Direct Known Subclasses:
DSAPrivateKey

public class PKCS8Key
extends Object
implements PrivateKey

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

Version:
1.35, 98/09/11
Author:
Dave Brownell, Benjamin Renaud
See Also:
Serialized Form

Field Summary
protected  AlgorithmId algid
           
protected  byte[] encodedKey
           
protected  byte[] key
           
static java.math.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()
           
 
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 java.math.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

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.

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.

getEncoded

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

getFormat

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

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()
Overrides:
toString in class 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

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.
Parameters:
object - the object with which to compare
Returns:
true if this key has the same encoding as the object argument; false otherwise.
Overrides:
equals in class Object

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