java.lang.Object
org.mozilla.jss.netscape.security.x509.X509Key
All Implemented Interfaces:
Serializable, Key, PublicKey
Direct Known Subclasses:
DSAPublicKey, RSAPublicKey

public class X509Key extends Object implements PublicKey
Holds an X.509 key, for example a public key found in an X.509 certificate. Includes a description of the algorithm to be used with the key; these keys normally are used as "SubjectPublicKeyInfo".

While this class can represent any kind of X.509 key, it may be desirable to provide subclasses which understand how to parse keying data. For example, RSA public keys have two members, one for the public modulus and one for the prime exponent. If such a class is provided, it is used when parsing X.509 keys. If one is not provided, the key still parses correctly.

Version:
1.74, 97/12/10
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      use serialVersionUID from JDK 1.1. for interoperability
      See Also:
    • algid

      protected AlgorithmId algid
    • key

      protected byte[] key
    • encodedKey

      protected byte[] encodedKey
  • Constructor Details

    • X509Key

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

      public X509Key(AlgorithmId algid, byte[] key) throws InvalidKeyException
      Throws:
      InvalidKeyException
  • Method Details

    • parse

      public static X509Key parse(DerValue in) throws IOException
      Construct X.509 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 X509Key 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 X.509 SubjectPublicKeyInfo values using the X509Key member functions, such as parse and decode.

      Throws:
      IOException - on parsing errors.
      InvalidKeyException - on invalid key encodings.
    • buildX509Key

      static X509Key buildX509Key(AlgorithmId algid, byte[] key) throws IOException, InvalidKeyException
      Throws:
      IOException
      InvalidKeyException
    • getAlgorithm

      public String getAlgorithm()
      Returns the algorithm to be used with this key.
      Specified by:
      getAlgorithm in interface Key
    • getAlgorithmId

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

      public final void encode(DerOutputStream out) throws IOException
      Encode SubjectPublicKeyInfo sequence on the DER output stream.
      Throws:
      IOException - on encoding errors.
    • getEncoded

      public byte[] getEncoded()
      Returns the DER-encoded form of the key as a byte array.
      Specified by:
      getEncoded in interface Key
    • getFormat

      public String getFormat()
      Returns the format for this key: "X.509"
      Specified by:
      getFormat in interface Key
    • getKey

      public byte[] getKey()
      Returns the raw key as a byte array
    • encode

      public byte[] encode() throws InvalidKeyException
      Returns the DER-encoded form of the key as a byte array.
      Throws:
      InvalidKeyException - on encoding errors.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • decode

      public void decode(InputStream in) throws InvalidKeyException
      Initialize an X509Key object from an input stream. The data on that input stream must be encoded using DER, obeying the X.509 SubjectPublicKeyInfo format. That is, the data is a sequence consisting of 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.

      The exception to this rule is that since private keys need not be encoded using the X.509 SubjectPublicKeyInfo format, private keys may override this method, encode, and of course getFormat.

      Parameters:
      in - an input stream with a DER-encoded X.509 SubjectPublicKeyInfo value
      Throws:
      InvalidKeyException - on parsing errors.
    • decode

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

      private void writeObject(ObjectOutputStream stream) throws IOException
      Serialization write ... X.509 keys serialize as themselves, and they're parsed when they get read back.
      Throws:
      IOException
    • readObject

      private void readObject(ObjectInputStream stream) throws IOException
      Serialization read ... X.509 keys serialize as themselves, and they're parsed when they get read back.
      Throws:
      IOException
    • equals

      public boolean equals(Object object)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Calculates a hash code value for the object. Objects which are equal will also have the same hashcode.
      Overrides:
      hashCode in class Object
    • copyEncodedKey

      private byte[] copyEncodedKey(byte[] encodedKey)
    • encode

      static void encode(DerOutputStream out, AlgorithmId algid, byte[] key) throws IOException
      Throws:
      IOException
    • parsePublicKey

      public static PublicKey parsePublicKey(DerValue in) throws IOException
      Throws:
      IOException
    • buildPublicKey

      static PublicKey buildPublicKey(AlgorithmId algid, byte[] key) throws IOException, InvalidKeyException
      Throws:
      IOException
      InvalidKeyException