AI-generated Key Takeaways
-
The tables provide a comprehensive overview of the cryptographic primitives supported by Tink across various programming languages, including Java, C++, Objective-C, Go, and Python.
-
Support for specific primitives can vary depending on the chosen language and underlying cryptographic library (e.g., BoringSSL, OpenSSL).
-
Tink offers a wide range of cryptographic capabilities, encompassing AEAD, Streaming AEAD, Deterministic AEAD, MAC, PRF, Signatures, Hybrid Encryption, and JWT support.
-
While most primitives are widely supported, some exceptions exist, such as limited AES-GCM functionality on older Android versions and the need for Conscrypt for AES-GCM-SIV in Java.
-
Developers should consult the tables to ensure their target language and platform support the required cryptographic primitives for their specific use case.
The following tables list the key types each primitive supports, classified by language.
AEAD
| Implementation | Java | C++ (BoringSSL) |
C++ (OpenSSL) |
Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| AES-GCM | yes1 | yes | yes | yes | yes | yes |
| AES-GCM-SIV | yes2 | 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 |
Hybrid Encryption
| Implementation | Java | C++ (BoringSSL) |
C++ (OpenSSL) |
Objective-C | Go | Python |
|---|---|---|---|---|---|---|
| HPKE | yes | yes | no | no | yes | yes |
| ECIES with AEAD and HKDF | yes3 | yes | yes | yes | yes | yes |
| ECIES with DeterministicAEAD and HKDF | yes4 | 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 |