PDFium Component Docs

FPdfCryptoMac Moduł

Unit: FPdfCryptoMac
Zaplecze macOS Keychain do podpisywania PAdES, a ponadto weryfikacja CMS i ocena zaufania certyfikatów przez Security.framework

Syntax

EPdfKeychainError = class(Exception);

TPdfKeychainSignerProvider = class(TInterfacedObject, IPadesSignerProvider)
  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;

Description

FPdfCryptoMac to zaplecze kryptograficzne macOS używane przez FPdfCrypto i FPdfCms, obejmujące obie połówki integracji platformowej: podpisywanie PAdES przez tożsamość z Keychain oraz weryfikację CMS przez systemowy dekoder CMS i ocenę zaufania. Security.framework i CoreFoundation są ładowane i rozwiązywane po nazwie w czasie działania, a nie konsolidowane, więc moduł kompiluje się na każdym celu, a w czasie działania raportuje, czy usługi platformy są faktycznie osiągalne

Po stronie podpisywania TPdfKeychainSignerProvider implementuje IPadesSignerProvider. Jego metoda Resolve wylicza tożsamości z Keychain, wybiera tę, której certyfikat pasuje do odcisku SHA-1 przekazanego w TPadesSignerOptions, odczytuje certyfikat DER i odpowiadającą mu referencję klucza prywatnego, a zwraca TPadesResolvedSigner, którego ICmsSigner podpisuje atrybuty podpisane CMS przez Security.framework, więc klucz prywatny nigdy nie opuszcza Keychain. Schemat dopełnienia żądany w opcjach jest uzgadniany z tym, co klucz faktycznie potrafi, a parametry RSASSA-PSS są takie same jak emitowane przez pozostałe zaplecza, więc dokument podpisany na macOS niesie identyczny AlgorithmIdentifier. ConfigureKeychainSignerProvider buduje dostawcę i instaluje go jako aktywne zaplecze podpisywania PAdES, zwracając zarejestrowany interfejs

Po stronie weryfikacji TPdfKeychainCmsVerifier implementuje IPdfCmsVerifier na bazie CMSDecoder i SecTrust. VerifyDetached skleja dwa podpisane zakresy bajtów po obu stronach dziury podpisu w treść odłączoną, której oczekuje dekoder, a następnie weryfikuje wartość CMS względem niej; VerifyAttached weryfikuje wartość CMS niosącą własną treść, czego wymaga token znacznika czasu. Obie metody zwracają TPdfCmsVerifyResult, który osobno zgłasza status podpisu, status zaufania i status unieważnień, opcjonalnie zbierając certyfikat podpisującego i oceniony łańcuch, i obie respektują ustawienia unieważnień, pobierania online i punktów kontrolnych z TPdfCmsVerifyOptions. ConfigureKeychainCmsVerifier buduje weryfikator i instaluje go jako aktywne zaplecze weryfikacji CMS

Ważność podpisu i zaufanie do certyfikatów pozostają odrębnymi wynikami, więc prawdziwy podpis pod niezaufanym lub samopodpisanym łańcuchem pozostaje odróżnialny od zmodyfikowanej treści

Dla dołączonego tokena RFC 3161 ograniczone parsowanie DER dostarcza natywnemu dekoderowi oryginalne enkapsulowane oktety TSTInfo, nie zmieniając ich typu treści ani atrybutów podpisanych. Zwykły przebieg weryfikacji CMS wyklucza atrybuty niepodpisane ze swojego natywnego wejścia, więc automatyczne przetwarzanie znaczników czasu nie może zastąpić integralności ani wyniku łańcucha samego zewnętrznego podpisu. Ten przebieg nie waliduje kontrpodpisów ani innych atrybutów niepodpisanych; ValidatePadesTrust osobno weryfikuje każdy oryginalny token znacznika czasu, odcisk wiadomości, rolę certyfikatu TSA, zaufanie i wynik unieważnienia

Przekaż ścieżkę pliku Keychain do TPdfKeychainSignerProvider.Create, aby ograniczyć wyszukiwanie tożsamości do tego Keychain przez lokalną dla zapytania listę wyszukiwania, a następnie zarejestruj dostawcę przez ConfigurePadesSignerProvider. Pusta ścieżka używa bieżącego zakresu wyszukiwania użytkownika. Otwarcie lub przeszukanie wybranego Keychain nie modyfikuje domyślnego Keychain, listy wyszukiwania użytkownika ani konfiguracji zaufania systemu; nieprawidłowe ścieżki i niedostępne symbole wyszukiwania zakresowego zgłaszają EPdfKeychainError

Resolve eksportuje także dostępny łańcuch wydawców certyfikatu podpisującego przez offline'owe, lokalne dla zapytania wyszukiwanie certyfikatów i natywne budowanie łańcucha. Certyfikaty kandydujące są ograniczone do 4096 elementów, 1 MiB każdy i 16 MiB łącznie; zbudowany łańcuch jest ograniczony do 32 certyfikatów wraz z liściem, który jest zwracany osobno z ChainCertDer. Eksport materiału certyfikatów nie ustanawia zaufania ani nie instaluje kotwicy zaufania, a niedostępnego wydawcy nie można zsyntetyzować

Signing Functions

FunctionDescription
KeychainAvailableZwraca True, gdy Security.framework i CoreFoundation zostały załadowane, a każdy symbol wymagany do podpisywania został rozwiązany
KeychainMissingSymbolsZwraca nazwy, których nie udało się rozwiązać, rozdzielone spacjami, albo pusty ciąg, gdy wszystko powiązano
ConfigureKeychainSignerProviderBuduje TPdfKeychainSignerProvider, instaluje go jako zaplecze podpisywania PAdES i zwraca jako IPadesSignerProvider
TPdfKeychainSignerProvider.CreateWybiera opcjonalny istniejący plik Keychain do wyszukiwania tożsamości w zakresie, odrzucając osadzone znaki NUL oraz ścieżki dłuższe niż 4096 jednostek kodu ciągu
TPdfKeychainSignerProvider.BackendNameZwraca identyfikator zaplecza zgłaszany dla dostawcy podpisującego
TPdfKeychainSignerProvider.ResolveDopasowuje TPadesSignerOptions do tożsamości z Keychain i zwraca TPadesResolvedSigner z podpisującym, certyfikatem DER i łańcuchem

Verification Functions

FunctionDescription
KeychainVerificationAvailableZwraca True, gdy symbole dekodera CMS, polityki zaufania i oceny zaufania zostały rozwiązane
ConfigureKeychainCmsVerifierBuduje TPdfKeychainCmsVerifier, instaluje go jako zaplecze weryfikacji CMS i zwraca jako IPdfCmsVerifier
ConfigureKeychainTrustAnchorsKlonuje jawne kotwice DER dla każdej późniejszej oceny zaufania, uzupełniając kotwice systemowe bez modyfikowania Keychain; limity to 64 certyfikaty, 4 MiB każdy i 16 MiB łącznie, a pusta tablica je czyści
ConfigureKeychainOcspResponsesKlonuje jawne dowody OCSP w DER do natywnej oceny Security.framework; limity to 8 odpowiedzi, 1 MiB każda i 4 MiB łącznie, a pusta tablica je czyści
TPdfKeychainCmsVerifier.BackendNameZwraca identyfikator zaplecza zgłaszany dla zaplecza weryfikacji
TPdfKeychainCmsVerifier.VerifyDetachedWeryfikuje odłączoną wartość CMS względem dwóch należących do wywołującego segmentów treści opisanych przez Segment1, Segment1Length, Segment2 i Segment2Length, z użyciem przekazanych TPdfCmsVerifyOptions
TPdfKeychainCmsVerifier.VerifyAttachedWeryfikuje dołączoną wartość CMS niosącą własną podpisaną treść, z użyciem przekazanych TPdfCmsVerifyOptions

Types

TypeMembers and purpose
EPdfKeychainErrorWyjątek zgłaszany, gdy Security.framework jest niedostępny, gdy żadna tożsamość z Keychain nie pasuje do żądanego podpisującego albo gdy wywołanie podpisujące platformy zawodzi
TPdfKeychainSignerProviderZaplecze podpisywania PAdES implementujące IPadesSignerProvider, z BackendName i Resolve
TPdfKeychainCmsVerifierZaplecze weryfikacji CMS implementujące IPdfCmsVerifier, z BackendName, VerifyDetached i VerifyAttached

Remarks

See Also

FPdfCryptoWin, FPdfCrypto, FPdfCryptoOcsp, FPdfCms, FPdfTrustedList, FPdfMac