PDFium Delphi Component Docs

FPdfCrypto birimi

Unit: FPdfCrypto
Platform arka uçları, PKCS#11 bütünleştirmeleri, güven depoları, iptal getiricileri ve sınırlı yol doğrulaması için PAdES imzalayan sağlayıcısı ve sertifika doğrulama cephesi

Syntax

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;

Description

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

Functions

FunctionDescription
PadesCryptoAvailableGeçerli platformda PAdES imzalama için bir kripto arka ucu mevcutken True döndürür
PadesCryptoBackendNameEtkin kripto arka ucunun görünen adını döndürür
ResolvePadesSignerBir sertifika parmak izini ve dolgu şemasını imzalayan, imzalayan sertifikası ve zincire çözümler
ConfigurePdfCertificatePathValidatorValidatePdfCertificatePath tarafından kullanılan süreç geneli IPdfCertificatePathValidator öğesini ayarlar ya da temizler
ValidatePdfCertificatePathSertifika 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
ConfigurePadesSignerProviderPlatform arka ucundan önce kullanılan süreç geneli imzalayan sağlayıcısını ayarlar ya da temizler
ConfigurePadesCmsVerifierPAdES 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
PadesCmsVerificationAvailableBu derlemede kayıtlı ya da gömülü olsun, bir arka uç CMS doğrulayabildiğinde True döndürür
PadesCmsVerificationBackendNameEtkin doğrulama arka ucunun görünen adını döndürür; arka uç yokken boş bir dize döndürür

Provider interfaces

Interface memberDescription
IPdfTrustStore.LoadTrustAnchorsYapılandırılmış sertifika bütçelerine tabi olarak ek DER kodlu güven çapaları döndürür
IPdfValidationFetcher.FetchUri adresinden doğrulama malzemesini MaxBytes sınırını aşmadan getirir
IPdfCertificatePathValidator.ValidateSertifika yolunu kurar ve değerlendirir; TPdfCertificatePathReport öğesini doldurur
IPadesSignerProvider.BackendNamePadesCryptoBackendName tarafından açığa çıkarılan sağlayıcı görünen adını döndürür
IPadesSignerProvider.ResolveSağlanan TPadesSignerOptions için eksiksiz imzalayan malzemesini döndürür
IPdfPkcs11SignerProvider.EnumerateSlotsKullanılabilir PKCS#11 yuvalarını ve belirteç varlığı üst verisini döndürür
IPdfPkcs11SignerProvider.EnumerateCertificatesTek bir PKCS#11 yuvasında görünen sertifikaları ve imzalama mekanizmalarını döndürür
IPdfPkcs11SignerProvider.CloseProtectedSessionsSağlayıcının sahip olduğu korumalı ya da kimliği doğulanmış PKCS#11 oturumlarını kapatır
IPdfCmsVerifier.BackendNamePadesCmsVerificationBackendName 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.VerifyAttachedKendi içeriğini taşıyan ve ayrık segment gerektirmeyen bir zaman damgası token'ını doğrular

Types

TypeDescription
EPadesCryptoKripto arka ucu hataları için temel istisna
EPadesCryptoUnavailableGerekli bir imzalayan arka ucu ya da sertifika yolu doğrulayıcısı yapılandırılmamışken fırlatılır
TPadesPaddingSchemepsRsaPss, psRsaPkcs1v15 ya da psEcdsa
TPadesSignerOptionsCertificateThumbprint sertifikayı seçer ve PaddingScheme imza şemasını seçer; Default boş bir parmak izi ve psRsaPss kullanır
TPadesChainCertArrayDER kodlu zincir sertifikalarının dinamik dizisi
TPadesResolvedSignerSigner, SignerCertDer ve ChainCertDer çözümlenen imzalayan ve sertifika malzemesini birleştirir
TPdfRevocationModeprmNone, prmOffline, prmOnlineAllowed ya da prmOnlineRequired
TPdfStringArrayİlke OID'leri ve sağlayıcı mekanizma adları için kullanılan dinamik dize dizisi
TPdfCertificatePathOptionsValidationTime, 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
TPdfCertificatePathReportTrusted, PathBuilt, PolicyValid, RevocationChecked, PathCertificateCount, ErrorCode ve ErrorMessage doğrulama sonucunu raporlar
TPdfPkcs11SlotSlotID, Description, TokenLabel ve TokenPresent tek bir PKCS#11 yuvasını tanımlar
TPdfPkcs11SlotsTPdfPkcs11Slot kayıtlarının dinamik dizisi
TPdfPkcs11CertificateSlotID, ObjectID, LabelText, CertificateDer ve Mechanisms tek bir belirteç sertifikasını tanımlar
TPdfPkcs11CertificatesTPdfPkcs11Certificate kayıtlarının dinamik dizisi
TPadesSignerResolverProcPadesSignerResolverOverride enjeksiyon değişkeni için fonksiyon işaretçisi türü
TPdfCmsVerifyStatuspcvsUnavailable, pcvsValid, pcvsInvalid, pcvsUnsupported ya da pcvsIndeterminate
TPdfCmsRevocationReasonpcrrNone, pcrrCertificateRevoked, pcrrCrlExpired, pcrrCrlNotYetValid, pcrrCrlUnavailable, pcrrCrlSignatureInvalid, pcrrCrlInvalid, pcrrChainUntrusted, pcrrUnknown, pcrrOcspUnavailable, pcrrOcspInvalid ya da pcrrOcspStatusUnknown; iptal kanıtını doğrulama durumundan ayrı açıklar
TPdfCmsVerifyStagepcvstCryptographicSignature, pcvstChainBuild, pcvstOnlineRetrieval ya da pcvstRevocationCheck
TPdfCmsVerifyCheckpointDoğrulama ilerledikçe her TPdfCmsVerifyStage değerini alan object-method geri çağırması
TPdfCmsVerifyOptionsOnlineRetrieval, 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
TPdfCmsSignerVerifyResultSignerIndex, 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
TPdfCmsSignerVerifyResultsSınırlı imzalayan anlık görüntülerinin dinamik dizisi
TPdfCmsVerifyResultToplam 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

Revocation diagnostics

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

Per-signer diagnostics

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

Default signing backend

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

Global provider variables

VariableDescription
PadesSignerResolverOverrideKayıtlı ve platform sağlayıcılarından önce değerlendirilen isteğe bağlı çözümleyici geri çağrısı
PadesCmsVerifierGeçerli CMS doğrulama arka ucu; normalde ConfigurePadesCmsVerifier üzerinden atanır
PdfCertificatePathValidatorGeçerli sertifika yolu doğrulayıcısı; normalde ConfigurePdfCertificatePathValidator üzerinden atanır
PadesSignerProviderGeçerli imzalayan sağlayıcısı; normalde ConfigurePadesSignerProvider üzerinden atanır

See Also

FPdfCms, FPdfCryptoWin, FPdfCryptoSsl, FPdfCryptoMac, FPdfCryptoOcsp, FPdfTsa, TPdf.SignPades