TPDFlibPFXFile

Security and Signatures

Описание

TPDFlibPFXFile хранит удостоверение подписи, с помощью которого создаётся отсоединённая подпись PKCS#7

Удостоверение может происходить из файла PFX, записи системного хранилища сертификатов Windows, найденной по простому отображаемому имени, продублированного извне PCCERT_CONTEXT, пары ключей Ed25519, ключа CNG или внешнего обратного вызова вычисления дайджеста

Когда удостоверение привязано, SignData создаёт байты подписи CMS, а вспомогательные функции оценки вычисляют размер резерва /Contents до записи подписи

Демонстрация SigningWorkbench открывает PFX этим классом, прежде чем передать удостоверение в конвейер подписания

Синтаксис

Delphi

TPDFlibPFXFile = Class
  Public
    Destructor Destroy; Override;
    Function Open(Const FileName: WideString; Const Password: AnsiString; UseMachineKeyset: Boolean): TPDFlibSignerResult;
    Function OpenFromStore(Const StoreName, CertName: WideString; UseMachineStore: Boolean): TPDFlibSignerResult;
    Function EnumerateStore(Const StoreName: WideString; UseMachineStore: Boolean;
      Var Infos: Array Of TPDFlibCertificateInfo): Integer;
    Function OpenFromContext(CertContext: Pointer): TPDFlibSignerResult;
    Function OpenEd25519(Const CertificateDER, PrivateKeyDER: AnsiString): TPDFlibSignerResult;
    Function OpenEd25519FromFile(Const CertificateFile, PrivateKeyFile: WideString): TPDFlibSignerResult;
    Function OpenCNGKey(Const CertificateDER: AnsiString;
      Const ProviderName, KeyName: WideString; UseMachineKey, AllowUI: Boolean): TPDFlibSignerResult;
    Function OpenCNGKeyHandle(Const CertificateDER: AnsiString; KeyHandle: TPLIntPtr; AllowUI: Boolean): TPDFlibSignerResult;
    Function OpenExternalDigestSigner(Const CertificateDER: AnsiString;
      Signer: TPDFlibExternalDigestSignEvent; Sender: TObject;
      SignProcessID, SignatureAlgorithm, SignatureReserveBytes: Integer): TPDFlibSignerResult;
    Function GetCertificateDER: AnsiString;
    Procedure SetPrivateKeyUI(AllowUI: Boolean);
    Procedure SetRSAPSSPadding(Enable: Boolean);
    Function CertificateKeyUsage: Integer;
    Function EstimateSignatureSize(Const Data, SubFilter: AnsiString;
      DigestAlgorithm: TPDFlibDigestAlgorithm;
      Const CommitmentTypeDER, SignaturePolicyDER, RevocationInfoDER: AnsiString): Integer;
    Function EstimateCertificateChainSize: Integer;
    Function SignData(Const Data, SubFilter: AnsiString; DigestAlgorithm: TPDFlibDigestAlgorithm;
      Const CommitmentTypeDER, SignaturePolicyDER, RevocationInfoDER: AnsiString): AnsiString;
  End;

Методы

OpenЗагружает файл PFX или PKCS#12 с паролем; UseMachineKeyset выбирает набор ключей компьютера
OpenFromStoreНаходит сертификат в системном хранилище Windows по простому отображаемому имени субъекта и привязывает его контекст; побеждает первый сертификат с пригодным закрытым ключом
EnumerateStoreЗаполняет переданный вызывающим массив элементами TPDFlibCertificateInfo по одному на сертификат хранилища и возвращает фактическое число заполненных
OpenFromContextПривязывает полученный извне PCCERT_CONTEXT; владение остаётся у вызывающего, и контекст должен оставаться действительным до завершения подписания
OpenEd25519, OpenEd25519FromFileПривязывает сертификат и seed Ed25519 из памяти или из файлов
OpenCNGKey, OpenCNGKeyHandleПривязывает ключ на основе CNG по провайдеру и имени ключа или по существующему дескриптору ключа
OpenExternalDigestSignerПодписывает через обратный вызов TPDFlibExternalDigestSignEvent вместо локального закрытого ключа
GetCertificateDERПривязанный сертификат в форме DER
SetPrivateKeyUIРазрешает или подавляет запрос закрытого ключа CryptoAPI
SetRSAPSSPaddingВыбирает дополнение RSASSA-PSS для отсоединённых подписей RSA; устаревшие ключи CryptoAPI продолжают использовать PKCS#1 v1.5
CertificateKeyUsageБиты назначения ключа X.509, упакованные в два байта, или -1, если контекст не привязан
EstimateSignatureSize, EstimateCertificateChainSizeВерхние границы для вывода CMS и цепочки сертификатов
SignDataСоздаёт отсоединённую подпись CMS для данных с выбранным подфильтром и алгоритмом дайджеста

Примечания

Все методы открытия возвращают TPDFlibSignerResult, поэтому неудачную привязку удостоверения можно сообщить точно

Фасад получает доступ к тем же удостоверениям через SetSignProcessPFXFromFile, SetSignProcessCertFromStore, SetSignProcessEd25519Identity и SetSignProcessCNGKey

См. также

TPDFlibSignerResult, TPDFlibCertificateInfo, TPDFlibSigner, TPDFlibSignDoc, NewSignProcessFromFile