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, PAdES imza yolunun dahili olarak kullandığı alt düzey CMS oluşturucusudur. İleri düzey bir kullanıcının, imzalı özniteliklerin SHA-256 ileti özetinden, bir imzalayan soyutlamasından, imzalayan sertifikasından ve isteğe bağlı bir sertifika zincirinden bir CMS SignedData değeri birleştirmesine izin verir
ICmsSigner arayüzü kripto arka uç sözleşmesidir: çağıran, özet ve imza algoritması OID'lerini ve imzalayan tanımlayıcısını sağlar; imzalı öznitelikler özeti üzerinde gerçek özel anahtar işlemini de o gerçekleştirir. Bu, CMS kodlamasını herhangi bir belirli kripto sağlayıcısından ayırır
TCmsBuildOptions; imzalama zamanını, commitment türünü ve SHA-256 ilke hash'i, URI ve isteğe bağlı bellek içi ilke belgesiyle açık bir imza ilkesi tanımlayıcısı ekleyebilir
ExtractSignatureValue, bitmiş bir CMS değerinden ham imza oktetlerini çıkarır; böylece bunlar bir zaman damgası otoritesine gönderilebilir. AddSignatureTimestampToCms ardından döndürülen zaman damgası token'ını imzasız bir öznitelik olarak gömer ve B-T/B-LTA uyumlu biçimi üretir
| Method | Description |
|---|---|
GetDigestAlgorithmOid | İmzalı öznitelikler üzerinde kullanılan hash algoritmasının OID'sini döndürür (SHA-256 için örneğin 2.16.840.1.101.3.4.2.1) |
GetSignatureAlgorithmOid | Özete uygulanan imza algoritmasının OID'sini döndürür |
GetSignatureAlgorithmParams | Algoritma parametrelerini döndürür (ECDSA için genelde boştur; PSS için RSA-PSS parametre blob'unu taşır) |
GetSignerId | İmzalayanı issuer/serial ya da subject key identifier ile tanımlayan TCmsSignerId değerini döndürür |
SignSignedAttrsDigest | Sağlanan özet üzerinde özel anahtar imzasını gerçekleştirir ve imza oktetlerini döndürür |
| Routine | Description |
|---|---|
CertKeyAlgorithmOid | Bir sertifikadan SubjectPublicKeyInfo algoritma OID'sini okur; RSA ile ECDSA imza algoritması arasında seçim yapan da budur. Her imzalama arka ucunun gereksinim duyduğu için burada, onlardan birinin içinde değil yaşar |
ExtractIssuerAndSerial | Bir SignerIdentifier'ın taşıdığı ham issuer ve serialNumber TLV'lerini IssuerTlv ve SerialTlv içine çıkarır |
EcDsaP1363ToDer | Ham bir P1363 r||s ECDSA imzasını, CMS'nin beklediği iki INTEGER'dan oluşan DER SEQUENCE içine sarar; token'lar ve platform kripto API'leri ham biçimi döndürür |
VerifyCmsSignaturePolicyDocument | Boş olmayan bir SignaturePolicyOid ve 32 baytlık bir SignaturePolicyHash zorunlu kılar, ardından sağlanan ilke belgesini SHA-256 ile doğrular ve başarısızlıkta tanı metni döndürür |
BuildSignedData | Bir CAdES SignerInfo, imzalayan sertifikası, isteğe bağlı zincir ve yapılandırılmış imzalı özniteliklerle eksiksiz bir detached RFC 5652 CMS ContentInfo kurar |
ExtractSignatureValue | RFC 3161 zaman damgası message imprint girdisi olarak kullanılan ham SignerInfo imza oktetlerini çıkarır |
AddSignatureTimestampToCms | Eksiksiz bir RFC 3161 TimeStampToken'ı signature-time-stamp imzasız özniteliği olarak ekler ve kapsayan uzunlukları yeniden kodlar |
| Type | Description |
|---|---|
TCmsSignerIdKind | sidIssuerAndSerial issuer Name artı serial TLV seçer, sidSubjectKeyIdentifier ise ham subject-key-identifier oktetlerini seçer |
TCmsSignerId | Kind, IssuerDer, SerialDer ve SubjectKeyId seçilen SignerInfo tanımlayıcı biçimini taşır |
TCmsBuildOptions | SigningTimeUtc, CommitmentTypeOid, SignaturePolicyOid, SignaturePolicyHash, SignaturePolicyUri ve SignaturePolicyDocument imzalı öznitelikleri yapılandırır; Default tüm isteğe bağlı değerleri temizler |
TSHA256Digest, FPdfSha256 birimi tarafından sağlanırBuildSignedData, sertifika zincirini DER kodlu sertifikaların açık bir dizisi olarak alır; imzalayanın önce gelmesi gerekmez, sıralama CMS EncapsulatedCertificateSet yapısını izler