调试注册错误
使用集合让一切井井有条
根据您的偏好保存内容并对其进行分类。
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 是否支持您的密钥类型以您的语言显示。
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-07-25。
[null,null,["最后更新时间 (UTC):2025-07-25。"],[[["\u003cp\u003eTink error messages like "No wrapper registered" often indicate missing primitive registration, fixable with \u003ccode\u003eTinkConfig.register()\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eErrors mentioning key type and primitive usually mean an incompatible keyset is used, like requesting a Mac with an Aead keyset.\u003c/p\u003e\n"],["\u003cp\u003ePublic key primitives require keysets obtained via \u003ccode\u003eGetPublicKeysetHandle()\u003c/code\u003e to avoid key type mismatches.\u003c/p\u003e\n"],["\u003cp\u003eVerify key type and primitive compatibility by checking the cross-language test resources and supported key types documentation for your language.\u003c/p\u003e\n"]]],["Tink error messages like \"No wrapper registered\" or \"Unable to get primitive\" indicate issues with key and primitive type registration or compatibility. For \"No wrapper\" errors, register the type using `TinkConfig.register()` or specialized methods like `KeyDerivationConfig.register()`. For primitive-key type mismatches, verify that the keyset's type matches the requested primitive, and use `GetPublicKeysetHandle()` for public keys. Check supported key type lists if registration or type-checking does not fix the issue.\n"],null,["# Debug Registration Errors\n\nTink sometimes produces error messages such as\n\n- `No wrapper registered for type`\n- `No manager for type T has been registered`\n- `Unable to get primitive interface P for key of type T`\n\nThis page helps to debug such issues.\n\nCase 1: The error stars with \"No wrapper found\" or similar.\n-----------------------------------------------------------\n\nYou are calling `GetPrimitive()` to get a primitive type that has not been\nregistered, which is generally fixed by calling `TinkConfig.register()`\nsomewhere earlier in the binary. Registering once suffices and can be done at\nstartup.\n\nSome primitives need more specialized registration.\n\n- `KeysetDeriver` requires `KeyDerivationConfig.register()`\n- `JwtMac` requires `JwtMacConfig.register()`\n- `JwtPublicKeySign` and `JwtPublicKeyVerify` require `JwtSignatureConfig.register()`\n\nCase 2: The error lists a key type and a primitive.\n---------------------------------------------------\n\nFor example, the error might say `Unable to get primitive interface P for key\nof type T` for some specific value of P and T.\n\nIn this case, Tink is unable to create the specific primitive you asked it\nfor the keyset you have. Typically, this happens because you have a keyset\nfor the wrong type. For example, you might be asking for a Mac, but the keyset\nis for Aead.\n\nOne common case is that one tries to get a public key primitive from a keyset\ncontaining private keys. To see if this is the problem, consider calling\n`GetPrimitive()` on the result of `GetPublicKeysetHandle()` instead.\n\nIf this does not help, an up to date list of the key types can be found\n[here](https://github.com/tink-crypto/tink-cross-lang-tests/blob/main/cross_language/cross_language/tink_config/_key_types.py),\nin our [cross language tests](https://github.com/tink-crypto/tink-cross-lang-tests/blob/main/cross_language/cross_language). You should check if the primitive P is listed\ntogether with the key type T.\n\nIf the primitive is listed with the corresponding key type, it may be that\nthe Tink implementation of your language does not support key type T. Check the\n[list of key types](/tink/supported-key-types) to see if Tink supports your key\ntype in your language."]]