The following tables list the key types each [primitive](https://developers.google.com/tink/primitives-by-language)
supports, classified by language.

## AEAD

| Implementation | Java | C++ (BoringSSL) | C++ (OpenSSL) | Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| AES-GCM | yes | yes | yes | yes | yes | yes |
| AES-GCM-SIV | yes^[1](https://developers.google.com/tink/supported-key-types#fn1)^ | yes | **no** | **no** | yes | yes |
| AES-CTR-HMAC | yes | yes | yes | yes | yes | yes |
| AES-EAX | yes | yes | yes | yes | **no** | yes |
| KMS Envelope | yes | yes | yes | **no** | yes | yes |
| CHACHA20-POLY1305 | yes | **no** | **no** | **no** | yes | **no** |
| XCHACHA20-POLY1305 | yes | yes | **no** | yes | yes | yes |

## Streaming AEAD

| Implementation | Java | C++ (BoringSSL) | C++ (OpenSSL) | Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| AES-GCM-HKDF-STREAMING | yes | yes | yes | **no** | yes | yes |
| AES-CTR-HMAC-STREAMING | yes | yes | yes | **no** | yes | yes |

## Deterministic AEAD

| Implementation | Java | C++ (BoringSSL) | C++ (OpenSSL) | Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| AES-SIV | yes | yes | yes | yes | yes | yes |

## MAC

| Implementation | Java | C++ (BoringSSL) | C++ (OpenSSL) | Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| HMAC-SHA2 | yes | yes | yes | yes | yes | yes |
| AES-CMAC | yes | yes | yes | yes | yes | yes |

## PRF

| Implementation | Java | C++ (BoringSSL) | C++ (OpenSSL) | Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| HKDF-SHA2 | yes | yes | yes | **no** | yes | yes |
| HMAC-SHA2 | yes | yes | yes | **no** | yes | yes |
| AES-CMAC | yes | yes | yes | **no** | yes | yes |

## Signature

| Implementation | Java | C++ (BoringSSL) | C++ (OpenSSL) | Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| ECDSA over NIST curves | yes | yes | yes | yes | yes | yes |
| Ed25519 | yes | yes | yes | yes | yes | yes |
| RSA-SSA-PKCS1 | yes | yes | yes | yes | yes | yes |
| RSA-SSA-PSS | yes | yes | yes | yes | yes | yes |
| ML-DSA | yes^[2](https://developers.google.com/tink/supported-key-types#fn2)^ | yes | **no** | **no** | yes | yes |
| ML-DSA (External Mu)^[3](https://developers.google.com/tink/supported-key-types#fn3)^ | **no** | yes | **no** | **no** | yes | yes |
| SLH-DSA (SHA2-128S) | yes^[4](https://developers.google.com/tink/supported-key-types#fn4)^ | yes | **no** | **no** | yes | yes |

## Hybrid Encryption

| Implementation | Java | C++ (BoringSSL) | C++ (OpenSSL) | Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| HPKE | yes | yes | **no** | **no** | yes | yes |
| ECIES with AEAD and HKDF | yes^[5](https://developers.google.com/tink/supported-key-types#fn5)^ | yes | yes | yes | yes | yes |
| ECIES with DeterministicAEAD and HKDF | yes^[6](https://developers.google.com/tink/supported-key-types#fn6)^ | yes | yes | **no** | yes | yes |

## JWT MAC

| Implementation | Java | C++ (BoringSSL) | C++ (OpenSSL) | Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| JWT HMAC-SHA2 | yes | yes | yes | **no** | yes | yes |

## JWT Signature

| Implementation | Java | C++ (BoringSSL) | C++ (OpenSSL) | Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| JWT ECDSA over NIST curves | yes | yes | yes | **no** | yes | yes |
| JWT RSA-SSA-PKCS1 | yes | yes | yes | **no** | yes | yes |
| JWT RSA-SSA-PSS | yes | yes | yes | **no** | yes | yes |

*** ** * ** ***

1. AES-GCM-SIV requires Conscrypt to be installed as a JCE security provider. [↩](https://developers.google.com/tink/supported-key-types#fnref1)

2. ML-DSA requires Conscrypt to be installed as a JCE security provider. [↩](https://developers.google.com/tink/supported-key-types#fnref2)

3. ML-DSA in External Mu mode is used through the
   [Prehash and SignPrehash](https://developers.google.com/tink/prehash-signing) primitives, and requires a
   variant with an ID requirement: either `TINK` or
   `NO_PREFIX_WITH_PREHASH_ID`. [↩](https://developers.google.com/tink/supported-key-types#fnref3)

4. SLH-DSA requires Conscrypt to be installed as a JCE security provider. [↩](https://developers.google.com/tink/supported-key-types#fnref4)

5. ECIES requires a NIST curve. [↩](https://developers.google.com/tink/supported-key-types#fnref5)

6. ECIES requires a NIST curve. [↩](https://developers.google.com/tink/supported-key-types#fnref6)