Exemplo JAVA

Pré requisitos:

  • Java instalado.

  • Maven instalado.

Com tudo preparado, adicione ao seu projeto as dependências Maven que iremos usar, da seguinte forma:

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.68</version>
</dependency>

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.68</version>
</dependency>

Após incluir as dependências do BouncyCastle ao seu projeto, crie um arquivo JAVA e adicione o seguinte código de exemplo:


import org.bouncycastle.asn1.*;
import org.bouncycastle.tsp.*;
import org.bouncycastle.util.encoders.Base64;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

public class ACTIntegrationSample {

    public static void main(String[] args) {
        
        // URL do servidor de carimbo de tempo (SCT)
        String timestampServerURL = "https://gateway-act.hom.vaultid.com.br/api/act";

        // Dados que serão carimbados
        byte[] dataToTimestamp = "Dados a serem carimbados".getBytes();
        
        // Credenciais de autenticação enviados pela equipe de integração
        String username = "usuario";
        String password = "senha";
        String basicAuth = "Basic " + Base64.toBase64String((username + ":" + password).getBytes());

        try {
            
            // Criando a solicitação TSQ (Timestamp Query)
            TimeStampRequestGenerator tsqGenerator = new TimeStampRequestGenerator();
            TimeStampRequest tsq = tsqGenerator.generate(TSPAlgorithms.SHA256, dataToTimestamp);

            // Convertendo a solicitação TSQ para bytes
            byte[] tsqBytes = tsq.getEncoded();

            // Enviando a solicitação TSQ para o servidor
            HttpURLConnection connection = (HttpURLConnection) new URL(timestampServerURL).openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/timestamp-query");
            connection.setRequestProperty("Authorization", basicAuth); // Adicionando a autenticação Basic
            connection.setDoOutput(true);
            connection.getOutputStream().write(tsqBytes);

            // Lendo a resposta do servidor
            TimeStampResponse tsr = new TimeStampResponse(connection.getInputStream());

            // Exibindo a resposta TSR (Timestamp Response) recebida
            System.out.println("Timestamp Response:");
            System.out.println(new String(Base64.encode(tsr.getEncoded())));

            // Verificando a resposta
            tsr.validate(tsq);

            // Extraindo a tempo exato do carimbo de tempo
            TimeStampToken timeStampToken = tsr.getTimeStampToken();
            System.out.println("Timestamp: " + timeStampToken.getTimeStampInfo().getGenTime());

            // Fechando a conexão
            connection.disconnect();
            
        } catch (IOException | TSPException e) {
            e.printStackTrace();
        }
    }
}

Compile o projeto com as dependencias, e execute o código de exemplo, será exibido a resposta da ACT que é o carimbo de tempo em si (TSR), codificado em Base64, logo abaixo será mostrado o tempo exato do carimbo.

É feito uma validação simples do carimbo de tempo (TSR) no exemplo acima, mas é importante fazer todas as validações necessárias após receber o carimbo, conforme o DOC-ICP-12, sessão 4.3.

Referencia:

https://www.gov.br/iti/pt-br/assuntos/legislacao/resolucoes/resolucoes-old/DOCICP12v2.1CompiladaRes_188.pdf

Last updated