Puedes compilar Tink desde la fuente o usar paquetes específicos del idioma. Sigue las siguientes instrucciones para comenzar.
Cuando termines de instalar y configurar Tink, continúa con los Próximos pasos que se encuentran al final de esta página.
C++
Tink proporciona las siguientes bibliotecas de C++:
- Una biblioteca principal de C++, tink-cc La versión más reciente es 2.3.0.
- Una extensión de AWS KMS, tink-cc-awskms. La versión más reciente es la 2.0.1.
- Una extensión de Cloud KMS de Google, tink-cc-gcpkms. La versión más reciente es 2.2.0.
Tink C++ (tink-cc)
Tink C++ depende de lo siguiente:
- Protobuf 26.1
- Abseil LTS 20230802.0
- BoringSSL o OpenSSL >=1.1.1
- RapidJSON 1.1.0
- googletest 1.14.0 (solo prueba)
- Wycheproof (solo para pruebas)
Tink C++ admite lo siguiente:
- C++ >= 14
- SO:
- UbuntuLTS >= 20.04 (x86_64)
- macOS >= 12.5 Monterey (x86_64)
- Windows Server >= 2019 (x86_64)
- Compilador:
- GCC >= 7.5.0
- Apple Clang >= 14
- MSVC >= 2019
- Sistema de compilación:
CMake
Debes agregar tink-cc
como una dependencia en el árbol. Por ejemplo:
cmake_minimum_required(VERSION 3.13)
project(YourProject CXX)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 14)
include(FetchContent)
# Import Tink as an in-tree dependency.
FetchContent_Declare(
tink
URL https://github.com/tink-crypto/tink-cc/archive/refs/tags/v2.3.0.zip
URL_HASH SHA256=363ce671ab5ce0b24f279d3647185597a25f407c3608db007315f79f151f436b
)
FetchContent_GetProperties(tink)
if(NOT googletest_POPULATED)
FetchContent_Populate(tink)
add_subdirectory(${tink_SOURCE_DIR} ${tink_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
add_executable(your_app your_app.cc)
target_link_libraries(your_app tink::static)
Bazel
Bzlmod
Si usas Bazel con módulos, agrega lo siguiente a tu archivo MODULE.bazel
:
bazel_dep(name = "tink_cc", version = "2.3.0")
ESPACIO DE TRABAJO
Si usas Bazel con archivos WORKSPACE
, agrega lo siguiente a tu archivo WORKSPACE
:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "tink_cc",
urls = ["https://github.com/tink-crypto/tink-cc/archive/refs/tags/v2.3.0.zip"],
strip_prefix = "tink-2.3.0",
sha256 = "363ce671ab5ce0b24f279d3647185597a25f407c3608db007315f79f151f436b",
)
load("@tink_cc//:tink_cc_deps.bzl", "tink_cc_deps")
tink_cc_deps()
load("@tink_cc//:tink_cc_deps_init.bzl", "tink_cc_deps_init")
tink_cc_deps_init()
Extensión de AWS KMS de Tink C++ (tink-cc-awskms)
Tink C++ Google Cloud KMS depende de lo siguiente:
- Tink C++ 2.1.0
- SDK de AWS C++ 1.7.345
- googletest 1.11.0 (solo para pruebas)
Tink C++ AWS KMS admite lo siguiente:
- C++ >= 14
- SO:
- UbuntuLTS >= 20.04 (x86_64)
- macOS >= 12.5 Monterey (x86_64)
- Compilador:
- GCC >= 7.5.0
- Apple Clang >= 14
- Sistema de compilación:
- Bazel >= 6 LTS
Bazel
Debes agregar lo siguiente al archivo WORKSPACE
de tu proyecto:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "tink_cc",
urls = ["https://github.com/tink-crypto/tink-cc/archive/refs/tags/v2.3.0.zip"],
strip_prefix = "tink-2.3.0",
sha256 = "363ce671ab5ce0b24f279d3647185597a25f407c3608db007315f79f151f436b",
)
load("@tink_cc//:tink_cc_deps.bzl", "tink_cc_deps")
tink_cc_deps()
load("@tink_cc//:tink_cc_deps_init.bzl", "tink_cc_deps_init")
tink_cc_deps_init()
http_archive(
name = "tink_cc_awskms",
urls = ["https://github.com/tink-crypto/tink-cc-awskms/archive/refs/tags/v2.0.1.zip"],
strip_prefix = "tink-cc-awskms-2.0.1",
sha256 = "366319b269f62af120ee312ce4c99ce3738ceb23ce3f9491b4859432f8b991a4",
)
load("@tink_cc_awskms//:tink_cc_awskms_deps.bzl", "tink_cc_awskms_deps")
tink_cc_awskms_deps()
Extensión de Google Cloud KMS de Tink para C++ (tink-cc-gcpkms)
Tink C++ Google Cloud KMS depende de lo siguiente:
- Tink C++ 2.1.0
- gRPC 1.59.3
- Bibliotecas cliente de C++ de Google Cloud 2.16.0
- googletest 1.11.0 (solo para pruebas)
Tink C++ Google Cloud KMS admite lo siguiente:
- C++ >= 14
- SO:
- UbuntuLTS >= 20.04 (x86_64)
- macOS >= 12.5 Monterey (x86_64)
- Compilador:
- GCC >= 7.5.0
- Apple Clang >= 14
- Sistema de compilación:
- Bazel >= 6 LTS
Bazel
Debes agregar lo siguiente al archivo WORKSPACE
de tu proyecto:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "tink_cc_gcpkms",
urls = ["https://github.com/tink-crypto/tink-cc-gcpkms/releases/download/v2.2.0/tink-cc-gcpkms-2.2.0.zip"],
strip_prefix = "tink-cc-gcpkms-2.2.0",
sha256 = "ffb9d05c64ca28b5eb54fe79e7c3f93fad68f00e45f74f6b9ce1bd3a32b3d6fd",
)
load("@tink_cc_gcpkms//:tink_cc_gcpkms_deps.bzl", "tink_cc_gcpkms_deps")
tink_cc_gcpkms_deps()
load("@tink_cc_gcpkms//:tink_cc_gcpkms_deps_init.bzl", "tink_cc_gcpkms_deps_init")
tink_cc_gcpkms_deps_init(register_go = True)
Go
Tink proporciona las siguientes bibliotecas de Go:
- Una biblioteca principal de Tink, tink-go. La versión más reciente es la v2.2.0.
- Una extensión de AWS KMS, tink-go-awskms. La versión más reciente es 2.1.0.
- Una extensión de Cloud KMS de Google, tink-go-gcpkms. La versión más reciente es la 2.2.0.
- Una extensión de HashiCorp Vault, tink-go-hcvault. La versión más reciente es 2.2.0.
Todas las bibliotecas de Go de Tink se publican como módulos de Go que se pueden usar con herramientas de Go estándar o Bazel.
Tink Go (tink-go)
Herramientas de Go
Ejecuta el siguiente comando desde el directorio de tu proyecto:
go get github.com/tink-crypto/tink-go/v2@v2.2.0
Consulta la documentación oficial de Go.
Extensión de AWS KMS de Tink Go (tink-go-awskms)
Herramientas de Go
Ejecuta el siguiente comando desde el directorio de tu proyecto:
go get github.com/tink-crypto/tink-go-awskms/v2@2.1.0
Consulta la documentación oficial de Go.
Extensión de Google Cloud KMS de Tink Go (tink-go-gcpkms)
Herramientas de Go
Ejecuta el siguiente comando desde el directorio de tu proyecto:
go get github.com/tink-crypto/tink-go-gcpkms/v2@v2.2.0
Consulta la documentación oficial de Go.
Extensión de HashiCorp Vault de Tink Go (tink-go-hcvault)
Herramientas de Go
Ejecuta el siguiente comando desde el directorio de tu proyecto:
go get github.com/tink-crypto/tink-go-hcvault/v2@v2.2.0
Consulta la documentación oficial de Go.
Java
Tink proporciona las siguientes bibliotecas de Java:
- Una biblioteca principal de Java y Android, tink-java. La versión más reciente es 1.15.0.
- Una extensión de AWS KMS, tink-java-awskms. La versión más reciente es la 1.10.1.
- Una extensión de Google Cloud KMS, tink-java-gcpkms. La versión más reciente es 1.10.0.
- Una biblioteca, tink-java-apps, que proporciona implementaciones para el token de método de pago de Google, la verificación del servidor de anuncios recompensados de AdMob de Google y la RFC 8291: Encriptación de mensajes para Web Push. La versión más reciente es la 1.11.0.
La versión de Java de Tink es compatible con Java 8 o versiones posteriores. Puedes incluir los artefactos de Maven de Tink Java en tu proyecto de Maven o Gradle, o usar Bazel.
Tink para Android es totalmente compatible a partir del nivel de API 24. Se espera que la mayoría de las partes de Tink funcionen a partir del nivel de API 21. Las partes en las que Tink no se ejecuta de forma predeterminada con el nivel de API 21 son las siguientes:
- La biblioteca de JWT requiere el nivel de API 24, ya que usa clases como
java.util.Optional
. Esta limitación se puede evitar con la expansión de sintaxis. - Las clases de
com.google.crypto.tink.integration.android
solo se prueban por completo a partir del nivel de API 23. - Algunas APIs de
com.google.crypto.tink.streamingaead
usanSeekableByteBufferChannel
, que solo está disponible a partir del nivel de API 24.
Ten en cuenta que, por motivos técnicos, solo probamos Tink en Android en la infraestructura interna de Google. No esperamos que esto cause ningún problema, pero si tienes algún inconveniente, informa al respecto.
Tink para Android no requiere configuración de Proguard.
Tink para Java (tink-java)
Maven
Puedes incluir Tink Java y la biblioteca de Tink para Android con Maven:
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>tink</artifactId>
<version>1.15.0</version>
</dependency>
Si tu segmentación es para Android, puedes usar tink-android
desde
Gradle con lo siguiente:
dependencies {
implementation 'com.google.crypto.tink:tink-android:1.15.0'
}
Bazel
La forma recomendada en que los usuarios de Bazel pueden agregar
Tink Java como dependencia es instalando el artefacto de lanzamiento de Maven con
la herramienta rules_jvm_external
en su archivo WORKSPACE
:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
RULES_JVM_EXTERNAL_TAG = "6.1"
RULES_JVM_EXTERNAL_SHA ="d31e369b854322ca5098ea12c69d7175ded971435e55c18dd9dd5f29cc5249ac"
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/releases/download/%s/rules_jvm_external-%s.tar.gz" % (RULES_JVM_EXTERNAL_TAG, 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:1.15.0",
# ... other dependencies ...
],
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
],
)
Si deseas compilar tink-java
desde la fuente, por ejemplo, para fijar una confirmación específica, puedes incluirla como http_archive
en tu archivo WORKSPACE
:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
TINK_COMMIT="f4127f6b6ab9c367d41ade1f50db6f0ef9909044"
TINK_SHA256="e246f848f7749e37f558955ecb50345b04d79ddb9d8d1e8ae19f61e8de530582"
http_archive(
name = "tink_java",
urls = ["https://github.com/tink-crypto/tink-java/archive/%s.zip" % TINK_COMMIT],
strip_prefix = "tink-%s" % TINK_COMMIT,
sha256 = TINK_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()
# rules_jvm_external is imported and initialized by tink_java_deps and
# tink_java_deps_init.
load("@rules_jvm_external//:defs.bzl", "maven_install")
maven_install(
artifacts = TINK_MAVEN_ARTIFACTS + # ... other dependencies ...
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
],
)
Extensión de AWS KMS de Tink para Java (tink-java-awskms)
Maven
Puedes incluir Tink Java y la biblioteca de Tink para Android con Maven:
<dependencies>
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>tink-awskms</artifactId>
<version>1.10.1</version>
</dependency>
</dependencies>
Bazel
Puedes instalar el artefacto de Maven com.google.crypto.tink:tink-awskms
junto con com.google.crypto.tink:tink
con la herramienta rules_jvm_external
.
# ...
maven_install(
artifacts = [
"com.google.crypto.tink:tink:1.15.0",
"com.google.crypto.tink:tink-awskms:1.10.1",
# ... other dependencies ...
],
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
],
)
Como alternativa, puedes incluirlo como una dependencia http_archive
:
# ...
http_archive(
name = "tink_java",
urls = ["https://github.com/tink-crypto/tink-java/releases/download/v1.15.0/tink-java-1.15.0.zip"],
strip_prefix = "tink-java-1.15.0",
sha256 = "e246f848f7749e37f558955ecb50345b04d79ddb9d8d1e8ae19f61e8de530582",
)
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()
http_archive(
name = "tink_java_awskms",
urls = ["https://github.com/tink-crypto/tink-java-awskms/releases/download/v1.10.1/tink-java-awskms-1.10.1.zip"],
strip_prefix = "tink-java-awskms-1.10.1",
sha256 = "5f08f3a343fb2028784ee2344e102cf4f753b4d23252318b3f8ac48208d3e2fa",
)
load("@tink_java_awskms//:tink_java_awskms_deps.bzl", "TINK_JAVA_AWSKMS_MAVEN_ARTIFACTS")
maven_install(
artifacts = TINK_MAVEN_ARTIFACTS + TINK_JAVA_AWSKMS_MAVEN_ARTIFACTS + [
# ... other dependencies ...
],
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
],
)
Extensión de Google Cloud KMS de Tink para Java (tink-java-gcpkms)
Maven
<dependencies>
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>tink-gcpkms</artifactId>
<version>1.10.0/version>
</dependency>
</dependencies>
Bazel
Puedes instalar el artefacto de Maven com.google.crypto.tink:tink-gcpkms
junto con com.google.crypto.tink:tink
con la herramienta rules_jvm_external
.
# ...
maven_install(
artifacts = [
"com.google.crypto.tink:tink:1.15.0",
"com.google.crypto.tink:tink-gcpkms:1.10.0",
# ... other dependencies ...
],
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
],
)
Como alternativa, puedes incluirlo como una dependencia http_archive
:
# ...
http_archive(
name = "tink_java",
urls = ["https://github.com/tink-crypto/tink-java/releases/download/v1.15.0/tink-java-1.15.0.zip"],
strip_prefix = "tink-java-1.15.0",
sha256 = "e246f848f7749e37f558955ecb50345b04d79ddb9d8d1e8ae19f61e8de530582",
)
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()
http_archive(
name = "tink_java_gcpkms",
urls = ["https://github.com/tink-crypto/tink-java-gcpkms/releases/download/v1.10.0/tink-java-gcpkms-1.10.0.zip"],
strip_prefix = "tink-java-gcpkms-1.10.0",
sha256 = "ad85625cc4409f2f6ab13a8eef39c965501585e9323d59652cce322b3d2c09a2",
)
load("@tink_java_gcpkms//:tink_java_gcpkms_deps.bzl", "TINK_JAVA_GCPKMS_MAVEN_ARTIFACTS")
maven_install(
artifacts = TINK_MAVEN_ARTIFACTS + TINK_JAVA_GCPKMS_MAVEN_ARTIFACTS + [
# ... other dependencies ...
],
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
],
)
Extensiones de apps de Java de Tink (tink-java-apps)
Maven
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>apps-webpush</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>apps-paymentmethodtoken</artifactId>
<version>1.11.0</version>
</dependency>
<dependency>
<groupId>com.google.crypto.tink</groupId>
<artifactId>apps-rewardedads</artifactId>
<version>1.11.0</version>
</dependency>
Bazel
Puedes instalar cualquiera de los artefactos de Maven com.google.crypto.tink:apps-*
con la herramienta rules_jvm_external
.
# ...
maven_install(
artifacts = [
"com.google.crypto.tink:apps-webpush:1.11.0",
"com.google.crypto.tink:apps-paymentmethodtoken:1.11.0",
"com.google.crypto.tink:apps-rewardedads:1.11.0",
# ... other dependencies ...
],
repositories = [
"https://maven.google.com",
"https://repo1.maven.org/maven2",
],
)
ObjC
Consulta el instructivo en GitHub.
Python
La biblioteca de Python de Tink, tink-py, admite Python 3.8 o versiones posteriores en macOS (x86-64 y ARM64), Linux (x86-64 y ARM64) y Windows (x86-64). La versión más reciente es la 1.10.0. Se puede instalar de forma local con Pip o usarse con Bazel.
Tink Python proporciona integraciones con KMS de AWS, KMS de Google Cloud y HashiCorp Vault.
Pippin
Puedes instalar la versión binaria de Tink para Python en tu sistema desde PyPI. Para ello, ejecuta el siguiente comando:
pip3 install tink==1.10.0
# Core Tink + Google Cloud KMS extension.
pip3 install tink[gcpkms]==1.10.0
# Core Tink + AWS KMS extension.
pip3 install tink[awskms]==1.10.0
# Core Tink + HashiCorp Vault KMS extension.
pip3 install tink[hcvault]==1.10.0
# Core Tink + all the KMS extensions.
pip3 install tink[all]==1.10.0
Si no se publica un paquete binario para tu entorno, pip
recurre automáticamente a la compilación del proyecto con la distribución de origen publicada en PyPI. Si este es el caso, debes tener instalado Bazel
o Bazelisk y el compilador de protobuf para compilar el proyecto correctamente.
Bazel
Los usuarios de Bazel pueden incluir Tink Python en su archivo WORKSPACE
de la siguiente manera:
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
http_archive(
name = "tink_py",
urls = ["https://github.com/tink-crypto/tink-py/releases/download/v1.10.0/tink-py-1.10.0.zip"],
strip_prefix = "tink-py-1.10.0",
sha256 = "767453aae4aad6de4fbb4162992184aa427b7b27864fe9912c270b24c673e1cc",
)
load("@tink_py//:tink_py_deps.bzl", "tink_py_deps")
tink_py_deps()
load("@rules_python//python:repositories.bzl", "py_repositories")
py_repositories()
load("@tink_py//:tink_py_deps_init.bzl", "tink_py_deps_init")
tink_py_deps_init("tink_py")
Próximos pasos
Una vez que hayas terminado de configurar Tink, continúa con los pasos estándar de uso de Tink:
- Elige una primitiva: Decide qué primitiva usar según tu caso de uso.
- Administrar claves: Protege tus claves con tu KMS externo, genera conjuntos de claves y rota tus claves