Timestamps RFC3161 nativos

HPDFHeadlessTimestamp fornece criação nativa de requisições com OpenSSL 3 e verificação autenticada de respostas e tokens RFC3161 no Linux e no Windows

HPDFSignHeadlessCMS, SignToFile e SignPFXToFile fazem o hash dos octets reais da assinatura CMS com SHA-256 e anexam o token de resposta verificado como o 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 transporte de posse do chamador recebe um TimeStampReq DER completo e retorna um TimeStampResp DER completo, permitindo que o chamador controle autenticação HTTP, política TLS, deadlines e cancelamento durante o I/O de rede

As requisições contêm nonces criptográficos frescos e solicitam os certificados do TSA; as respostas precisam corresponder tanto ao nonce da requisição quanto ao valor de assinatura fornecido

A verificação autentica o token CMS completo, checa o path do certificado do TSA e o EKU crítico de timestamp, verifica o binding ESS signing-certificate, e checa o messageImprint SHA-256, SHA-384 ou SHA-512 contra os octets reais da assinatura usando o algoritmo carregado pelo TSTInfo

RequireRevocation carrega o arquivo explícito de CRL e habilita checagens de revogação de certificados verificadas por issuers; evidências ausentes, expiradas ou revogadas falham em vez de produzir um resultado confiável

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

Callbacks que já fornecem um imprint

As funções ForImprint aceitam um digest pré-computado SHA256, SHA384 ou SHA512 e seu valor THPDFHeadlessTimestampDigest, e então preservam esses bytes exatos de digest na requisição RFC3161 sem fazer hash deles de novo

Use essas funções quando um callback de assinatura já fornecer o messageImprint, incluindo o THPDFCMSTimestampCallback do Windows; os helpers de requisição de assinatura raw continuam usando SHA256, enquanto a verificação offline de tokens faz o hash dos octets originais da assinatura com o algoritmo realmente suportado pelo TSTInfo

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

O comprimento do imprint precisa ser 32, 48 ou 64 bytes para o digest selecionado; a verificação vinculada à requisição checa adicionalmente o nonce fresco original, o OID do digest, a assinatura CMS, o binding do certificado do TSA, trust roots explícitos, EKU e as evidências configuradas de revogação

Veja criação de requisições, verificação de respostas, verificação offline de tokens, transporte e valores de digest

A validade de certificados confiáveis e CRLs é avaliada no momento da verificação, então um token arquivado cujo certificado do TSA expirou precisa de uma política e evidências de validação de arquivamento, em vez de burlar as checagens atuais de confiança

Tokens malformados, atributos de timestamp duplicados, imprints incompatíveis, roots desconhecidos, EKUs inválidos, certificados de TSA expirados, certificados de TSA revogados, CRLs expiradas, orçamentos de respostas e cancelamento são cobertos pelos testes de aceitação nativos e independentes

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

As funções de timestamp carregam seus símbolos OpenSSL de timestamp apenas quando usadas; defina HOTPDF_OPENSSL_LIBRARY com uma shared library explícita OpenSSL 3 da arquitetura correspondente quando necessário