登録エラーのデバッグ

Tink は、次のようなエラー メッセージを生成することがあります。

  • No wrapper registered for type
  • No manager for type T has been registered
  • Unable to get primitive interface P for key of type T

このページでは、このような問題のデバッグについて説明します。

ケース 1: エラーが「No wrapper found」または同様のメッセージで始まる。

Configuration にない(または登録されていない)プリミティブ型を取得するために GetPrimitive() を呼び出しています。

Configuration オブジェクトを受け取る言語(Java や C++ など)では、プリミティブをサポートする Configuration を渡してください。Java では、すべての Tink プリミティブ(KeysetDeriver、JwtMac、JwtPublicKeySign、JwtPublicKeyVerify など)をサポートする TinkConfig2026.get()、またはプリミティブ固有の構成(AeadConfig2026.get()、KeyDerivationConfig2026.get()、JwtConfig2026.get() など)を渡すことをおすすめします。

グローバル登録を使用する言語または以前の API(または Java で RegistryConfiguration.get() を渡す場合)では、通常、バイナリの前の部分で TinkConfig.register() を呼び出すことで修正されます。登録は 1 回で十分であり、起動時に行うことができます。一部のプリミティブには、より特殊な登録が必要です。

  • KeysetDeriver には KeyDerivationConfig.register() が必要です
  • JwtMac には JwtMacConfig.register() が必要です
  • JwtPublicKeySign と JwtPublicKeyVerify には JwtSignatureConfig.register() が必要です

ケース 2: エラーに鍵タイプとプリミティブがリストされている。

たとえば、P と T の特定の値に対して Unable to get primitive interface P for key of type T というエラーが表示されることがあります。

この場合、Tink は、指定された鍵セットに対してリクエストされた特定のプリミティブを作成できません。通常、これは間違ったタイプの鍵セットがあることが原因です。たとえば、Mac をリクエストしているのに、鍵セットが Aead 用である場合などです。

一般的なケースの 1 つは、秘密鍵を含む鍵セットから公開鍵プリミティブを取得しようとする場合です。これが問題かどうかを確認するには、代わりに GetPublicKeysetHandle() の結果に対して GetPrimitive() を呼び出すことを検討してください。

これで解決しない場合は、クロス言語テストのこちらで、キータイプの最新リストを確認できます。プリミティブ P が鍵タイプ T と一緒にリストされているかどうかを確認する必要があります。

プリミティブが対応する鍵タイプとともにリストされている場合は、お使いの言語の Tink 実装が鍵タイプ T をサポートしていない可能性があります。鍵タイプのリストをチェックして、Tink がお使いの言語で鍵タイプをサポートしているかどうかを確認します。