Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Ctors](https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#pubctors) \| [Methods](https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#inhmethods)

# CertificateFactorySpi


`
public


abstract
class
CertificateFactorySpi
`


`

extends https://developer.android.com/reference/java/lang/Object


`

`


`

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | java.security.cert.CertificateFactorySpi |

<br />

*** ** * ** ***

This class defines the *Service Provider Interface* (**SPI** )
for the `CertificateFactory` class.
All the abstract methods in this class must be implemented by each
cryptographic service provider who wishes to supply the implementation
of a certificate factory for a particular certificate type, e.g., X.509.

Certificate factories are used to generate certificate, certification path
(`CertPath`) and certificate revocation list (CRL) objects from
their encodings.

A certificate factory for X.509 must return certificates that are an
instance of `java.security.cert.X509Certificate`, and CRLs
that are an instance of `java.security.cert.X509CRL`.
**See also:**

- `https://developer.android.com/reference/java/security/cert/CertificateFactory`
- `https://developer.android.com/reference/java/security/cert/Certificate`
- `https://developer.android.com/reference/java/security/cert/X509Certificate`
- `https://developer.android.com/reference/java/security/cert/CertPath`
- `https://developer.android.com/reference/java/security/cert/CRL`
- `https://developer.android.com/reference/java/security/cert/X509CRL`

## Summary

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#CertificateFactorySpi()() ` |

| ### Public methods ||
|---|---|
| ` abstract https://developer.android.com/reference/java/security/cert/CRL` | ` https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#engineGenerateCRL(java.io.InputStream)(https://developer.android.com/reference/java/io/InputStream inStream) ` Generates a certificate revocation list (CRL) object and initializes it with the data read from the input stream `inStream`. |
| ` abstract https://developer.android.com/reference/java/util/Collection<? extends https://developer.android.com/reference/java/security/cert/CRL>` | ` https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#engineGenerateCRLs(java.io.InputStream)(https://developer.android.com/reference/java/io/InputStream inStream) ` Returns a (possibly empty) collection view of the CRLs read from the given input stream `inStream`. |
| ` https://developer.android.com/reference/java/security/cert/CertPath` | ` https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#engineGenerateCertPath(java.io.InputStream,%20java.lang.String)(https://developer.android.com/reference/java/io/InputStream inStream, https://developer.android.com/reference/java/lang/String encoding) ` Generates a `CertPath` object and initializes it with the data read from the `InputStream` inStream. |
| ` https://developer.android.com/reference/java/security/cert/CertPath` | ` https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#engineGenerateCertPath(java.util.List<?%20extends%20java.security.cert.Certificate>)(https://developer.android.com/reference/java/util/List<? extends https://developer.android.com/reference/java/security/cert/Certificate> certificates) ` Generates a `CertPath` object and initializes it with a `List` of `Certificate`s. |
| ` https://developer.android.com/reference/java/security/cert/CertPath` | ` https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#engineGenerateCertPath(java.io.InputStream)(https://developer.android.com/reference/java/io/InputStream inStream) ` Generates a `CertPath` object and initializes it with the data read from the `InputStream` inStream. |
| ` abstract https://developer.android.com/reference/java/security/cert/Certificate` | ` https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#engineGenerateCertificate(java.io.InputStream)(https://developer.android.com/reference/java/io/InputStream inStream) ` Generates a certificate object and initializes it with the data read from the input stream `inStream`. |
| ` abstract https://developer.android.com/reference/java/util/Collection<? extends https://developer.android.com/reference/java/security/cert/Certificate>` | ` https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#engineGenerateCertificates(java.io.InputStream)(https://developer.android.com/reference/java/io/InputStream inStream) ` Returns a (possibly empty) collection view of the certificates read from the given input stream `inStream`. |
| ` https://developer.android.com/reference/java/util/Iterator<https://developer.android.com/reference/java/lang/String>` | ` https://developer.android.com/reference/java/security/cert/CertificateFactorySpi#engineGetCertPathEncodings()() ` Returns an iteration of the `CertPath` encodings supported by this certificate factory, with the default encoding first. |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` https://developer.android.com/reference/java/lang/Object#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` final https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(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. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long)(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` | ` https://developer.android.com/reference/java/lang/Object#wait()() ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*. | ||

## Public constructors

### CertificateFactorySpi

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public CertificateFactorySpi ()
```

<br />

<br />

## Public methods

### engineGenerateCRL

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract CRL engineGenerateCRL (InputStream inStream)
```

Generates a certificate revocation list (CRL) object and initializes it
with the data read from the input stream `inStream`.

In order to take advantage of the specialized CRL format
supported by this certificate factory,
the returned CRL object can be typecast to the corresponding
CRL class. For example, if this certificate
factory implements X.509 CRLs, the returned CRL object
can be typecast to the `X509CRL` class.

Note that if the given input stream does not support
`https://developer.android.com/reference/java/io/InputStream#mark(int)` and
`https://developer.android.com/reference/java/io/InputStream#reset()`, this method will
consume the entire input stream. Otherwise, each call to this
method consumes one CRL and the read position of the input stream
is positioned to the next available byte after the inherent
end-of-CRL marker. If the data in the
input stream does not contain an inherent end-of-CRL marker (other
than EOF) and there is trailing data after the CRL is parsed, a
`CRLException` is thrown.

<br />

| Parameters ||
|---|---|
| `inStream` | `InputStream`: an input stream with the CRL data. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/cert/CRL` | a CRL object initialized with the data from the input stream. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/security/cert/CRLException` | on parsing errors. |

### engineGenerateCRLs

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract Collection<? extends CRL> engineGenerateCRLs (InputStream inStream)
```

Returns a (possibly empty) collection view of the CRLs read
from the given input stream `inStream`.

In order to take advantage of the specialized CRL format
supported by this certificate factory, each element in
the returned collection view can be typecast to the corresponding
CRL class. For example, if this certificate
factory implements X.509 CRLs, the elements in the returned
collection can be typecast to the `X509CRL` class.

In the case of a certificate factory for X.509 CRLs,
`inStream` may contain a single DER-encoded CRL.
In addition, `inStream` may contain a PKCS#7 CRL
set. This is a PKCS#7 *SignedData* object, with the only
significant field being *crls*. In particular, the
signature and the contents are ignored. This format allows multiple
CRLs to be downloaded at once. If no CRLs are present,
an empty collection is returned.

Note that if the given input stream does not support
`https://developer.android.com/reference/java/io/InputStream#mark(int)` and
`https://developer.android.com/reference/java/io/InputStream#reset()`, this method will
consume the entire input stream.

<br />

| Parameters ||
|---|---|
| `inStream` | `InputStream`: the input stream with the CRLs. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/Collection<? extends https://developer.android.com/reference/java/security/cert/CRL>` | a (possibly empty) collection view of java.security.cert.CRL objects initialized with the data from the input stream. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/security/cert/CRLException` | on parsing errors. |

### engineGenerateCertPath

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public CertPath engineGenerateCertPath (InputStream inStream, 
                String encoding)
```

Generates a `CertPath` object and initializes it with
the data read from the `InputStream` inStream. The data
is assumed to be in the specified encoding.

This method was added to version 1.4 of the Java 2 Platform
Standard Edition. In order to maintain backwards compatibility with
existing service providers, this method cannot be `abstract`
and by default throws an `UnsupportedOperationException`.

<br />

| Parameters ||
|---|---|
| `inStream` | `InputStream`: an `InputStream` containing the data <br /> |
| `encoding` | `String`: the encoding used for the data <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/cert/CertPath` | a `CertPath` initialized with the data from the `InputStream` <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` | if the method is not supported |
| `https://developer.android.com/reference/java/security/cert/CertificateException` | if an exception occurs while decoding or the encoding requested is not supported |

### engineGenerateCertPath

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public CertPath engineGenerateCertPath (List<? extends Certificate> certificates)
```

Generates a `CertPath` object and initializes it with
a `List` of `Certificate`s.


The certificates supplied must be of a type supported by the
`CertificateFactory`. They will be copied out of the supplied
`List` object.

This method was added to version 1.4 of the Java 2 Platform
Standard Edition. In order to maintain backwards compatibility with
existing service providers, this method cannot be `abstract`
and by default throws an `UnsupportedOperationException`.

<br />

| Parameters ||
|---|---|
| `certificates` | `List`: a `List` of `Certificate`s <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/cert/CertPath` | a `CertPath` initialized with the supplied list of certificates <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` | if the method is not supported |
| `https://developer.android.com/reference/java/security/cert/CertificateException` | if an exception occurs |

### engineGenerateCertPath

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public CertPath engineGenerateCertPath (InputStream inStream)
```

Generates a `CertPath` object and initializes it with
the data read from the `InputStream` inStream. The data
is assumed to be in the default encoding.

This method was added to version 1.4 of the Java 2 Platform
Standard Edition. In order to maintain backwards compatibility with
existing service providers, this method cannot be `abstract`
and by default throws an `UnsupportedOperationException`.

<br />

| Parameters ||
|---|---|
| `inStream` | `InputStream`: an `InputStream` containing the data <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/cert/CertPath` | a `CertPath` initialized with the data from the `InputStream` <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` | if the method is not supported |
| `https://developer.android.com/reference/java/security/cert/CertificateException` | if an exception occurs while decoding |

### engineGenerateCertificate

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract Certificate engineGenerateCertificate (InputStream inStream)
```

Generates a certificate object and initializes it with
the data read from the input stream `inStream`.

In order to take advantage of the specialized certificate format
supported by this certificate factory,
the returned certificate object can be typecast to the corresponding
certificate class. For example, if this certificate
factory implements X.509 certificates, the returned certificate object
can be typecast to the `X509Certificate` class.

In the case of a certificate factory for X.509 certificates, the
certificate provided in `inStream` must be DER-encoded and
may be supplied in binary or printable (Base64) encoding. If the
certificate is provided in Base64 encoding, it must be bounded at
the beginning by ---BEGIN CERTIFICATE---, and must be bounded at
the end by ---END CERTIFICATE---.

Note that if the given input stream does not support
`https://developer.android.com/reference/java/io/InputStream#mark(int)` and
`https://developer.android.com/reference/java/io/InputStream#reset()`, this method will
consume the entire input stream. Otherwise, each call to this
method consumes one certificate and the read position of the input stream
is positioned to the next available byte after the inherent
end-of-certificate marker. If the data in the
input stream does not contain an inherent end-of-certificate marker (other
than EOF) and there is trailing data after the certificate is parsed, a
`CertificateException` is thrown.

<br />

| Parameters ||
|---|---|
| `inStream` | `InputStream`: an input stream with the certificate data. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/security/cert/Certificate` | a certificate object initialized with the data from the input stream. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/security/cert/CertificateException` | on parsing errors. |

### engineGenerateCertificates

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract Collection<? extends Certificate> engineGenerateCertificates (InputStream inStream)
```

Returns a (possibly empty) collection view of the certificates read
from the given input stream `inStream`.

In order to take advantage of the specialized certificate format
supported by this certificate factory, each element in
the returned collection view can be typecast to the corresponding
certificate class. For example, if this certificate
factory implements X.509 certificates, the elements in the returned
collection can be typecast to the `X509Certificate` class.

In the case of a certificate factory for X.509 certificates,
`inStream` may contain a single DER-encoded certificate
in the formats described for
`https://developer.android.com/reference/java/security/cert/CertificateFactory#generateCertificate(java.io.InputStream)`.
In addition, `inStream` may contain a PKCS#7 certificate
chain. This is a PKCS#7 *SignedData* object, with the only
significant field being *certificates*. In particular, the
signature and the contents are ignored. This format allows multiple
certificates to be downloaded at once. If no certificates are present,
an empty collection is returned.

Note that if the given input stream does not support
`https://developer.android.com/reference/java/io/InputStream#mark(int)` and
`https://developer.android.com/reference/java/io/InputStream#reset()`, this method will
consume the entire input stream.

<br />

| Parameters ||
|---|---|
| `inStream` | `InputStream`: the input stream with the certificates. <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/Collection<? extends https://developer.android.com/reference/java/security/cert/Certificate>` | a (possibly empty) collection view of java.security.cert.Certificate objects initialized with the data from the input stream. <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/security/cert/CertificateException` | on parsing errors. |

### engineGetCertPathEncodings

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public Iterator<String> engineGetCertPathEncodings ()
```

Returns an iteration of the `CertPath` encodings supported
by this certificate factory, with the default encoding first. See
the CertPath Encodings section in the [Java Security Standard Algorithm Names Specification](https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html#certpath-encodings)
for information about standard encoding names.


Attempts to modify the returned `Iterator` via its
`remove` method result in an
`UnsupportedOperationException`.

This method was added to version 1.4 of the Java 2 Platform
Standard Edition. In order to maintain backwards compatibility with
existing service providers, this method cannot be `abstract`
and by default throws an `UnsupportedOperationException`.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/util/Iterator<https://developer.android.com/reference/java/lang/String>` | an `Iterator` over the names of the supported `CertPath` encodings (as `String`s) <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/UnsupportedOperationException` | if the method is not supported |