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);
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
| Method | Description |
|---|---|
GetDigestAlgorithmOid | Returnerar 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) |
GetSignatureAlgorithmOid | Returnerar OID:n för signaturalgoritmen som appliceras på sammanfattningen |
GetSignatureAlgorithmParams | Returnerar algoritmparametrar (ofta tomma för ECDSA; bär RSA-PSS-parametrarblobben för PSS) |
GetSignerId | Returnerar TCmsSignerId som identifierar signeraren via utgivare/serienummer eller via ämnesnyckelidentifieraren |
SignSignedAttrsDigest | Utför privatnyckelsignaturen över den tillhandahållna sammanfattningen och returnerar signaturoktetterna |
| Routine | Description |
|---|---|
CertKeyAlgorithmOid | Lä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 |
ExtractIssuerAndSerial | Extraherar de råa utgivare- och serialNumber-TLV:erna som en SignerIdentifier bär på, till IssuerTlv och SerialTlv |
EcDsaP1363ToDer | Slå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 |
VerifyCmsSignaturePolicyDocument | Krä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 |
BuildSignedData | Bygger en komplett fristående RFC 5652 CMS ContentInfo med en CAdES SignerInfo, signerarcertifikat, valfri kedja och konfigurerade signerade attribut |
ExtractSignatureValue | Extraherar SignerInfo:s råa signaturoktetter som används som RFC 3161-tidsstämpelns message imprint-indata |
AddSignatureTimestampToCms | Lägger till en fullständig RFC 3161 TimeStampToken som det osignerade attributet signature-time-stamp och kodar om omgivande längder |
| Type | Description |
|---|---|
TCmsSignerIdKind | sidIssuerAndSerial väljer utgivarens Name plus serienummer-TLV och sidSubjectKeyIdentifier väljer råa ämnesnyckelidentifieraroktetter |
TCmsSignerId | Kind, IssuerDer, SerialDer och SubjectKeyId bär den valda SignerInfo-identifierarformen |
TCmsBuildOptions | SigningTimeUtc, CommitmentTypeOid, SignaturePolicyOid, SignaturePolicyHash, SignaturePolicyUri och SignaturePolicyDocument konfigurerar signerade attribut; Default rensar alla valfria värden |
TSHA256Digest tillhandahålls av enheten FPdfSha256BuildSignedData tar certifikatkedjan som ett öppet fält av DER-kodade certifikat, signeraren först krävs inte; ordningen följer CMS EncapsulatedCertificateSet