PDFium Component Docs

FPdfCms unit

Unit: FPdfCms
Bouwt RFC 5652 CMS / CAdES SignedData-structuren, valideert handtekeningsbeleidsdocumenten en bedt optionele RFC 3161-timestamps in

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 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 is de low-level CMS-builder die intern wordt gebruikt door het PAdES-handtekenpad. Een gevorderde gebruiker kan er een CMS SignedData-waarde mee assembleren uit een SHA-256-messagedigest van de signed attributes, een signer-abstractie, het signercertificaat en een optionele certificaatketen

De interface ICmsSigner is het contract met de cryptobackend: de aanroeper levert de digest- en signature-algoritme-OIDs, de signer-identificator en voert de eigenlijke private-key-bewerking uit over de digest van de signed attributes. Dit ontkoppelt CMS-codering van een specifieke cryptoprovider

TCmsBuildOptions kan het ondertekeningstijdstip, een commitment type en een expliciete handtekeningsbeleidsidentificator toevoegen, met SHA-256-beleidshash, URI en een optioneel beleidsdocument in het geheugen

ExtractSignatureValue haalt de ruwe signature-octetten uit een voltooide CMS-waarde zodat ze naar een timestamp-authority gestuurd kunnen worden; AddSignatureTimestampToCms bedt het teruggekregen timestamp-token vervolgens in als een unsigned attribute, wat de B-T/B-LTA-conforme vorm oplevert

ICmsSigner methods

MethodDescription
GetDigestAlgorithmOidGeeft de OID terug van het hashalgoritme over de signed attributes (bijvoorbeeld 2.16.840.1.101.3.4.2.1 voor SHA-256)
GetSignatureAlgorithmOidGeeft de OID terug van het signature-algoritme dat op de digest wordt toegepast
GetSignatureAlgorithmParamsGeeft algoritmeparameters terug (vaak leeg voor ECDSA; bevat de RSA-PSS-parameterblob voor PSS)
GetSignerIdGeeft de TCmsSignerId terug die de signer identificeert op issuer/serial of op subject key identifier
SignSignedAttrsDigestVoert de private-key-handtekening uit over de aangeleverde digest en geeft de signature-octetten terug

Functions and procedures

RoutineDescription
CertKeyAlgorithmOidLeest de SubjectPublicKeyInfo-algoritme-OID uit een certificaat; daaraan wordt bepaald of het RSA- of het ECDSA-handtekeningalgoritme wordt gebruikt. Elke ondertekeningsbackend heeft dit nodig, daarom staat het hier en niet in één van die backends
ExtractIssuerAndSerialHaalt de ruwe issuer- en serialNumber-TLV's die een SignerIdentifier bevat op in IssuerTlv en SerialTlv
EcDsaP1363ToDerWikkelt een rauwe P1363 r||s ECDSA-handtekening in de DER-rij van twee INTEGER's die CMS verwacht; tokens en platformcrypto-API's geven de rauwe vorm terug
VerifyCmsSignaturePolicyDocumentVereist een niet-lege SignaturePolicyOid en een SignaturePolicyHash van 32 bytes, verifieert vervolgens het aangeleverde beleidsdocument met SHA-256 en geeft bij falen diagnostische tekst terug
BuildSignedDataBouwt een volledige losse RFC 5652 CMS ContentInfo met één CAdES SignerInfo, signercertificaat, optionele keten en geconfigureerde signed attributes
ExtractSignatureValueExtraheert de ruwe signature-octetten van de SignerInfo die als invoer voor de RFC 3161-timestamp-message-imprint dienen
AddSignatureTimestampToCmsVoegt een volledige RFC 3161 TimeStampToken toe als het unsigned attribute signature-time-stamp en codeert de omvattende lengtes opnieuw

Types

TypeDescription
TCmsSignerIdKindsidIssuerAndSerial kiest issuer Name plus serial TLV en sidSubjectKeyIdentifier kiest ruwe subject-key-identifier-octetten
TCmsSignerIdKind, IssuerDer, SerialDer en SubjectKeyId bevatten de geselecteerde identificeervorm van de SignerInfo
TCmsBuildOptionsSigningTimeUtc, CommitmentTypeOid, SignaturePolicyOid, SignaturePolicyHash, SignaturePolicyUri en SignaturePolicyDocument configureren signed attributes; Default wist elke optionele waarde

Remarks

See Also

FPdfTsa, FPdfCrypto, FPdfSha256, TPdf.SignPades