Registro

Esta es una definición informal de Registry para comenzar con los conceptos básicos:

Pero:

Dicho esto, puede ser útil comprender esta clase para trabajar con Tink de manera eficiente por el momento.

¿Qué sucede cuando llamas a getPrimitive() en un controlador de conjunto de claves? Reenvía tu llamada al registro1, que contiene objetos con métodos concretos para crear claves y primitivas, como una clave AesGcm o una instancia ChunkedMac. La tarea del registro es desviar la llamada al objeto correcto. Esto solo funciona si el objeto está registrado, por lo que es importante que siempre registres las primitivas que usarás.

Pero ¿qué sucede si uso una biblioteca que ya registró las primitivas que necesito?

Ese es precisamente el problema. Y una de las razones por las que se eliminó Registry. Porque, en este caso, el código funciona solo hasta que los autores de la biblioteca deciden dejar de registrar esa primitiva. En este punto, se interrumpe el código, y el motivo no es obvio ni confuso. Por lo tanto, siempre registra lo que usas. Por ejemplo, si pretendes usar MAC en tu código Java, debes hacer lo siguiente en la fase de configuración:

MacConfig.register()

Este código garantiza que todos los objetos necesarios se registren en los lugares necesarios para que uses la primitiva de MAC.

Este problema tiene otra cara. Es posible que algunas de tus dependencias registren elementos que en realidad no necesitas y de los que preferirías no depender. Esta es otra razón para quitar el registro global.


  1. a la instancia singleton global de la clase Registry, para ser precisos. Usamos el nombre "Registro" para ambos, la clase y el singleton, indistintamente.