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