PDFium Delphi Component Docs

FPdfCms-enhet

Unit: FPdfCms
Bygger RFC 5652 CMS / CAdES SignedData-strukturer, validerar signaturpolicydokument och bäddar in valfria RFC 3161-tidsstämplar

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 är CMS-byggaren på låg nivå som PAdES-signaturvägen använder internt. Den låter en avancerad användare sätta samman ett CMS SignedData-värde från en SHA-256-sammanfattning av de signerade attributen, en signerarabstraktion, signerarcertifikatet och en valfri certifikatkedja

Gränssnittet ICmsSigner är kontraktet mot kryptobackenden: anroparen tillhandahåller OID:erna för sammanfattningssignatur- och signaturalgoritmen och signeraridentifieraren, och utför den faktiska privatnyckeloperationen över den signerade attributsammanfattningen. Det frikopplar CMS-kodningen från en specifik kryptoleverantör

TCmsBuildOptions kan lägga till signeringstid, utfästelsetyp och en explicit signaturpolicyidentifierare med SHA-256-policyhash, URI och valfritt policydokument i minnet

ExtractSignatureValue drar ut de råa signaturoktetterna ur ett färdigt CMS-värde så att de kan skickas till en tidsstämpelauktoritet; AddSignatureTimestampToCms bäddar sedan in den returnerade tidsstämpeltoken som ett osignerat attribut, vilket ger den B-T/B-LTA-kompatibla formen

ICmsSigner methods

MethodDescription
GetDigestAlgorithmOidReturnerar OID:n för hashalgoritmen som används över de signerade attributen (till exempel 2.16.840.1.101.3.4.2.1 för SHA-256)
GetSignatureAlgorithmOidReturnerar OID:n för signaturalgoritmen som appliceras på sammanfattningen
GetSignatureAlgorithmParamsReturnerar algoritmparametrar (ofta tomma för ECDSA; bär RSA-PSS-parametrarblobben för PSS)
GetSignerIdReturnerar TCmsSignerId som identifierar signeraren via utgivare/serienummer eller via ämnesnyckelidentifieraren
SignSignedAttrsDigestUtför privatnyckelsignaturen över den tillhandahållna sammanfattningen och returnerar signaturoktetterna

Functions and procedures

RoutineDescription
CertKeyAlgorithmOidLäser SubjectPublicKeyInfo-algoritmens OID ur ett certifikat, vilket är det som avgör mellan en RSA- och en ECDSA-signaturalgoritm; varje signeringsbackend behöver den, så den bor här i stället för inuti en av dem
ExtractIssuerAndSerialExtraherar de råa utgivare- och serialNumber-TLV:erna som en SignerIdentifier bär på, till IssuerTlv och SerialTlv
EcDsaP1363ToDerSlår in en rå P1363 r||s ECDSA-signatur i den DER-SEQUENCE av två INTEGER som CMS förväntar sig; token- och plattformskrypto-API:er returnerar den råa formen
VerifyCmsSignaturePolicyDocumentKräver en icke-tom SignaturePolicyOid och en SignaturePolicyHash på 32 byte, verifierar därefter det tillhandahållna policydokumentet med SHA-256 och returnerar diagnostisk text vid misslyckande
BuildSignedDataBygger en komplett fristående RFC 5652 CMS ContentInfo med en CAdES SignerInfo, signerarcertifikat, valfri kedja och konfigurerade signerade attribut
ExtractSignatureValueExtraherar SignerInfo:s råa signaturoktetter som används som RFC 3161-tidsstämpelns message imprint-indata
AddSignatureTimestampToCmsLägger till en fullständig RFC 3161 TimeStampToken som det osignerade attributet signature-time-stamp och kodar om omgivande längder

Types

TypeDescription
TCmsSignerIdKindsidIssuerAndSerial väljer utgivarens Name plus serienummer-TLV och sidSubjectKeyIdentifier väljer råa ämnesnyckelidentifieraroktetter
TCmsSignerIdKind, IssuerDer, SerialDer och SubjectKeyId bär den valda SignerInfo-identifierarformen
TCmsBuildOptionsSigningTimeUtc, CommitmentTypeOid, SignaturePolicyOid, SignaturePolicyHash, SignaturePolicyUri och SignaturePolicyDocument konfigurerar signerade attribut; Default rensar alla valfria värden

Remarks

See Also

FPdfTsa, FPdfCrypto, FPdfSha256, TPdf.SignPades