PDFium Component Docs

FPdfCms Moduł

Unit: FPdfCms
Buduje struktury RFC 5652 CMS / CAdES SignedData, waliduje dokumenty polityki podpisu i osadza opcjonalne znaczniki czasu RFC 3161

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 to niskopoziomowy builder CMS używany wewnętrznie przez ścieżkę podpisu PAdES. Pozwala zaawansowanemu użytkownikowi złożyć wartość CMS SignedData ze skrótu SHA-256 atrybutów podpisanych, abstrakcji podpisującego, certyfikatu podpisującego i opcjonalnego łańcucha certyfikatów

Interfejs ICmsSigner to kontrakt zaplecza kryptograficznego: wywołujący dostarcza OID-y algorytmu skrótu i algorytmu podpisu oraz identyfikator podpisującego, a wykonuje rzeczywistą operację klucza prywatnego na skrócie atrybutów podpisanych. To odseparowuje kodowanie CMS od jakiegokolwiek konkretnego dostawcy kryptografii

TCmsBuildOptions może dodać czas podpisania, typ commitment oraz jawny identyfikator polityki podpisu z haszem SHA-256 polityki, URI i opcjonalnym dokumentem polityki trzymanym w pamięci

ExtractSignatureValue wyciąga surowe oktety podpisu z gotowej wartości CMS, aby można było je wysłać do urzędu znaczników czasu; AddSignatureTimestampToCms osadza następnie zwrócony token znacznika czasu jako atrybut niepodpisany, dając formę zgodną z B-T/B-LTA

ICmsSigner methods

MethodDescription
GetDigestAlgorithmOidZwraca OID algorytmu haszującego użytego na atrybutach podpisanych (na przykład 2.16.840.1.101.3.4.2.1 dla SHA-256)
GetSignatureAlgorithmOidZwraca OID algorytmu podpisu zastosowanego do skrótu
GetSignatureAlgorithmParamsZwraca parametry algorytmu (często puste dla ECDSA; dla PSS niesie blob parametrów RSA-PSS)
GetSignerIdZwraca TCmsSignerId identyfikujący podpisującego po issuer/serial albo po identyfikatorze klucza podmiotu
SignSignedAttrsDigestWykonuje podpis kluczem prywatnym nad przekazanym skrótem i zwraca oktety podpisu

Functions and procedures

RoutineDescription
CertKeyAlgorithmOidOdczytuje z certyfikatu OID algorytmu z SubjectPublicKeyInfo, który rozstrzyga między algorytmem podpisu RSA a ECDSA; potrzebują go wszystkie zaplecza podpisujące, więc funkcja żyje tutaj, a nie w którymś z nich
ExtractIssuerAndSerialWyciąga surowe TLV issuer i serialNumber, które niesie SignerIdentifier, do IssuerTlv i SerialTlv
EcDsaP1363ToDerOpakowuje surowy podpis ECDSA r||s w postaci P1363 w sekwencję DER z dwóch INTEGER, której oczekuje CMS; tokeny i platformowe API kryptograficzne zwracają formę surową
VerifyCmsSignaturePolicyDocumentWymaga niepustego SignaturePolicyOid i 32-bajtowego SignaturePolicyHash, po czym weryfikuje dostarczony dokument polityki z SHA-256 i przy niepowodzeniu zwraca tekst diagnostyczny
BuildSignedDataBuduje kompletny odłączony ContentInfo RFC 5652 CMS z jednym SignerInfo CAdES, certyfikatem podpisującego, opcjonalnym łańcuchem i skonfigurowanymi atrybutami podpisanymi
ExtractSignatureValueWyciąga surowe oktety podpisu SignerInfo używane jako wejście message imprint dla znacznika czasu RFC 3161
AddSignatureTimestampToCmsDodaje pełny TimeStampToken RFC 3161 jako niepodpisany atrybut signature-time-stamp i ponownie koduje otaczające długości

Types

TypeDescription
TCmsSignerIdKindsidIssuerAndSerial wybiera Name issuer plus TLV numeru seryjnego, a sidSubjectKeyIdentifier wybiera surowe oktety identyfikatora klucza podmiotu
TCmsSignerIdKind, IssuerDer, SerialDer i SubjectKeyId niosą wybraną formę identyfikatora SignerInfo
TCmsBuildOptionsSigningTimeUtc, CommitmentTypeOid, SignaturePolicyOid, SignaturePolicyHash, SignaturePolicyUri i SignaturePolicyDocument konfigurują atrybuty podpisane; Default czyści każdą wartość opcjonalną

Remarks

See Also

FPdfTsa, FPdfCrypto, FPdfSha256, TPdf.SignPades