レジストリ

まず、レジストリの非公式な定義を紹介します。

一方、

とはいえ、当面は Tink を効率的に使用するために、このクラスを理解しておくと役立つ場合があります。

キーセット ハンドルで getPrimitive() を呼び出すとどうなりますか。呼び出しが Registry1 に転送されます。このレジストリには、鍵を作成するための具体的なメソッドとプリミティブ(AesGcm キーや ChunkedMac インスタンスなど)を含むオブジェクトが含まれています。レジストリのタスクは、呼び出しを適切な オブジェクトに転送することです。これは、オブジェクトが登録されている場合にのみ機能します。そのため、使用するプリミティブを常に登録することが重要です

しかし、必要なプリミティブをすでに登録されているライブラリを使用する場合はどうでしょうか?

そこが問題なんだ。Registry が削除される理由の一つです。この場合、ライブラリの作成者がそのプリミティブを登録しないことを決定するまでは、コードが機能しません。この時点でコードは破損しますが、理由は明らかでなく、混乱を招くものです。そのため、使用するものを必ず登録してください。たとえば、Java コードで MAC を使用する場合は、設定フェーズで次のことを行う必要があります。

MacConfig.register()

このコードにより、MAC プリミティブを使用するのに必要な場所にすべての必要なオブジェクトが登録されます。

この問題にはもう一つの側面があります。依存関係の中には、実際には必要のないものや、依存したくないものが登録されているものがあるかもしれません。これも、グローバル レジストリを削除する理由です。


  1. 正確には Registry クラスのグローバル シングルトン インスタンスに関連付けられます。「Registry」という名前は、クラスとシングルトンの両方に同じ意味で使用されます。