60 lines
2.0 KiB
JavaScript
60 lines
2.0 KiB
JavaScript
/**
|
|
* Exemplo 02: Assinatura Desacoplada de Digest (Hash SHA-256)
|
|
*
|
|
* Demonstra a arquitetura recomendada do CCSP/1:
|
|
* O documento NUNCA sai do navegador / servidor da aplicação. Apenas o hash
|
|
* de 32 bytes (SHA-256) é enviado ao CyberCore Signer para ser assinado localmente.
|
|
*/
|
|
|
|
import { CyberCoreSigner } from '@cybercore/signer-sdk';
|
|
|
|
async function main() {
|
|
const signer = new CyberCoreSigner({
|
|
applicationName: 'Sistema de Prontuário Eletrônico'
|
|
});
|
|
|
|
await signer.connect();
|
|
|
|
const certs = await signer.getCertificates();
|
|
if (certs.length === 0) {
|
|
throw new Error('Nenhum certificado disponível.');
|
|
}
|
|
|
|
const selectedCert = certs[0];
|
|
|
|
// Simula o documento clínico ou contrato gerado na aplicação
|
|
const documentoTexto = 'Evolução clínica do paciente João da Silva - 20/10/2026. Procedimento sem intercorrências.';
|
|
|
|
// 1. Calcula o SHA-256 no próprio ambiente local
|
|
const digestBase64 = await signer._calculateSha256(documentoTexto);
|
|
console.log('Hash SHA-256 gerado localmente:', digestBase64);
|
|
|
|
// 2. Envia apenas o digest para o CyberCore Signer
|
|
console.log('Aguardando confirmação do usuário no diálogo nativo...');
|
|
const result = await signer.sign({
|
|
certificateId: selectedCert.id,
|
|
digest: digestBase64,
|
|
documentName: 'evolucao_clinica_1048.txt',
|
|
documentType: 'TXT',
|
|
purpose: 'Assinatura de Prontuário Médico',
|
|
expiresInSeconds: 120
|
|
});
|
|
|
|
console.log('Documento assinado com sucesso!');
|
|
console.log('Status:', result.status);
|
|
console.log('Request ID:', result.requestId);
|
|
console.log('Algoritmo:', result.algorithm);
|
|
console.log('Assinatura (Base64):', result.signature.substring(0, 48) + '...');
|
|
console.log('Cadeia X.509 recebida:', result.certificateChain.length, 'certificado(s)');
|
|
|
|
// 3. Validação preliminar da assinatura no client
|
|
const isValid = await signer.verify({
|
|
signature: result.signature,
|
|
digest: result.digest,
|
|
certificate: result.certificate
|
|
});
|
|
console.log('Assinatura é consistente?', isValid);
|
|
}
|
|
|
|
main().catch(console.error);
|