PDFium Delphi Component Docs

FPdfCms Unité

Module: FPdfCms
Construit des structures CMS RFC 5652 / CAdES SignedData, valide des documents de politique de signature et incorpore des horodatages RFC 3161 facultatifs

Syntax

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 CertKeyAlgorithmOid(const CertDer: TBytes): AnsiString;
function ExtractIssuerAndSerial(const CertDer: TBytes;
  out IssuerTlv, SerialTlv: TBytes): Boolean;
function EcDsaP1363ToDer(const Raw: TBytes): TBytes;
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);

Description

FPdfCms est le constructeur CMS de bas niveau utilisé en interne par le chemin de signature PAdES. Il permet à un utilisateur avancé d’assembler une valeur CMS SignedData à partir d’une empreinte SHA-256 des attributs signés, d’une abstraction de signataire, du certificat du signataire et d’une chaîne de certificats facultative

L’interface ICmsSigner est le contrat du backend cryptographique : l’appelant fournit les OID des algorithmes d’empreinte et de signature, l’identifiant du signataire, et effectue l’opération à clé privée effective sur l’empreinte des attributs signés. Cela découle l’encodage CMS de tout fournisseur cryptographique spécifique

TCmsBuildOptions peut ajouter l’heure de signature, le type d’engagement et un identifiant de politique de signature explicite avec empreinte SHA-256 de politique, URI et document de politique en mémoire facultatif

ExtractSignatureValue extrait les octets bruts de la signature d’une valeur CMS terminée afin de pouvoir les envoyer à une autorité d’horodatage ; AddSignatureTimestampToCms incorpore ensuite le jeton d’horodatage renvoyé comme attribut non signé, produisant la forme conforme B-T/B-LTA

ICmsSigner methods

MethodDescription
GetDigestAlgorithmOidRenvoie l’OID de l’algorithme de hachage utilisé sur les attributs signés (par exemple 2.16.840.1.101.3.4.2.1 pour SHA-256)
GetSignatureAlgorithmOidRenvoie l’OID de l’algorithme de signature appliqué à l’empreinte
GetSignatureAlgorithmParamsRenvoie les paramètres de l’algorithme (souvent vide pour ECDSA ; transporte le blob de paramètres RSA-PSS pour PSS)
GetSignerIdRenvoie le TCmsSignerId identifiant le signataire par émetteur/numéro de série ou par identifiant de clé de sujet
SignSignedAttrsDigestEffectue la signature à clé privée sur l’empreinte fournie et renvoie les octets de signature

Functions and procedures

RoutineDescription
CertKeyAlgorithmOidLit l’OID d’algorithme du SubjectPublicKeyInfo d’un certificat, celui qui décide entre un algorithme de signature RSA et ECDSA ; chaque backend de signature en a besoin, aussi est-elle placée ici plutôt que dans l’un d’eux
ExtractIssuerAndSerialExtrait les TLV bruts d’émetteur et de serialNumber que porte un SignerIdentifier, vers IssuerTlv et SerialTlv
EcDsaP1363ToDerEnveloppe une signature ECDSA P1363 r||s brute dans la SEQUENCE DER de deux INTEGER qu’attend CMS ; les jetons et les API cryptographiques des plateformes renvoient la forme brute
VerifyCmsSignaturePolicyDocumentExige un SignaturePolicyOid non vide et un SignaturePolicyHash de 32 octets, puis vérifie le document de politique fourni avec SHA-256 et renvoie un texte de diagnostic en cas d’échec
BuildSignedDataConstruit un ContentInfo CMS RFC 5652 détaché complet avec un CAdES SignerInfo, le certificat du signataire, une chaîne facultative et les attributs signés configurés
ExtractSignatureValueExtrait les octets bruts de signature du SignerInfo utilisés comme entrée d’empreinte de message pour l’horodatage RFC 3161
AddSignatureTimestampToCmsAjoute un TimeStampToken RFC 3161 complet comme attribut non signé signature-time-stamp et réencode les longueurs englobantes

Types

TypeDescription
TCmsSignerIdKindsidIssuerAndSerial sélectionne le Name de l’émetteur plus le TLV de numéro de série et sidSubjectKeyIdentifier sélectionne les octets bruts de l’identifiant de clé de sujet
TCmsSignerIdKind, IssuerDer, SerialDer et SubjectKeyId transportent la forme d’identifiant SignerInfo sélectionnée
TCmsBuildOptionsSigningTimeUtc, CommitmentTypeOid, SignaturePolicyOid, SignaturePolicyHash, SignaturePolicyUri et SignaturePolicyDocument configurent les attributs signés ; Default efface chaque valeur facultative

Remarks

See Also

FPdfTsa, FPdfCrypto, FPdfSha256, TPdf.SignPades