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()
来获取尚未注册的基本类型,通常可以通过在二进制文件中的较早位置调用 TinkConfig.register()
来解决此问题。只需注册一次即可,并且可在启动时完成。
某些基元需要更专业的注册。
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 的。
一种常见的情况是尝试从包含私钥的密钥集中获取公钥基元。如需了解这是否就是问题所在,请考虑改为对 GetPublicKeysetHandle()
的结果调用 GetPrimitive()
。
如果这没有帮助,请在此处的跨语言测试中查看密钥类型的最新列表。您应检查基元 P 是否与密钥类型 T 一起列出。
如果基元与相应的密钥类型一起列出,可能是因为您语言的 Tink 实现不支持密钥类型 T。请查看密钥类型列表,了解 Tink 是否支持您的密钥类型以您的语言显示。