Depurar erros de registro

Às vezes, o Tink produz mensagens de erro como

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

Esta página ajuda a depurar esses problemas.

Caso 1: o erro começa com "No wrapper found" ou algo semelhante.

Você está chamando GetPrimitive() para receber um tipo primitivo que não está no seu Configuration (ou não foi registrado).

Em linguagens que usam um objeto Configuration (como Java e C++), transmita um Configuration compatível com o primitivo. Em Java, recomendamos transmitir TinkConfig2026.get(), que é compatível com todas as primitivas do Tink (incluindo KeysetDeriver, JwtMac, JwtPublicKeySign e JwtPublicKeyVerify), ou uma configuração específica de primitiva, como AeadConfig2026.get(), KeyDerivationConfig2026.get() ou JwtConfig2026.get().

Em linguagens ou APIs legadas que usam o registro global (ou se você transmitir RegistryConfiguration.get() em Java), isso geralmente é corrigido chamando TinkConfig.register() em algum lugar anterior no binário. Basta registrar uma vez, o que pode ser feito na inicialização. Algumas primitivas precisam de um registro mais especializado:

  • KeysetDeriver requer KeyDerivationConfig.register()
  • JwtMac requer JwtMacConfig.register()
  • JwtPublicKeySign e JwtPublicKeyVerify exigem JwtSignatureConfig.register()

Caso 2: o erro lista um tipo de chave e uma primitiva.

Por exemplo, o erro pode dizer Unable to get primitive interface P for key of type T para algum valor específico de P e T.

Nesse caso, o Tink não consegue criar a primitiva específica que você pediu para o conjunto de chaves que você tem. Normalmente, isso acontece porque você tem um conjunto de chaves para o tipo errado. Por exemplo, você pode estar pedindo um Mac, mas o conjunto de chaves é para Aead.

Um caso comum é quando alguém tenta receber uma primitiva de chave pública de um conjunto de chaves que contém chaves privadas. Para ver se esse é o problema, chame GetPrimitive() no resultado de GetPublicKeysetHandle().

Se isso não ajudar, uma lista atualizada dos tipos de chave pode ser encontrada aqui, nos nossos testes entre linguagens. Verifique se a primitiva P está listada com o tipo de chave T.

Se o primitivo estiver listado com o tipo de chave correspondente, talvez a implementação do Tink da sua linguagem não seja compatível com o tipo de chave T. Verifique a lista de tipos de chave para saber se o Tink é compatível com seu tipo de chave no seu idioma.