# Class EncryptionKey

java.lang.Object
javax.security.auth.kerberos.EncryptionKey

All Implemented Interfaces:
  `Serializable, Key, SecretKey, Destroyable`

public final class EncryptionKey extends Object implements SecretKey
This class encapsulates an EncryptionKey used in Kerberos.

An EncryptionKey is defined in Section 4.2.9 of the Kerberos Protocol Specification (RFC 4120) as:

        EncryptionKey   ::= SEQUENCE {
                keytype         [0] Int32 -- actually encryption type --,
                keyvalue        [1] OCTET STRING
        }

The key material of an `EncryptionKey` is defined as the value of the `keyValue` above.

Since:
  9
See Also:
  - Serialized Form

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `EncryptionKey(byte[] keyBytes, int keyType)`
  Constructs an `EncryptionKey` from the given bytes and the key type.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `destroy()`
  Destroys this key by clearing out the key material of this key.
  `boolean`
  `equals(Object other)`
  Compares the specified object with this key for equality.
  `String`
  `getAlgorithm()`
  Returns the standard algorithm name for this key.
  `byte[]`
  `getEncoded()`
  Returns the key material of this key.
  `String`
  `getFormat()`
  Returns the name of the encoding format for this key.
  `int`
  `getKeyType()`
  Returns the key type for this key.
  `int`
  `hashCode()`
  Returns a hash code for this `EncryptionKey`.
  `String`
  `toString()`
  Returns an informative textual representation of this `EncryptionKey`.

  ### Methods declared in class Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

  ### Methods declared in interface Destroyable

  `isDestroyed`
  Modifier and Type
  Method
  Description
  `default boolean`
  `isDestroyed()`
  Determine if this `Object` has been destroyed.

- ## Constructor Details

  - ### EncryptionKey

    public EncryptionKey(byte[] keyBytes, int keyType)
    Constructs an `EncryptionKey` from the given bytes and the key type.

    The contents of the byte array are copied; subsequent modification of the byte array does not affect the newly created key.

    Parameters:
      `keyBytes` - the key material for the key
      `keyType` - the key type for the key as defined by the Kerberos protocol specification.
    Throws:
      `NullPointerException` - if keyBytes is null

- ## Method Details

  - ### getKeyType

    public int getKeyType()
    Returns the key type for this key.
    Returns:
      the key type.
    Throws:
      `IllegalStateException` - if the key is destroyed

  - ### getAlgorithm

    public String getAlgorithm()
    Returns the standard algorithm name for this key. The algorithm names are the encryption type string defined on the IANA Kerberos Encryption Type Numbers page.

    This method can return the following value not defined on the IANA page:

    1. none: for etype equal to 0
    2. unknown: for etype greater than 0 but unsupported by the implementation
    3. private: for etype smaller than 0
    Specified by:
      `getAlgorithm` in interface `Key`
    Returns:
      the name of the algorithm associated with this key.
    Throws:
      `IllegalStateException` - if the key is destroyed
    External Specifications
      - Java Security Standard Algorithm Names

  - ### getFormat

    public String getFormat()
    Returns the name of the encoding format for this key.
    Specified by:
      `getFormat` in interface `Key`
    Returns:
      the String "RAW"
    Throws:
      `IllegalStateException` - if the key is destroyed

  - ### getEncoded

    public byte[] getEncoded()
    Returns the key material of this key.
    Specified by:
      `getEncoded` in interface `Key`
    Returns:
      a newly allocated byte array that contains the key material
    Throws:
      `IllegalStateException` - if the key is destroyed

  - ### destroy

    public void destroy() throws DestroyFailedException
    Destroys this key by clearing out the key material of this key.
    Specified by:
      `destroy` in interface `Destroyable`
    Throws:
      `DestroyFailedException` - if some error occurs while destroying this key.

  - ### toString

    public String toString()
    Returns an informative textual representation of this `EncryptionKey`.
    Overrides:
      `toString` in class `Object`
    Returns:
      an informative textual representation of this `EncryptionKey`.

  - ### hashCode

    public int hashCode()
    Returns a hash code for this `EncryptionKey`.
    Overrides:
      `hashCode` in class `Object`
    Returns:
      a hash code for this `EncryptionKey`
    See Also:
      - `Object.equals(java.lang.Object)`
      - `System.identityHashCode(Object)`

  - ### equals

    public boolean equals(Object other)
    Compares the specified object with this key for equality. Returns true if the given object is also an `EncryptionKey` and the two `EncryptionKey` instances are equivalent. More formally two `EncryptionKey` instances are equal if they have equal key types and key material. A destroyed `EncryptionKey` object is only equal to itself.
    Overrides:
      `equals` in class `Object`
    Parameters:
      `other` - the object to compare to
    Returns:
      true if the specified object is equal to this `EncryptionKey`, false otherwise.
    See Also:
      - `Object.hashCode()`
      - `HashMap`