PDFium Delphi Component Docs

FPdfCryptoMac birimi

Unit: FPdfCryptoMac
PAdES imzalama için macOS Keychain arka ucu; Security.framework üzerinden CMS doğrulaması ve sertifika güveni değerlendirmesi

Syntax

EPdfKeychainError = class(Exception);

TPdfKeychainSignerProvider = class(TInterfacedObject, IPadesSignerProvider)
  constructor Create(const KeychainPath: string = '');
  function BackendName: string;
  function Resolve(const Options: TPadesSignerOptions): TPadesResolvedSigner;
end;

TPdfKeychainCmsVerifier = class(TInterfacedObject, IPdfCmsVerifier)
  function BackendName: string;
  function VerifyDetached(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
  function VerifyAttached(const CmsDer: TBytes; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
end;

function KeychainAvailable: Boolean;
function KeychainMissingSymbols: string;
function KeychainVerificationAvailable: Boolean;
function ConfigureKeychainSignerProvider: IPadesSignerProvider;
function ConfigureKeychainCmsVerifier: IPdfCmsVerifier;
procedure ConfigureKeychainTrustAnchors(const Anchors: TPadesChainCertArray);
procedure ConfigureKeychainOcspResponses(const Responses: TPadesChainCertArray);

Description

FPdfCryptoMac, FPdfCrypto ve FPdfCms tarafından kullanılan macOS kripto arka ucudur ve platform bütünleştirmesinin iki yarısını da kapsar: bir Keychain kimliği üzerinden PAdES imzalama ve sistem CMS çözücüsü ile güven değerlendirmesi üzerinden CMS doğrulaması. Security.framework ve CoreFoundation bağlanmak yerine çalışma zamanında ada göre yüklenip çözülür; böylece birim her hedefte derlenir ve platform hizmetlerinin gerçekten erişilebilir olup olmadığını çalışma zamanında bildirir

İmzalama tarafında TPdfKeychainSignerProvider, IPadesSignerProvider arayüzünü uygular. Resolve methodu Keychain kimliklerini numaralandırır, sertifikası TPadesSignerOptions içindeki SHA-1 parmak iziyle eşleşen kimliği seçer, sertifika DER'i ve eşleşen özel anahtar başvurusunu okur ve ICmsSigner imzası CMS imzalı özniteliklerini Security.framework üzerinden atan bir TPadesResolvedSigner döndürür; böylece özel anahtar asla Keychain'den ayrılmaz. Seçeneklerle istenen dolgu şeması, anahtarın gerçekte yapabildiğiyle uzlaştırılır ve RSASSA-PSS parametreleri diğer arka uçların ürettikleridir; böylece macOS'ta imzalanan bir belge özdeş bir AlgorithmIdentifier taşır. ConfigureKeychainSignerProvider sağlayıcıyı kurar, etkin PAdES imzalama arka ucu olarak yükler ve kaydettiği arayüzü döndürür

Doğrulama tarafında TPdfKeychainCmsVerifier, CMSDecoder ve SecTrust üzerine IPdfCmsVerifier arayüzünü uygular. VerifyDetached, imza boşluğunun iki yanındaki imzalı bayt aralıklarını çözücünün beklediği ayrık içerikte birleştirir ve CMS değerini buna karşı doğrular; VerifyAttached kendi içeriğini taşıyan bir CMS değerini doğrular, zaman damgası token'ının gereksinimi de budur. İkisi de imza durumunu, güven durumunu ve iptal durumunu ayrı ayrı bildiren bir TPdfCmsVerifyResult döndürür, isteğe bağlı olarak imzalayan sertifikasını ve değerlendirilen zinciri toplar ve ikisi de TPdfCmsVerifyOptions içindeki iptal, çevrimiçi getirme ve checkpoint ayarlarına uyar. ConfigureKeychainCmsVerifier doğrulayıcıyı kurar ve etkin CMS doğrulama arka ucu olarak yükler

İmza geçerliliği ile sertifika güveni bağımsız sonuçlar olarak kalır; böylece güvenilmeyen ya da kendinden imzalı bir zincir altındaki gerçek bir imza, değiştirilmiş içerikten ayırt edilebilir kalır

Bağlı bir RFC 3161 token'ı için sınırlı DER ayrıştırma, özgün kapsüllenmiş TSTInfo oktetlerini içerik türlerini ya da imzalı özniteliklerini değiştirmeden yerel çözücüye sağlar. Sıradan CMS doğrulama geçişi, otomatik zaman damgası işlemesinin dış imzanın kendi bütünlük ya da zincir sonucunu değiştirememesi için yerel girdisinden imzasız öznitelikleri hariç tutar. Bu geçiş countersignature'ları ya da diğer imzasız öznitelikleri doğrulamaz; ValidatePadesTrust her özgün zaman damgası token'ını, mesaj damgasını, TSA sertifika rolünü, güvenini ve iptal sonucunu ayrı ayrı doğrular

Kimlik aramasını sorguya yerel bir arama listesi üzerinden o Keychain ile sınırlamak için TPdfKeychainSignerProvider.Create işlevine bir Keychain dosya yolu geçin, ardından sağlayıcıyı ConfigurePadesSignerProvider ile kaydedin. Boş bir yol, geçerli kullanıcı arama kapsamını kullanır. Seçili Keychain'i açmak veya aramak varsayılan Keychain'i, kullanıcı arama listesini ya da sistem güven yapılandırmasını değiştirmez; geçersiz yollar ve kullanılamayan scoped-search simgeleri EPdfKeychainError fırlatır

Resolve ayrıca imzalayan sertifikasının kullanılabilir veren zincirini çevrimdışı, sorguya yerel bir sertifika araması ve yerel zincir kurulumu üzerinden dışa aktarır. Aday sertifikalar 4096 öğe, her biri 1 MiB ve toplam 16 MiB ile sınırlıdır; kurulan zincir, yaprak dahil 32 sertifika ile sınırlıdır ve yaprak ChainCertDer değerinden ayrı döndürülür. Sertifika materyalini dışa aktarmak güven tesis etmez ya da bir güven çapası kurmaz ve kullanılamayan bir veren sentezlenemez

Signing Functions

FunctionDescription
KeychainAvailableSecurity.framework ve CoreFoundation yüklendiğinde ve imzalama için gerekli her simge çözüldüğünde True döndürür
KeychainMissingSymbolsÇözülemeyen adları boşluklarla ayırarak döndürür; her şey bağlandığında boş bir dize döndürür
ConfigureKeychainSignerProviderBir TPdfKeychainSignerProvider kurar, PAdES imzalama arka ucu olarak yükler ve IPadesSignerProvider olarak döndürür
TPdfKeychainSignerProvider.CreateKapsamlı kimlik araması için isteğe bağlı mevcut bir Keychain dosyası seçer; gömülü NUL karakterlerini ve 4096 dize kod biriminden uzun yolları reddeder
TPdfKeychainSignerProvider.BackendNameİmzalama sağlayıcısı için bildirilen arka uç tanımlayıcısını döndürür
TPdfKeychainSignerProvider.ResolveTPadesSignerOptions değerini Keychain kimlikleriyle eşleştirir ve imzalayanı, sertifika DER'ini ve zinciri taşıyan bir TPadesResolvedSigner döndürür

Verification Functions

FunctionDescription
KeychainVerificationAvailableCMS çözücüsü, güven ilkesi ve güven değerlendirmesi simgeleri çözüldüğünde True döndürür
ConfigureKeychainCmsVerifierBir TPdfKeychainCmsVerifier kurar, CMS doğrulama arka ucu olarak yükler ve IPdfCmsVerifier olarak döndürür
ConfigureKeychainTrustAnchorsSonraki her güven değerlendirmesi için açık DER çapalarını klonlar; Keychain'i değiştirmeden sistem çapalarını tamamlar; sınırlar 64 sertifika, her biri 4 MiB ve toplam 16 MiB'dır ve boş bir dizi bunları temizler
ConfigureKeychainOcspResponsesYerel Security.framework değerlendirmesi için açık DER OCSP kanıtlarını klonlar; sınırlar 8 yanıt, her biri 1 MiB ve toplam 4 MiB'dır ve boş bir dizi bunları temizler
TPdfKeychainCmsVerifier.BackendNameDoğrulama arka ucu için bildirilen arka uç tanımlayıcısını döndürür
TPdfKeychainCmsVerifier.VerifyDetachedSegment1, Segment1Length, Segment2 ve Segment2Length ile tanımlanan, çağıranın sahip olduğu iki içerik segmentine karşı ayrık CMS değerini, sağlanan TPdfCmsVerifyOptions ile doğrular
TPdfKeychainCmsVerifier.VerifyAttachedKendi imzalı içeriğini taşıyan bağlı (attached) bir CMS değerini, sağlanan TPdfCmsVerifyOptions ile doğrular

Types

TypeMembers and purpose
EPdfKeychainErrorSecurity.framework kullanılamadığında, hiçbir Keychain kimliği istenen imzalayanla eşleşmediğinde ya da platform imzalama çağrısı başarısız olduğunda fırlatılan istisna
TPdfKeychainSignerProviderIPadesSignerProvider arayüzünü BackendName ve Resolve ile uygulayan PAdES imzalama arka ucu
TPdfKeychainCmsVerifierIPdfCmsVerifier arayüzünü BackendName, VerifyDetached ve VerifyAttached ile uygulayan CMS doğrulama arka ucu

Remarks

See Also

FPdfCryptoWin, FPdfCrypto, FPdfCms, FPdfTrustedList, FPdfMac