Exemplo PHP
Pré requisitos:
PHP instalado.
Composer instalado.
Com tudo preparado, precisamos instalar as dependencias do projeto, para isso execute os seguintes comandos:
composer require phpseclib/phpseclib
composer require guzzlehttp/guzzle
Estes comandos acima irão gerar uma pasta vendor com todas as dependencias, e os arquivos composer.json e composer.lock.
Com as dependencias instaladas, crie um arquivo PHP, e inclua o seguinte código:
<?php
require_once 'vendor/autoload.php'; // Inclui o autoload do Composer
use phpseclib3\File\ASN1;
use GuzzleHttp\Client;
// URL da Autoridade de Carimbo de Tempo (ACT)
$act_url = 'https://gateway-act.hom.vaultid.com.br/api/act';
// Usuário e senha forncecidos pela equipe de integração
$username = 'usuario';
$password = 'senha';
// Dados a serem carimbados
$data_to_stamp = 'Hello, world!';
// Montar a solicitação TSQ em ASN.1
// Mapeamento ASN.1
$tsq_mapping = [
'type' => ASN1::TYPE_SEQUENCE,
'children' => [
'version' => ['type' => ASN1::TYPE_INTEGER, 'value' => 1],
'messageImprint' => [
'type' => ASN1::TYPE_SEQUENCE,
'children' => [
'hashAlgorithm' => [
'type' => ASN1::TYPE_SEQUENCE,
'children' => [
'algorithm' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER, 'value' => 'sha256'],
'parameters' => ['type' => ASN1::TYPE_NULL],
],
],
'hashedMessage' => ['type' => ASN1::TYPE_OCTET_STRING, 'value' => hash('sha256', $data_to_stamp)],
],
],
'certReq' => ['type' => ASN1::TYPE_BOOLEAN, 'value' => true],
],
];
$tsq_content = $request = [
'version' => 1,
'messageImprint' => [
'hashAlgorithm' => [
'algorithm' => '2.16.840.1.101.3.4.2.1',
'parameters' => ['null' => '']
],
'hashedMessage' => base64_encode(hex2bin(hash('sha256', $data_to_stamp))),
],
'certReq' => true,
];
// Codificar o mapeamento ASN.1 e o conteúdo
$tsq_der = ASN1::encodeDER($tsq_content,$tsq_mapping);
// Criar uma instância do cliente http Guzzle
$client = new Client();
// Enviar a solicitação POST para a ACT
$response = $client->post($act_url, [
'headers' => [
'Content-Type' => 'application/timestamp-query',
'Authorization' => 'Basic ' . base64_encode("$username:$password") //Autenticação Basic Authentication
],
'body' => $tsq_der,
]);
// Obter o corpo da resposta da ACT
$tsr = $response->getBody()->getContents();
//Este é o Carimbo de Tempo (TSR):
$tsr;
// Aqui será feito o decode para visualizar o conteúdo do carimbo de tempo
$tsr_decoded = ASN1::decodeBER($tsr);
if (!$tsr_decoded) {
echo 'Erro ao decodificar a resposta TSR.';
} else {
echo 'Resposta TSR: '.PHP_EOL; print_r($tsr_decoded[0]['content']); PHP_EOL;
}
?>
Execute o código de exemplo, será exibido um array com o parse do carimbo de tempo enviado pela ACT.
Neste exemplo não é feito nenhuma validação do carimbo de tempo (TSR), mas é importante fazer todas as validações necessárias após receber o carimbo, conforme o DOC-ICP-12, sessão 4.3.
Referencia:
Last updated