# Interface Extension

public interface Extension
This interface represents an X.509 extension.

Extensions provide a means of associating additional attributes with users or public keys and for managing a certification hierarchy. The extension format also allows communities to define private extensions to carry information unique to those communities.

Each extension contains an object identifier, a criticality setting indicating whether it is a critical or a non-critical extension, and an ASN.1 DER-encoded value. Its ASN.1 definition is:

        Extension ::= SEQUENCE {
            extnId        OBJECT IDENTIFIER,
            critical      BOOLEAN DEFAULT FALSE,
            extnValue     OCTET STRING
                    -- contains a DER encoding of a value
                    -- of the type registered for use with
                    -- the extnId object identifier value
        }

This interface is designed to provide access to a single extension, unlike `X509Extension` which is more suitable for accessing a set of extensions.

Since:
  1.7

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `encode(OutputStream out)`
  Generates the extension's DER encoding and writes it to the output stream.
  `String`
  `getId()`
  Gets the extensions's object identifier.
  `byte[]`
  `getValue()`
  Gets the extensions's DER-encoded value.
  `boolean`
  `isCritical()`
  Gets the extension's criticality setting.

- ## Method Details

  - ### getId

    String getId()
    Gets the extensions's object identifier.
    Returns:
      the object identifier as a String

  - ### isCritical

    boolean isCritical()
    Gets the extension's criticality setting.
    Returns:
      true if this is a critical extension.

  - ### getValue

    byte[] getValue()
    Gets the extensions's DER-encoded value. Note, this is the bytes that are encoded as an OCTET STRING. It does not include the OCTET STRING tag and length.
    Returns:
      a copy of the extension's value, or `null` if no extension value is present.

  - ### encode

    void encode(OutputStream out) throws IOException
    Generates the extension's DER encoding and writes it to the output stream.
    Parameters:
      `out` - the output stream
    Throws:
      `IOException` - on encoding or output error.
      `NullPointerException` - if `out` is `null`.