Assinatura digital¶
Realiza a assinatura digital do hash de um conteúdo, utilizando a chave privada do certificado do usuário.
POST /signature¶
Solicitação¶
A aplicação deve enviar os dados a serem assinados ao endpoint de assinatura do PSC SerproID, https://serproid.serpro.gov.br/oauth/v0/oauth/signature postando os parâmetros via application/json. O token de acesso gerado em Token de acesso deverá ser enviado via HTTP Header no parâmetro Authorization.
Parâmetros¶
HEADER:
- Authorization- (string) - valor "Bearer <access_token>", onde <access_token> se refere ao token de acesso obtido em Token de acesso
JSON:
- hashes- (array) - lista com os dados a serem assinados, limite atual de 5- id- (string) - utilizado para identificação do hash
- alias- (string) - descrição do conteúdo a ser assinado
- hash- (string) - Base64 do hash do conteúdo a ser assinado
- hash_algorithm- (string) - OID (Objetct Identifier) do algoritmo de hash utilizado, valores possíveis:- 2.16.840.1.101.3.4.2.1: representa o algoritmo SHA-2 256 e- 2.16.840.1.101.3.4.2.3: representa o algoritmo SHA-2 512
- signature_format- (string) - o tipo de assinatura a ser realizada,- RAWpara assinatura digital simples (PKCS1) e- CMSpara assinatura digital qualificada (PKCS7)
 
Exemplo¶
O exemplo encontra-se com quebras de linha e espaços para melhor leitura
POST /oauth/v0/oauth/signature HTTP/1.1
Host: serproid.serpro.gov.br
Content-Type: application/json
Authorization: Bearer <token_de_acesso>
{
    "hashes":[
        {
            "id": "<identificador do hash>",
            "alias": "<descrição do conteúdo a ser assinado>",
            "hash": "<base_64_hash_sha_256>",
            "hash_algorithm": "<oid_do_hash_utilizado>",
            "signature_format": "<tipo_de_assinatura_desejada>"
        }
    ]
}
curl -X POST \
https://serproid.serpro.gov.br/oauth/v0/oauth/signature \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <token_de_acesso>' \
-d '{
    "hashes":[
        {
            "id": "<identificador do hash>",
            "alias": "<descrição do conteúdo a ser assinado>",
            "hash": "<base_64_hash_sha_256>",
            "hash_algorithm": "<oid_do_hash_utilizado>",
            "signature_format": "<tipo_de_assinatura_desejada>"
        }
        ]
    }'
Poderá ser utilizado os algoritmos de hash SHA2 256 e SHA2 512 e para realização do encode o Base64. A operação para obtenção do hash deve ser similar à seguinte função de exemplo em alto nível: base64(funcao-hash(conteudo_a_ser_assinado)). A função funcao-hash deve retornar um array de bytes contendo o hash do conteúdo a ser assinado, o resultado final da operação após a função base64 deve ser uma string.
Resposta da solicitação¶
O PSC SerproID irá realizar a assinatura digital utilizando a chave privada do certificado que o usuário autorizou no processo de solicitação de autorização.
Solicitação válida (Sucesso)¶
Se a solicitação estiver válida, o PSC SerproID irá retornar a solicitação com HTTP code 200 no formato application/json.
Parâmetros¶
JSON:
- signatures- (array) - lista com as assinaturas- id- (string) - identificação do hash conforme apresentado na solicitação
- raw_signature- (string) - assinatura do hash no formato solicitado, PKCS7 ou Base64 da assinatura RAW
 
Exemplo¶
HTTP/1.1 200 OK
Content-Type: application/json
{
    "signatures":[
        {
            "id": "<identificador_do_hash>",
            "raw_signature": "<assinatura_no_formato_solicitado>"
        }
    ]
}
Solicitação inválida (Erro)¶
Se a solicitação for considerada inválida, seja devido a verificação dos parâmetros informados ou caso algum erro inesperado aconteça, o PSC SerproID retornará um erro no formato application/json com o HTTP code correspondente ao tipo do erro.
Parâmetros¶
JSON:
- code- (string) - código do tipo do erro
- msg- (string) - mensagem de erro
- debug- (string) - informações adicionais sobre o erro
Exemplo¶
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
    "code": "TOKEN_DE_ACESSO_INVALIDO",
    "msg": "Token de acesso não informado ou inválido",
    "debug": ""
}
Lista de erros¶
| Tipo do erro | HTTP Code | Detalhes | 
|---|---|---|
| TOKEN_DE_ACESSO_INVALIDO | 401 | Token de acesso não informado ou inválido | 
| TOKEN_JA_UTILIZADO | 401 | Token de acesso já utilizado | 
| NAMESPACE_BLOQUEADO | 401 | Acesso bloqueado por limite de erro de credenciais | 
| ASSINATURA_DADOS_INVALIDOS | 412 | Hash(es) para assinatura não informado(s) | 
| ASSINATURA_NOT_SINGLE | 412 | Token de acesso gerado apenas para escopo " single_signature" e mais de um hash informado | 
| MULTI_SIGNATURE_ASSINATURAS_MAXIMO_ATINGIDO | 412 | Valor máximo de assinaturas atingido | 
| MULTI_SIGNATURE_TAMANHO_MAXIMO_ATINGIDO | 412 | Valor máximo em bytes dos hashes atingido | 
| INVALID_SIGNATURE | 412 | Os parâmetros informados são inválidos ou o certificado não é mais válido (expirado ou revogado) Cenários possíveis: 
 | 
| TOKEN_USO_EXCLUSIVO_AUTENTICACAO | 403 | A autorização concedida é para fim exclusivo de autenticação e não possibilita a geração de assinatura digital. | 
| TOKEN_REVOGADO | 403 | O token apresentado se encontra revogado. | 
| SIGN_FAIL | 500 | Algo inesperado aconteceu e não foi possível realizar a assinatura |