

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Recupere atributos com a biblioteca PKCS \#11 para AWS CloudHSM Client SDK 5
<a name="pkcs11-attributes-retrieve"></a>

Quando seu aplicativo lê atributos de uma chave ou objeto de certificado, a biblioteca PKCS \#11 envia uma solicitação ao cluster para cada `C_GetAttributeValue` chamada. O número de atributos no modelo não altera o número de solicitações. Uma chamada que solicita dez atributos envia uma solicitação. Dez chamadas em que cada solicitação, um atributo, envia dez solicitações.

Cada chamada lê os atributos do objeto do seu cluster em uma solicitação e, em seguida, copia os valores que seu modelo solicita. A biblioteca PKCS \#11 não armazena os valores em cache, então cada chamada envia uma nova solicitação.

Para reduzir o número de solicitações que seu aplicativo envia, siga estas recomendações:
+ Solicite todos os atributos que você precisa em um modelo. Crie um único modelo que contenha todos os atributos desejados e passe-o para uma `C_GetAttributeValue` chamada. O exemplo a seguir lê três atributos de uma chave com uma chamada.

  ```
  CK_OBJECT_CLASS obj_class;
  CK_BYTE label[128];
  CK_BYTE id[128];
  
  CK_ATTRIBUTE attrs[] = {
          {CKA_CLASS, &obj_class, sizeof(obj_class)},
          {CKA_LABEL, label,       sizeof(label)},
          {CKA_ID,    id,          sizeof(id)},
  };
  
  rv = funcs->C_GetAttributeValue(session, object, attrs,
                                  sizeof(attrs) / sizeof(CK_ATTRIBUTE));
  ```

  Para obter mais informações, consulte [ Listar os principais atributos ](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/) no GitHub site.
+ Solicite somente os atributos que seu objeto suporta e que você possa ler. Quando seu modelo nomeia um atributo que o objeto não tem, `C_GetAttributeValue` define `ulValueLen` como `CK_UNAVAILABLE_INFORMATION` para esse atributo e retorna`CKR_ATTRIBUTE_TYPE_INVALID`. Um atributo sensível se comporta da mesma maneira e retorna. `CKR_ATTRIBUTE_SENSITIVE` Em ambos os casos, os outros atributos em seu modelo ainda recebem seus valores. `ulValueLen`Verifique cada atributo em vez de apenas o valor de retorno da chamada. Para os atributos que cada tipo de objeto suporta e para os atributos que são sensíveis, consulte[Tabelas de atributos da biblioteca PKCS \#11 para AWS CloudHSM Client SDK 5](pkcs11-attributes-interpreting.md).
+ Verifique quantas chamadas sua vinculação de idioma faz. Uma associação PKCS \#11 para uma linguagem como Python ou Java decide quantas `C_GetAttributeValue` chamadas ela envia. Algumas vinculações enviam uma chamada para cada atributo e outras enviam duas. Use a interface que sua associação fornece para ler vários atributos ao mesmo tempo e meça as chamadas que seu aplicativo envia.
+ Armazene valores de atributos em cache em seu aplicativo. Leia os atributos de um objeto uma única vez e armazene os valores de que seu aplicativo precisa. Você pode reutilizar um valor em cache até que algo altere o objeto. Quando outros aplicativos ou usuários puderem modificar seus objetos, atualize seu cache depois disso.
+ Aloque seus buffers antes de ler um atributo. O padrão PKCS \#11 descreve um padrão de duas passagens para valores de comprimento variável. Seu aplicativo chama `C_GetAttributeValue` com `pValue` set to `NULL_PTR` para saber o tamanho e, em seguida, o chama novamente para ler o valor. Ambas as chamadas enviam uma solicitação. Quando você souber um tamanho de buffer que contenha os valores esperados, aloque os buffers primeiro e leia os valores com uma chamada.

  Um buffer muito pequeno retorna `CKR_BUFFER_TOO_SMALL` para esse atributo e a chamada ainda envia uma solicitação. Escolha tamanhos de buffer que sejam generosos o suficiente para os valores que você espera. Os atributos que contêm um modelo, como`CKA_WRAP_TEMPLATE`, ainda precisam do padrão de duas passagens.

**nota**  
Essas recomendações se aplicam tanto a objetos-chave quanto a objetos de certificado, e limites diferentes se aplicam a cada um. O armazenamento de certificados tem um limite fixo de taxa de leitura e cada `C_GetAttributeValue` chamada em um objeto de certificado usa uma operação de leitura a partir dele. Para objetos-chave, o atributo de aceleração do seu HSMs lê quando eles atingem a capacidade, em vez de uma taxa fixa. A biblioteca PKCS \#11 repete essas solicitações automaticamente. Enviar menos solicitações ajuda seu aplicativo a permanecer dentro dos dois limites. Para obter mais informações, consulte [Limites de armazenamento de certificados](pkcs11-certificate-storage-limits.md) e [Controle de utilização do HSM](troubleshoot-hsm-throttling.md).