> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Assinando e verificando

> Algoritmos de assinatura por especificação de chave e por que você não deve pré-hash.

<a id="signing" />

## Assinatura

<Tabs>
  <Tab title="API">
    ```bash theme={null}
    POST /v1/keys/{key_id}/sign
    { "message": "<base64 of the raw payload>" }
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic kms key sign <key-id> --message "$(base64 -w0 payload.bin)"
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    sig, err := kms.New(cfg).Sign(ctx, keyID, &kms.SignRequest{
        Message: payload,
    })
    ```

    `Message` pega os bytes brutos — o SDK base64-codifica-os para você, então não os codifique você mesmo.
  </Tab>
</Tabs>

<Warning>
  Passe a **mensagem bruta**, não um resumo. O serviço faz o hash com SHA-256 do lado do servidor, então uma entrada pré-hash é hash duas vezes e produz uma assinatura que nada irá verificar.
</Warning>

`signing_algorithm` é opcional; omitido, o padrão para a especificação é usado, e o algoritmo realmente aplicado retorna na resposta.

| `key_spec` | Algoritmos aceites | Default |
| - | - | - |
| `rsa-2048`, `rsa-4096` | `RSASSA_PSS_SHA_256`, `RSASSA_PKCS1_V1_5_SHA_256` | `RSASSA_PSS_SHA_256` |
| `ecdsa-p256` | `ECDSA_SHA_256` | `ECDSA_SHA_256` |

Um algoritmo que não corresponde à especificação é rejeitado com `400 KMS_UNSUPPORTED_SIGNING_ALGORITHM` em vez de ser tentado.

As assinaturas retornam nas codificações padrão, então nada downstream precisa de manuseio especial: RSA-PSS usa `saltLen = hashLen = 32`, e ECDSA retorna a sequência ASN.1 DER `(r, s)` do ANSI X9.62.

`POST /v1/keys/{key_id}/verify` responde `{"signature_valid": false}` para uma assinatura que simplesmente não corresponde. Isso é um `200`, não um erro — um erro significa que a solicitação ou o backend estava errado, não que a assinatura estava errada.

<Note>
  A API não expõe a metade pública de uma chave assimétrica, então a verificação passa por `verify` ao invés de offline contra uma chave publicada. Planeje uma chamada por verificação — e note que `verify` é uma ação separada do IAM, então uma parte que deve apenas verificar assinaturas nunca precisa de `kms:Sign`.
</Note>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.