Tink Java v1.19.0
Tink is a multi-language, cross-platform library that provides simple and misuse-proof APIs for common cryptographic tasks.
This is Tink Java 1.19
The complete list of changes since 1.18.0 can be found here.
Build changes
- For Bazel builds, we now use Bazel 7.6.1. in our tests.
- For Bazel builds, Tink now supports bzlmod.
- Tink no longer supports Java 8. The minimum version starting from 1.19.0 is Java 11.
Dependencies
- Protobuf 4.28.2 was upgraded to Protobuf 4.32.1. (Note: we plan to shade protobuf in the next minor version of Tink which should resolve compatibility issues)
Obscure behaviour changes
-
Tink will reject custom key types where the Type-Url has non-ASCII characters.
-
Tink may serialize keysets slightly differently in certain cases. For example, in the serialization of a ECDSA keyset, the points might be padded differently than before. Users should not depend on the exact format of Tink's serialization.
-
Use Conscrypt's AES-CMAC implementation when available and when the input is larger than 64 byte. This may improves the performance of AES-CMAC, AES-SIV and AES-EAX for large inputs.
-
Removed usage of thread-local Ciphers for ChaCha20Poly1305.
Added APIs
-
Added public
JwtEcdsaParameters.Algorithm.getEcParameterSpecmethod. -
The AES-SIV implementation in subtle now accepts multiple associated datas.
Future work
To see what we're working towards, check our project roadmap.
Getting started
To get started using Tink, see the setup guide.
Maven:
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>tink</artifactId>
<version>1.19.0</version>
</dependency>
Gradle:
dependencies {
implementation 'com.google.crypto.tink:tink-android:1.19.0'
}
Bazel:
Using bzlmod
bazel_dep(name = "tink_java", version = "1.19.0")
git_override(
module_name = "tink_java",
remote = "https://github.com/tink-crypto/tink-java",
tag = "v1.19.0",
)
Using WORKSPACE
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
RULES_JVM_EXTERNAL_TAG = "4.5"
RULES_JVM_EXTERNAL_SHA ="b17d7388feb9bfa7f2fa09031b32707df529f26c91ab9e5d909eb1676badd9a6"
http_archive(
name = "rules_jvm_external",
strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG,
sha256 = RULES_JVM_EXTERNAL_SHA,
url = "https://github.com/bazelbuild/rules_jvm_external/archive/refs/tags/%s.zip" % RULES_JVM_EXTERNAL_TAG,
)
load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
rules_jvm_external_deps()
load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
rules_jvm_external_setup()
load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
artifacts = [
"com.google.crypto.tink:tink:NEXT_VERSION",
# ... other dependencies ...
],
repositories = [
"https://repo1.maven.org/maven2",
],
)
Alternatively, one can build Tink from source, and include it with
http_archive:
http_archive(
name = "com_github_tink_crypto_tink_java",
urls = ["https://github.com/tink-crypto/tink-java/archive/refs/tags/NEXT_VERSION.zip"],
strip_prefix = "tink-java-NEXT_VERSION",
sha256 = ...
)
load("@tink_java//:tink_java_deps.bzl", "TINK_MAVEN_ARTIFACTS", "tink_java_deps")
tink_java_deps()
load("@tink_java//:tink_java_deps_init.bzl", "tink_java_deps_init")
tink_java_deps_init()
# ...
maven_install(
artifacts = TINK_MAVEN_ARTIFACTS + # ... other dependencies ...
repositories = [
"https://repo1.maven.org/maven2",
],
)