偵錯註冊錯誤

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」或類似內容。

您正在呼叫 GetPrimitive(),以取得不在 Configuration 中 (或尚未註冊) 的原始類型。

在採用 Configuration 物件的語言 (例如 Java 和 C++) 中,請務必傳遞支援原始物件的 Configuration。在 Java 中,建議傳遞 TinkConfig2026.get(),其支援所有 Tink 原語 (包括 KeysetDeriver、JwtMac、JwtPublicKeySign 和 JwtPublicKeyVerify),或原語專屬設定,例如 AeadConfig2026.get()、KeyDerivationConfig2026.get() 或 JwtConfig2026.get()。

在採用全域註冊的語言或舊版 API 中 (或在 Java 中傳遞 RegistryConfiguration.get()),通常只要在二進位檔中較早的位置呼叫 TinkConfig.register(),即可修正這個問題。註冊一次即可,且可在啟動時完成。部分原語需要更專業的註冊:

  • KeysetDeriver 需要 KeyDerivationConfig.register()
  • JwtMac 需要 JwtMacConfig.register()
  • JwtPublicKeySign 和 JwtPublicKeyVerify 需要 JwtSignatureConfig.register()

情況 2:錯誤訊息列出金鑰類型和原始類型。

舉例來說,錯誤訊息可能會顯示 Unable to get primitive interface P for key of type T,其中 P 和 T 為特定值。

在這種情況下,Tink 無法為您擁有的金鑰組建立您要求的特定原始物件。這通常是因為金鑰組類型錯誤。例如,您可能要求 Mac,但金鑰組適用於 Aead。

常見情況是,使用者嘗試從包含私密金鑰的金鑰組取得公開金鑰原始物件。如要確認這是否為問題所在,請考慮改為對 GetPublicKeysetHandle() 的結果呼叫 GetPrimitive()。

如果這無法解決問題,請參閱這裡的跨語言測試,查看最新的金鑰類型清單。請確認原始 P 是否與金鑰類型 T 一併列出。

如果原始物件與對應的金鑰類型一併列出,可能是因為您語言的 Tink 實作不支援金鑰類型 T。請查看金鑰類型清單,確認 Tink 是否支援您所用語言的金鑰類型。