Timestamps RFC3161 nativos

HPDFHeadlessTimestamp fornece criação nativa de pedidos com OpenSSL 3 e verificação autenticada de respostas e de tokens RFC3161 em Linux e Windows

HPDFSignHeadlessCMS, SignToFile e SignPFXToFile calculam o hash dos octetos reais da assinatura CMS com SHA-256 e anexam o token de resposta verificado como atributo não assinado signatureTimeStampToken

Configure THPDFHeadlessCMSOptions.Timestamp.TrustedCAFile e Transport antes de assinar, e defina RequireTimestamp quando um token autenticado for obrigatório

Options := THPDFHeadlessCMSOptions.Default;
Options.TrustedCAFile := SignerTrustFile;
Options.RequireTimestamp := True;
Options.Timestamp.TrustedCAFile := TSATrustFile;
Options.Timestamp.TrustedCRLFile := TSACRLFile;
Options.Timestamp.RequireRevocation := True;
Options.Timestamp.Transport := RequestTimestamp;
Options.Timestamp.TransportContext := TransportContext;
Report := Document.SignPFXToFile(FieldIndex, OutputFile, IdentityPFX,
  IdentityPassword, Options);

O transport próprio de quem chama recebe um TimeStampReq DER completo e devolve um TimeStampResp DER completo, permitindo a quem chama controlar autenticação HTTP, política TLS, prazos e cancelamento durante o I/O de rede

Os pedidos contêm nonces criptográficos frescos e pedem os certificados do TSA; as respostas têm de corresponder tanto ao nonce do pedido como ao valor de assinatura fornecido

A verificação autentica o token CMS completo, verifica o caminho de certificados do TSA e o EKU crítico de timestamp, verifica o binding ESS signing-certificate e compara o messageImprint SHA-256, SHA-384 ou SHA-512 contra os octetos reais da assinatura usando o algoritmo transportado pelo TSTInfo

RequireRevocation carrega o ficheiro explícito de CRLs e ativa verificações de revogação de certificados com emissores verificados; evidência em falta, expirada ou revogada falha em vez de produzir um resultado fidedigno

Tokens existentes podem ser verificados offline sem o nonce original do pedido; a verificação de respostas frescas verifica adicionalmente o nonce original do pedido e o status da resposta

Callbacks que já fornecem um imprint

As funções ForImprint aceitam um digest pré-calculado SHA256, SHA384 ou SHA512 e o valor THPDFHeadlessTimestampDigest dele e depois preservam esses bytes exatos de digest no pedido RFC3161 sem calcular o hash deles outra vez

Use estas funções quando um callback de assinatura já fornecer o messageImprint, incluindo o THPDFCMSTimestampCallback de Windows; os helpers de pedidos de assinaturas em bruto continuam a usar SHA256, enquanto a verificação offline de tokens calcula o hash dos octetos originais da assinatura com o algoritmo realmente suportado do TSTInfo

Token := HPDFRequestHeadlessTimestampForImprint(MessageImprint,
  htdSHA384, TimestampOptions);

O comprimento do imprint tem de ser 32, 48 ou 64 bytes para o digest selecionado; a verificação vinculada a pedidos verifica adicionalmente o nonce fresco original, o OID do digest, a assinatura CMS, o binding de certificados TSA, raízes de confiança explícitas, EKU e evidência configurada de revogação

Veja a criação de pedidos, a verificação de respostas, a verificação offline de tokens, o transport e os valores de digests

A validade de certificados e de CRLs fidedignos é avaliada no momento da verificação, pelo que um token arquivado cujo certificado TSA tenha expirado precisa de uma política e evidência de validação de arquivo, em vez de contornar as verificações atuais de confiança

Tokens malformados, atributos de timestamps duplicados, imprints desencontrados, raízes desconhecidas, EKUs inválidos, certificados TSA expirados ou revogados, CRLs expiradas, orçamentos de respostas e cancelamento estão cobertos por testes nativos e independentes de aceitação

Os relatórios de verificação de timestamps são separados da confiança em certificados de signers de documentos; um timestamp de assinatura não autentica revisões PDF posteriores não assinadas

As funções de timestamps carregam os símbolos OpenSSL de timestamps delas apenas quando usadas; defina HOTPDF_OPENSSL_LIBRARY com uma biblioteca partilhada OpenSSL 3 explícita da arquitetura correspondente quando necessário