TPadesPaddingScheme = (psRsaPss, psRsaPkcs1v15, psEcdsa);
TPadesSignerOptions = record
CertificateThumbprint: string;
PaddingScheme: TPadesPaddingScheme;
class function Default: TPadesSignerOptions; static;
end;
TPadesChainCertArray = array of TBytes;
TPadesResolvedSigner = record
Signer: ICmsSigner;
SignerCertDer: TBytes;
ChainCertDer: TPadesChainCertArray;
end;
TPdfRevocationMode = (prmNone, prmOffline, prmOnlineAllowed,
prmOnlineRequired);
TPdfStringArray = array of string;
TPdfCertificatePathOptions = record
ValidationTime: TDateTime;
RevocationMode: TPdfRevocationMode;
RequiredPolicyOids: TPdfStringArray;
MaxCertificates: Integer;
MaxCertificateBytes: Integer;
MaxFetchBytes: Integer;
MaxPathDepth: Integer;
class function Default: TPdfCertificatePathOptions; static;
end;
TPdfCertificatePathReport = record
Trusted: Boolean;
PathBuilt: Boolean;
PolicyValid: Boolean;
RevocationChecked: Boolean;
PathCertificateCount: Integer;
ErrorCode: Integer;
ErrorMessage: string;
end;
IPdfTrustStore = interface
function LoadTrustAnchors: TPadesChainCertArray;
end;
IPdfValidationFetcher = interface
function Fetch(const Uri: string; MaxBytes: Integer;
out Data: TBytes): Boolean;
end;
IPdfCertificatePathValidator = interface
function Validate(const LeafCertificate: TBytes;
const Intermediates, TrustAnchors: TPadesChainCertArray;
TrustStore: IPdfTrustStore; Fetcher: IPdfValidationFetcher;
const Options: TPdfCertificatePathOptions;
out Report: TPdfCertificatePathReport): Boolean;
end;
IPadesSignerProvider = interface
function BackendName: string;
function Resolve(const Options: TPadesSignerOptions): TPadesResolvedSigner;
end;
TPdfPkcs11Slot = record
SlotID: UInt64;
Description: string;
TokenLabel: string;
TokenPresent: Boolean;
end;
TPdfPkcs11Slots = array of TPdfPkcs11Slot;
TPdfPkcs11Certificate = record
SlotID: UInt64;
ObjectID: TBytes;
LabelText: string;
CertificateDer: TBytes;
Mechanisms: TPdfStringArray;
end;
TPdfPkcs11Certificates = array of TPdfPkcs11Certificate;
IPdfPkcs11SignerProvider = interface(IPadesSignerProvider)
function EnumerateSlots: TPdfPkcs11Slots;
function EnumerateCertificates(SlotID: UInt64): TPdfPkcs11Certificates;
procedure CloseProtectedSessions;
end;
TPdfCmsVerifyStatus = (pcvsUnavailable, pcvsValid, pcvsInvalid,
pcvsUnsupported, pcvsIndeterminate);
TPdfCmsRevocationReason = (pcrrNone, pcrrCertificateRevoked, pcrrCrlExpired,
pcrrCrlNotYetValid, pcrrCrlUnavailable, pcrrCrlSignatureInvalid,
pcrrCrlInvalid, pcrrChainUntrusted, pcrrUnknown);
TPdfCmsVerifyStage = (pcvstCryptographicSignature, pcvstChainBuild,
pcvstOnlineRetrieval, pcvstRevocationCheck);
TPdfCmsVerifyCheckpoint = procedure(Stage: TPdfCmsVerifyStage) of object;
TPdfCmsVerifyOptions = record
OnlineRetrieval: Boolean;
CheckRevocation: Boolean;
CollectChainCertificates: Boolean;
UrlRetrievalTimeoutMs: Cardinal;
OnCheckpoint: TPdfCmsVerifyCheckpoint;
class function Default: TPdfCmsVerifyOptions; static;
end;
TPdfCmsVerifyResult = record
SignatureStatus: TPdfCmsVerifyStatus;
TrustStatus: TPdfCmsVerifyStatus;
RevocationStatus: TPdfCmsVerifyStatus;
SignatureError: Cardinal;
TrustError: Cardinal;
SignerCertificate: TBytes;
ChainCertificates: TPadesChainCertArray;
RevocationReason: TPdfCmsRevocationReason;
RevocationError: Cardinal;
end;
IPdfCmsVerifier = interface
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;
procedure ConfigurePadesCmsVerifier(const Verifier: IPdfCmsVerifier);
function PadesCmsVerificationAvailable: Boolean;
function PadesCmsVerificationBackendName: string;
function PadesCryptoAvailable: Boolean;
function PadesCryptoBackendName: string;
function ResolvePadesSigner(const Options: TPadesSignerOptions): TPadesResolvedSigner;
procedure ConfigurePdfCertificatePathValidator(
const Validator: IPdfCertificatePathValidator);
function ValidatePdfCertificatePath(const LeafCertificate: TBytes;
const Intermediates, TrustAnchors: TPadesChainCertArray;
TrustStore: IPdfTrustStore; Fetcher: IPdfValidationFetcher;
const Options: TPdfCertificatePathOptions;
out Report: TPdfCertificatePathReport): Boolean;
procedure ConfigurePadesSignerProvider(const Provider: IPadesSignerProvider);
TPadesSignerResolverProc = function(const Options: TPadesSignerOptions): TPadesResolvedSigner;
PadesSignerResolverOverride: TPadesSignerResolverProc;
PdfCertificatePathValidator: IPdfCertificatePathValidator;
PadesSignerProvider: IPadesSignerProvider;
FPdfCrypto, PAdES imzalama yığınının ön kapısıdır. PadesCryptoAvailable, geçerli platformda bir kripto arka ucunun bağlı olup olmadığını raporlar ve PadesCryptoBackendName onu tanımlar; Windows'ta FPdfCryptoWin içindeki Cryptography Next Generation arka ucuna otomatik olarak bağlanır
ResolvePadesSigner, bir sertifika parmak izi ve bir dolgu şeması alır ve tamamen doldurulmuş bir TPadesResolvedSigner döndürür: özel anahtar işlemini gerçekleştiren ICmsSigner uygulaması, imzalayan sertifikası DER ve veren zincir sertifikaları. Sonuç doğrudan FPdfCms.BuildSignedData işlevine geçirilir
Özel bütünleştirmeler, belirteç yuvalarını ve sertifikaları numaralandıran bir IPdfPkcs11SignerProvider dahil bir IPadesSignerProvider kaydedebilir ya da belirleyici bir çözümleyici birleşim noktası olarak PadesSignerResolverOverride kullanabilir
Sertifika yolu doğrulaması sağlayıcı tabanlı ve bütçelidir: çağıranlar IPdfCertificatePathValidator yapılandırır, isteğe bağlı olarak açık güven çapaları, bir IPdfTrustStore ve bir IPdfValidationFetcher sağlar, ardından TPdfCertificatePathReport öğesini inceler
| Function | Description |
|---|---|
PadesCryptoAvailable | Geçerli platformda PAdES imzalama için bir kripto arka ucu mevcutken True döndürür |
PadesCryptoBackendName | Etkin kripto arka ucunun görünen adını döndürür |
ResolvePadesSigner | Bir sertifika parmak izini ve dolgu şemasını imzalayan, imzalayan sertifikası ve zincire çözümler |
ConfigurePdfCertificatePathValidator | ValidatePdfCertificatePath tarafından kullanılan süreç geneli IPdfCertificatePathValidator öğesini ayarlar ya da temizler |
ValidatePdfCertificatePath | Sertifika sayısı, boyut, getirme ve yol derinliği bütçelerini uyguladıktan sonra bir yaprak sertifikayı ara sertifikalara ve birleşik açık ile güven deposu çapalarına karşı doğrular |
ConfigurePadesSignerProvider | Platform arka ucundan önce kullanılan süreç geneli imzalayan sağlayıcısını ayarlar ya da temizler |
ConfigurePadesCmsVerifier | PAdES doğrulayıcısının kullandığı CMS doğrulama arka ucunu kurar; temizlendiğinde Windows'ta Windows CryptoAPI geri yüklenir. Diğer platformlar açık bir ConfigureSslCmsVerifier ya da ConfigureKeychainCmsVerifier çağrısı gerektirir |
PadesCmsVerificationAvailable | Bu derlemede kayıtlı ya da gömülü olsun, bir arka uç CMS doğrulayabildiğinde True döndürür |
PadesCmsVerificationBackendName | Etkin doğrulama arka ucunun görünen adını döndürür; arka uç yokken boş bir dize döndürür |
| Interface member | Description |
|---|---|
IPdfTrustStore.LoadTrustAnchors | Yapılandırılmış sertifika bütçelerine tabi olarak ek DER kodlu güven çapaları döndürür |
IPdfValidationFetcher.Fetch | Uri adresinden doğrulama malzemesini MaxBytes sınırını aşmadan getirir |
IPdfCertificatePathValidator.Validate | Sertifika yolunu kurar ve değerlendirir; TPdfCertificatePathReport öğesini doldurur |
IPadesSignerProvider.BackendName | PadesCryptoBackendName tarafından açığa çıkarılan sağlayıcı görünen adını döndürür |
IPadesSignerProvider.Resolve | Sağlanan TPadesSignerOptions için eksiksiz imzalayan malzemesini döndürür |
IPdfPkcs11SignerProvider.EnumerateSlots | Kullanılabilir PKCS#11 yuvalarını ve belirteç varlığı üst verisini döndürür |
IPdfPkcs11SignerProvider.EnumerateCertificates | Tek bir PKCS#11 yuvasında görünen sertifikaları ve imzalama mekanizmalarını döndürür |
IPdfPkcs11SignerProvider.CloseProtectedSessions | Sağlayıcının sahip olduğu korumalı ya da kimliği doğulanmış PKCS#11 oturumlarını kapatır |
IPdfCmsVerifier.BackendName | PadesCmsVerificationBackendName tarafından bildirilen doğrulama arka ucu görünen adını döndürür |
IPdfCmsVerifier.VerifyDetached | İmzalı içeriği /Contents boşluğunun iki yanındaki bayt aralıkları olan bir PDF imzasını doğrular |
IPdfCmsVerifier.VerifyAttached | Kendi içeriğini taşıyan ve ayrık segment gerektirmeyen bir zaman damgası token'ını doğrular |
| Type | Description |
|---|---|
EPadesCrypto | Kripto arka ucu hataları için temel istisna |
EPadesCryptoUnavailable | Gerekli bir imzalayan arka ucu ya da sertifika yolu doğrulayıcısı yapılandırılmamışken fırlatılır |
TPadesPaddingScheme | psRsaPss, psRsaPkcs1v15 ya da psEcdsa |
TPadesSignerOptions | CertificateThumbprint sertifikayı seçer ve PaddingScheme imza şemasını seçer; Default boş bir parmak izi ve psRsaPss kullanır |
TPadesChainCertArray | DER kodlu zincir sertifikalarının dinamik dizisi |
TPadesResolvedSigner | Signer, SignerCertDer ve ChainCertDer çözümlenen imzalayan ve sertifika malzemesini birleştirir |
TPdfRevocationMode | prmNone, prmOffline, prmOnlineAllowed ya da prmOnlineRequired |
TPdfStringArray | İlke OID'leri ve sağlayıcı mekanizma adları için kullanılan dinamik dize dizisi |
TPdfCertificatePathOptions | ValidationTime, RevocationMode, RequiredPolicyOids, MaxCertificates, MaxCertificateBytes, MaxFetchBytes ve MaxPathDepth doğrulamayı ve kaynak bütçelerini denetler; Default, 64 sertifika, sertifika başına 4 MiB, 16 MiB getirilen veri ve 16 yol derinliği limitleriyle çevrimdışı iptal modunu seçer |
TPdfCertificatePathReport | Trusted, PathBuilt, PolicyValid, RevocationChecked, PathCertificateCount, ErrorCode ve ErrorMessage doğrulama sonucunu raporlar |
TPdfPkcs11Slot | SlotID, Description, TokenLabel ve TokenPresent tek bir PKCS#11 yuvasını tanımlar |
TPdfPkcs11Slots | TPdfPkcs11Slot kayıtlarının dinamik dizisi |
TPdfPkcs11Certificate | SlotID, ObjectID, LabelText, CertificateDer ve Mechanisms tek bir belirteç sertifikasını tanımlar |
TPdfPkcs11Certificates | TPdfPkcs11Certificate kayıtlarının dinamik dizisi |
TPadesSignerResolverProc | PadesSignerResolverOverride enjeksiyon değişkeni için fonksiyon işaretçisi türü |
TPdfCmsVerifyStatus | pcvsUnavailable, pcvsValid, pcvsInvalid, pcvsUnsupported ya da pcvsIndeterminate |
TPdfCmsRevocationReason | pcrrNone, pcrrCertificateRevoked, pcrrCrlExpired, pcrrCrlNotYetValid, pcrrCrlUnavailable, pcrrCrlSignatureInvalid, pcrrCrlInvalid, pcrrChainUntrusted, pcrrUnknown, pcrrOcspUnavailable, pcrrOcspInvalid ya da pcrrOcspStatusUnknown; iptal kanıtını doğrulama durumundan ayrı açıklar |
TPdfCmsVerifyStage | pcvstCryptographicSignature, pcvstChainBuild, pcvstOnlineRetrieval ya da pcvstRevocationCheck |
TPdfCmsVerifyCheckpoint | Doğrulama ilerledikçe her TPdfCmsVerifyStage değerini alan object-method geri çağırması |
TPdfCmsVerifyOptions | OnlineRetrieval, CheckRevocation, CollectChainCertificates, UrlRetrievalTimeoutMs ve OnCheckpoint doğrulamayı yönlendirir; CollectSignerDiagnostics imzalayan başına anlık görüntü ister ve MaxSignerCount bunların sayısını sınırlar. Default, getirme, iptal ve imzalayan tanılamayı devre dışı bırakır, 15 saniyelik bir getirme bütçesi belirler ve imzalayan anlık görüntülerini 64 ile sınırlar |
TPdfCmsSignerVerifyResult | SignerIndex, kodlanmış SignerInfo sırasını tanımlar; imza, güven ve iptal durumları ile yerel hatalar o imzalayanı bağımsız olarak tanımlar. SignerCertificate onun DER sertifikasıdır; RevocationCertificate ise arka uç sağlayabildiğinde yakalanan bir iptal hatasıyla ilişkili sertifikayı tanımlar |
TPdfCmsSignerVerifyResults | Sınırlı imzalayan anlık görüntülerinin dinamik dizisi |
TPdfCmsVerifyResult | Toplam imza, güven ve iptal durumları bağımsız kalır. Kayıt ayrıca SignatureError, TrustError, SignerCertificate, ChainCertificates, RevocationReason, RevocationError, RevocationCertificate, SignerResults, SignerDiagnosticsStatus ve SignerCount alanlarını döndürür |
Public seçenek ve sonuç kayıtları büyüdüğü için yükseltme sırasında tüketen tarafları yeniden derleyin. Özel doğrulayıcılar yönetilen sonuç kayıtlarını Default(TPdfCmsVerifyResult) ile başlatmalı ve desteklenmeyen anlık görüntü alanlarını kullanılamaz bırakmalıdır; dizeler ya da dinamik diziler içeren canlı bir kaydı FillChar ile temizlemeyin
RevocationReason ve RevocationError alanlarını, IPdfCmsVerifier.VerifyDetached ya da VerifyAttached'ın döndürdüğü TPdfCmsVerifyResult üzerinden okuyun. PAdES güven doğrulaması bunları RevocationReason ve NativeRevocationError olarak korur; timestamp token'ları için ayrı TimeStampRevocationReason ve NativeTimeStampRevocationError alanları vardır, kanıt raporları her iki çifti de içerir
RevocationError, arka uca özgü bir yerel doğrulama kodudur; sıfır, yerel tanılama yakalanmadı demektir. OpenSSL X509_V_ERR_* hata uzayını kullanır. Windows, bir sertifikanın CERT_REVOCATION_INFO.dwRevocationResult değerinden ya da iptal zinciri çağrısı başarısız olursa GetLastError değerinden ham bir DWORD korur; bu, tek tip bir HRESULT hata uzayı ya da toplulaştırılmış zincir güven bitmaskesi değildir
OpenSSL, doğrulanmış iptali süresi dolmuş, erişilemeyen ya da geçersiz CRL kanıtından ve erişilemeyen, geçersiz ya da bilinmeyen OCSP kanıtından ayırır. Windows doğrulanmış iptali, güvenilmeyen zincirleri ya da bilinmeyen bir yerel hatayı bildirir. macOS doğrulayıcısı imza bütünlüğünü, Basic X.509 güvenini ve iptali ayrı ayrı değerlendirir; her platform hatasını bir CRL ya da OCSP sınıflandırmasına dönüştürmeden yerel Security.framework hatalarını döndürür
RevocationCertificate, CMS imzalayan sertifikası yerine iptal edilmiş bir ara sertifikayı tanımlayabilir; arka uç o sertifikayı yakalayamadığında boş kalır. OpenSSL toplayabilirken geçerli macOS arka ucu onu boş bırakır
Ne pcrrNone ne de sıfır hata, iptalin kontrol edildiğini ya da başarılı olduğunu kanıtlar; her zaman RevocationStatus'a bakın
Ayrıntılı anlık görüntüleri SignerResults içinde incelemek için CollectSignerDiagnostics=True ayarlayın. SignerCount, belirlendiğinde kodlanmış SignerInfo sayısıdır; sıfır değeri sayının belirlenmediği anlamına gelir
SignerDiagnosticsStatus=pcvsValid, geçersiz imzaların anlık görüntüleri dahil istenen anlık görüntülerin tamamlandığı anlamına gelir; tüm imzaların geçtiği anlamına gelmez. pcvsUnavailable toplamanın devre dışı ya da desteklenmediğini, pcvsIndeterminate ise arka ucun istenen toplamayı ayrıştırma ya da kaynak sınırları içinde tamamlayamadığını gösterir
OpenSSL ve yerel macOS uygulamaları toplamayı 64 imzalayanla sınırlar. OpenSSL ayrıca tanılama CMS girdisini 4 MiB ile ve toplam tanılama giriş/çıkış işini 64 MiB ile sınırlar; macOS döndürülen sertifika materyalini sertifika başına 4 MiB ve toplam 64 MiB ile sınırlar. Daha düşük bir MaxSignerCount, çağıranın istediği sayıyı daha da azaltır
İmzalayan anlık görüntüleri, yapılandırılmış kanıtı ve toplam doğrulama sırasında getirilen kanıtı yeniden kullanır. OpenSSL her tanılama anlık görüntüsü için ikinci bir ağ getirmesi yapmaz ve eksik bir toplam getirme başarılı bir çevrimdışı iptal anlık görüntüsüne dönüşemez
PadesSignerResolverOverride önceliklidir, ardından açıkça kaydedilmiş bir IPadesSignerProvider ve son olarak platform varsayılanı gelir. Windows dışı varsayılanlar ConfigureSslSigningCredentials gerektirir; yalnızca libcrypto'nun kullanılabilir olması bir özel anahtar ya da sertifika sağlamaz
OpenSSL varsayılanı, sertifikası açık yapılandırmayla seçildiği için boş olmayan bir CertificateThumbprint değerini reddeder. Uygulama bu sağlayıcıyı seçtiğinde Keychain imzalama ConfigureKeychainSignerProvider üzerinden kullanılabilir kalır
| Variable | Description |
|---|---|
PadesSignerResolverOverride | Kayıtlı ve platform sağlayıcılarından önce değerlendirilen isteğe bağlı çözümleyici geri çağrısı |
PadesCmsVerifier | Geçerli CMS doğrulama arka ucu; normalde ConfigurePadesCmsVerifier üzerinden atanır |
PdfCertificatePathValidator | Geçerli sertifika yolu doğrulayıcısı; normalde ConfigurePdfCertificatePathValidator üzerinden atanır |
PadesSignerProvider | Geçerli imzalayan sağlayıcısı; normalde ConfigurePadesSignerProvider üzerinden atanır |