Иногда Tink выдает сообщения об ошибках, например:
No wrapper registered for typeNo manager for type T has been registeredUnable to get primitive interface P for key of type T
Эта страница помогает устранять такие проблемы.
Случай 1. Ошибка начинается со слов "Контейнер не найден" или аналогичных.
Вы вызываете GetPrimitive(), чтобы получить примитивный тип, которого нет в Configuration (или который не был зарегистрирован).
В языках, которые принимают объект Configuration (например, Java и C++), убедитесь, что вы передаете Configuration, который поддерживает примитив. В Java рекомендуется передавать TinkConfig2026.get(), который поддерживает все примитивы Tink (включая KeysetDeriver, JwtMac, JwtPublicKeySign и JwtPublicKeyVerify), или конфигурацию для конкретного примитива, например AeadConfig2026.get(), KeyDerivationConfig2026.get() или JwtConfig2026.get().
В языках или устаревших API, использующих глобальную регистрацию (или если вы передаете RegistryConfiguration.get() в Java), это обычно исправляется вызовом 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.
Один из распространенных случаев – попытка получить примитив открытого ключа из набора ключей, содержащего закрытые ключи. Чтобы проверить, в этом ли проблема, попробуйте вызвать GetPrimitive() для результата GetPublicKeysetHandle().
Если это не поможет, актуальный список типов ключей можно найти здесь, в наших межъязыковых тестах. Проверьте, указан ли примитив P вместе с типом ключа T.
Если примитив указан с соответствующим типом ключа, возможно, реализация Tink для вашего языка не поддерживает тип ключа T. Проверьте список типов ключей, чтобы узнать, поддерживает ли Tink ваш тип ключа на вашем языке.