# Digital Signature

O **Digital Signature** assina e verifica mensagens com base em chaves públicas e privadas.

## Parâmetros

Dê uma olhada nos parâmetros de configuração do componente. Parâmetros suportados por [expressões *Double Braces*](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/overview) estão marcados com `(DB)`.

<table data-full-width="true"><thead><tr><th>Parâmetro</th><th>Descrição</th><th>Valor padrão</th><th>Tipo de dado</th></tr></thead><tbody><tr><td><strong>Account</strong></td><td>Use este parâmetro para definir a conta a ser usada pelo conector.</td><td>N/A</td><td><em>String</em></td></tr><tr><td><strong>Operation</strong></td><td>Tipos de operação do componente (<em>Sign Fields, Sign Payload</em> ou <em>Verify</em>).</td><td><em>Sign Fields</em></td><td><em>String</em></td></tr><tr><td><strong>Charset</strong></td><td>Nome da codificação que faz a leitura do valor.</td><td>UTF-8</td><td><em>String</em></td></tr><tr><td><strong>Hash Algorithm</strong></td><td>Algoritmo a ser utilizado para assinar/verificar os dados (ex.: SHA256WithRSA).</td><td>SHA256WithRSA</td><td><em>String</em></td></tr><tr><td><strong>Public Key Algorithm</strong></td><td>Tipo do algoritmo de chave pública (ex.: RSA). Este campo fica disponível apenas quando <em>Verify</em> estiver selecionado no parâmetro <strong>Operation</strong>.</td><td>RSA</td><td><em>String</em></td></tr><tr><td><strong>Hash</strong> <code>(DB)</code></td><td>Base do tipo base64 ou hex a ser verificada em relação ao <em>payload</em>. Este campo fica disponível apenas quando <em>Verify</em> estiver selecionado no parâmetro <strong>Operation</strong>.</td><td>N/A</td><td><em>String</em></td></tr><tr><td><strong>Sign Fields</strong></td><td>Campos a serem assinados/verificados (devem ser separados por vírgula). Este campo fica disponível apenas quando <em>Sign Fields</em> estiver selecionado no parâmetro <strong>Operation</strong>.</td><td>parameter</td><td><em>String</em></td></tr><tr><td><strong>Hash in Hexadecimal</strong></td><td>Se a opção estiver ativada, o valor a ser verificado ou assinado deve ser fornecido no formato hex; do contrário, será assinada ou verificada como base64.</td><td><em>False</em></td><td>Booleano</td></tr><tr><td><strong>Payload</strong> <code>(DB)</code></td><td>Definido através de um valor único ou <em>Double Braces.</em> Este campo fica disponível apenas quando <em>Sign Payload</em> ou <em>Verify</em> estiverem selecionados no parâmetro <strong>Operation</strong>.</td><td>N/A</td><td><em>String</em></td></tr><tr><td><strong>Fail On Error</strong></td><td>Se a opção estiver habilitada, a execução do <em>pipeline</em> com erro será interrompida; do contrário, a execução do <em>pipeline</em> continua, mas o resultado vai mostrar um valor falso para a propriedade "<em>success</em>".</td><td><em>False</em></td><td>Booleano</td></tr></tbody></table>

{% hint style="info" %}
**Importante:** para assinar, você precisa configurar uma *account* PRIVATE\_KEY ou enviar a propriedade da chave via *body*. Para verificar, você precisa configurar uma *account* PUBLIC\_KEY ou enviar a propriedade da chave via *body*.
{% endhint %}

## *Digital Signature* em Ação <a href="#digital-signature-em-ao" id="digital-signature-em-ao"></a>

### Operação *Sign Fields* <a href="#operao-sign-fields" id="operao-sign-fields"></a>

1\. Na sua paleta de componentes, selecione o ***Digital Signature***.

2\. Abra as configurações do componente.

3\. No campo ***Operation***, selecione *Sign Fields*.

4\. Insira as seguintes especificações nos campos indicados:

* ***Sign Fields*****:** parameter
* ***Hash Algorithm*****:** SHA256WithRSA

5\. Mantenha as opções ***Hash in Hexadecimal*** e ***Fail On Error*** ativadas.

6\. Clique em Confirmar.

7\. Faça o *deploy* do *pipeline*.

8\. O *pipeline* vai receber um *payload* como este:

```
{"parameter": "Test for encryption"}
```

9\. O resultado do teste executado vai aparecer conforme demonstrado abaixo:

```
{
"parameter": "....032281762E01B6C50C1DE825A2FD5A177CCFD5C1DB54E88ADD188A0B80311E672EDE5F8B......"
}
```

### Operação *Sign Payload* <a href="#operao-sign-payload" id="operao-sign-payload"></a>

1\. Na sua paleta de componentes, selecione o ***Digital Signature***.

2\. Abra as configurações do componente.

3\. No campo ***Operation***, selecione *Sign Payload*.

4\. Insira as seguintes especificações nos campos indicados:

* ***Payload*****:** \[{ \\"result\\": \\"{{ message.$.parameter }}\\"}]
* ***Hash Algorithm*****:** SHA256WithRSA

5\. Mantenha as opções ***Hash in Hexadecimal*** e ***Fail On Error*** ativadas.

6\. Clique em Confirmar.

7\. Faça o *deploy* do *pipeline*.

8\. O resultado do teste executado vai aparecer conforme demonstrado abaixo:

```
{
"result": "....032281762E01B6C50C1DE825A2FD5A177CCFD5C1DB54E88ADD188A0B80311E672EDE5F8B......"
}
```

### Operação *Verify* <a href="#operao-verify" id="operao-verify"></a>

1\. Na sua paleta de componentes, selecione o ***Digital Signature***.

2\. Abra as configurações do componente.

3\. No campo ***Operation***, selecione *Verify*.

4\. Insira as seguintes especificações nos campos indicados:

* ***Sign Fields:*** {{ message.$.signed }}
* ***Parameter*****:** {{ message.$.rawData }}
* ***Hash Algorithm*****:** SHA256WithRSA
* ***Public Key Algorithm*****:** RSA

5\. Mantenha as opções ***Hash in Hexadecimal*** e ***Fail On Error*** ativadas.

6\. Clique em Confirmar.

7\. Faça o *deploy* do *pipeline*.

8\. O *pipeline* vai receber um *payload* como este:

```
{
"rawData": "Test for encryption",
"signed": "...032281762E01B6C50C1DE825A2FD5A177CCFD5C1DB54E...."
}
```

\
9\. O resultado do teste executado vai aparecer conforme demonstrado abaixo:

```
{
"success": true
}
```
