PDFium Delphi Component Docs

Unidade FPdfCms

Unidade: FPdfCms
Constrói estruturas SignedData CMS / CAdES da RFC 5652, valida documentos de política de assinatura e incorpora carimbos de data/hora RFC 3161 opcionais

Sintaxe

TCmsSignerIdKind = (sidIssuerAndSerial, sidSubjectKeyIdentifier);

TCmsSignerId = record
  Kind: TCmsSignerIdKind;
  IssuerDer: TBytes;
  SerialDer: TBytes;
  SubjectKeyId: TBytes;
end;

ICmsSigner = interface
  function GetDigestAlgorithmOid: AnsiString;
  function GetSignatureAlgorithmOid: AnsiString;
  function GetSignatureAlgorithmParams: TBytes;
  function GetSignerId: TCmsSignerId;
  function SignSignedAttrsDigest(const Digest: TSHA256Digest): TBytes;
end;

TCmsBuildOptions = record
  SigningTimeUtc: TDateTime;
  CommitmentTypeOid: AnsiString;
  SignaturePolicyOid: AnsiString;
  SignaturePolicyHash: TBytes;
  SignaturePolicyUri: AnsiString;
  SignaturePolicyDocument: TBytes;
  class function Default: TCmsBuildOptions; static;
end;

function VerifyCmsSignaturePolicyDocument(const Options: TCmsBuildOptions;
  const PolicyDocument: TBytes; out ErrorText: string): Boolean;
function BuildSignedData(const DetachedDigest: TSHA256Digest;
  const Signer: ICmsSigner; const SignerCertDer: TBytes;
  const ChainCertDer: array of TBytes;
  const Options: TCmsBuildOptions): TBytes;
function ExtractSignatureValue(const CmsDer: TBytes;
  out SignatureValueOctets: TBytes): Boolean;
procedure AddSignatureTimestampToCms(var CmsDer: TBytes;
  const TimestampTokenDer: TBytes);

Descrição

FPdfCms é o construtor CMS de baixo nível consumido internamente pelo caminho de assinatura PAdES. Ele permite que um usuário avançado monte um valor CMS SignedData a partir de um resumo da mensagem SHA-256 dos atributos assinados, de uma abstração de signatário, do certificado do signatário e de uma cadeia de certificados opcional

A interface ICmsSigner é o contrato do back-end criptográfico: o chamador fornece os OIDs dos algoritmos de resumo e de assinatura, o identificador do signatário e executa a operação de chave privada de fato sobre o resumo dos atributos assinados. Isso desacopla a codificação CMS de qualquer provedor criptográfico específico

TCmsBuildOptions pode adicionar hora de assinatura, tipo de compromisso e um identificador explícito de política de assinatura com hash SHA-256 da política, URI e documento de política opcional em memória

ExtractSignatureValue extrai os octetos de assinatura brutos de um valor CMS finalizado para que possam ser enviados a uma autoridade de carimbo de data/hora; AddSignatureTimestampToCms então incorpora o token de carimbo de data/hora retornado como um atributo não assinado, produzindo a forma compatível com B-T/B-LTA

ICmsSigner methods

MethodDescription
GetDigestAlgorithmOidRetorna o OID do algoritmo de hash usado sobre os atributos assinados (por exemplo, 2.16.840.1.101.3.4.2.1 para SHA-256)
GetSignatureAlgorithmOidRetorna o OID do algoritmo de assinatura aplicado ao resumo
GetSignatureAlgorithmParamsRetorna os parâmetros do algoritmo (frequentemente vazio para ECDSA; contém o blob de parâmetros RSA-PSS para PSS)
GetSignerIdRetorna o TCmsSignerId que identifica o signatário por emissor/número de série ou por identificador de chave de sujeito
SignSignedAttrsDigestExecuta a assinatura de chave privada sobre o resumo fornecido e retorna os octetos da assinatura

Funções e procedimentos

RotinaDescrição
CertKeyAlgorithmOidLê o OID do algoritmo SubjectPublicKeyInfo de um certificado, que é o que decide entre um algoritmo de assinatura RSA e ECDSA; todo backend de assinatura precisa dele, por isso ele vive aqui em vez de dentro de um deles
ExtractIssuerAndSerialExtrai as TLVs brutas de issuer e serialNumber que um SignerIdentifier carrega, para IssuerTlv e SerialTlv
EcDsaP1363ToDerEmpacota uma assinatura ECDSA P1363 r||s bruta na sequência DER de dois INTEGER que o CMS espera; tokens e APIs de criptografia de plataforma devolvem a forma bruta
VerifyCmsSignaturePolicyDocumentExige um SignaturePolicyOid não vazio e um SignaturePolicyHash de 32 bytes, então verifica o documento de política fornecido com SHA-256 e retorna texto de diagnóstico em caso de falha
BuildSignedDataConstrói um ContentInfo CMS RFC 5652 separado completo com um SignerInfo CAdES, certificado do signatário, cadeia opcional e atributos assinados configurados
ExtractSignatureValueExtrai os octetos brutos de assinatura do SignerInfo usados como entrada de message imprint do carimbo de data/hora RFC 3161
AddSignatureTimestampToCmsAdiciona um TimeStampToken RFC 3161 completo como atributo não assinado signature-time-stamp e recodifica os comprimentos delimitadores

Tipos

TypeDescription
TCmsSignerIdKindsidIssuerAndSerial seleciona emissor Name mais TLV de número de série e sidSubjectKeyIdentifier seleciona octetos brutos de identificador-de-chave-de-sujeito
TCmsSignerIdKind, IssuerDer, SerialDer e SubjectKeyId contêm a forma de identificador do SignerInfo selecionada
TCmsBuildOptionsSigningTimeUtc, CommitmentTypeOid, SignaturePolicyOid, SignaturePolicyHash, SignaturePolicyUri e SignaturePolicyDocument configuram atributos assinados; Default limpa todos os valores opcionais

Observações

Consulte também

FPdfTsa, FPdfCrypto, FPdfSha256, TPdf.SignPades