TPDFlibSigner
Security and Signatures
Описание
TPDFlibSigner — автономный механизм подписания, который соединяет цель TPDFlibSignDoc с удостоверением TPDFlibPFXFile и записывает готовую подпись как новую инкрементальную редакцию
Откройте PDF из файла, потока или строки, привяжите удостоверение одним из методов открытия, выберите целевое поле, настройте подпись, затем завершите через AppendToFile, AppendToStream или ApplySignature
Класс покрывает полный набор возможностей подписания: выбор дайджеста, резервирование и оценку объёма содержимого, сведения об отзыве, типы обязательств, политики подписи, юридические заверения, уровни сертификации DocMDP, блокировки полей, метки времени документа и транзитные подписи фиксированной длины
Фасад открывает тот же конвейер через документированные функции SignProcess; используйте этот класс напрямую, когда процесс подписания нужно встроить в более крупный собственный генератор редакций
Синтаксис
Delphi
TPDFlibSigner = Class
Public
Constructor Create;
Destructor Destroy; Override;
Function OpenPDF(Const FileName: WideString; Const Password: WideString): TPDFlibSignerResult;
Function OpenPDFStream(SourceStream: TStream; Const Password: WideString): TPDFlibSignerResult;
Function OpenPDFString(Const SourceString: AnsiString; Const Password: WideString): TPDFlibSignerResult;
Function OpenPFX(Const FileName: WideString; Const Password: AnsiString; UseMachineKeyset: Boolean): TPDFlibSignerResult;
Function OpenCertStore(Const StoreName, CertName: WideString; UseMachineStore: Boolean): TPDFlibSignerResult;
Function OpenCertContext(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;
Procedure SetPrivateKeyUI(AllowUI: Boolean);
Procedure SetRSAPSSPadding(Enable: Boolean);
Procedure SetLegalAttestation(Const Value: WideString);
Procedure SelectField(Const FieldName: WideString; FieldPage: Integer);
Procedure SetSignatureProperty(SignatureProperty: TPDFlibSignatureProperty; Const NewValue: AnsiString);
Procedure SetAppearanceText(Const Text: WideString; FontSize, FontRed, FontGreen, FontBlue: Double);
Procedure SetSignatureBounds(Left, Top, Width, Height: Double);
Procedure SetPassthrough(SignatureLength: Integer);
Procedure SetDocTimeStamp(SignatureLength: Integer);
Procedure SetDigestAlgorithm(Algorithm: TPDFlibDigestAlgorithm);
Procedure SetContentsReserveBytes(ExtraBytes: Integer);
Procedure SetContentsEstimate(ChainBytes, CRLBytes, OCSPBytes, TimeStampBytes, SafetyMarginPercent: Integer);
Procedure SetRevocationInfo(Const RevocationInfoDER: AnsiString);
Procedure SetCommitmentType(CommitmentType: Integer);
Procedure SetDocMDP(Level: Integer);
Function SetFieldLock(Const Action: AnsiString; Const Fields: TArray): Boolean;
Procedure SetSignaturePolicy(Const PolicyOID: AnsiString; Const PolicyHashBytes: AnsiString; HashAlgorithm: TPDFlibDigestAlgorithm);
Function AppendToFile(Const FileName: WideString): Boolean;
Function AppendToStream(TargetStream: TStream): Boolean;
Function ApplySignature: Boolean;
Function GetByteRange(Index: Integer): Int64;
Function GetEstimatedContentsBytes: Integer;
Procedure SetInPlace;
Property IsDocTimeStamp: Boolean Read FIsDocTimeStamp;
End; Методы
| OpenPDF, OpenPDFStream, OpenPDFString | Открывает подписываемый документ из файла, потока или ANSI-строки |
|---|---|
| OpenPFX, OpenCertStore, OpenCertContext | Привязывает файл PFX, сертификат системного хранилища по отображаемому имени или внешний контекст сертификата |
| OpenEd25519, OpenEd25519FromFile | Привязывает пару ключей Ed25519 из памяти или из файлов |
| OpenCNGKey, OpenCNGKeyHandle | Привязывает ключ CNG по провайдеру и имени ключа или по дескриптору ключа |
| OpenExternalDigestSigner | Передаёт вычисление подписи дайджеста внешнему обратному вызову |
| SelectField | Выбирает поле подписи по полному составному имени и странице |
| SetSignatureProperty | Задаёт одно из значений spReason, spLocation, spContactInfo, spFieldImage, spSubFilter и spFieldImageOptions |
| SetAppearanceText | Хранит автоматически сформированный видимый текстовый блок, который при дописывании попадает в облик поля |
| SetSignatureBounds | Размещает поле по явным координатам |
| SetPassthrough | Формирует транзитную подпись ровно заданной длины для внешнего подписания |
| SetDocTimeStamp | Переключает подпись в метку времени документа |
| SetDigestAlgorithm | Выбирает дайджест, используемый для подписи |
| SetContentsReserveBytes, SetContentsEstimate | Резервирует дополнительные байты или вычисляет резерв по оценкам цепочки, CRL, OCSP и метки времени плюс запас безопасности |
| SetRevocationInfo | Встраивает заранее собранные данные об отзыве в форме DER |
| SetCommitmentType, SetSignaturePolicy, SetLegalAttestation | Задаёт намерение подписания, политику и юридическое заверение |
| SetDocMDP | Включает сертифицирующую подпись на уровне DocMDP 1, 2 или 3; вызывать до SelectField |
| SetFieldLock | Записывает словарь блокировки поля с действием и списком имён полей |
| AppendToFile, AppendToStream | Записывает подписанную редакцию в новый файл или поток |
| ApplySignature | Применяет подпись к документу на месте |
| GetByteRange, GetEstimatedContentsBytes | Возвращает запись ByteRange и оценённый размер содержимого после построения редакции |
| SetInPlace | Помечает редакцию как обновление открытого документа на месте |
Параметры
| IsDocTimeStamp | True, если подписывающий формирует метку времени документа |
|---|
Примечания
Каждый метод открытия возвращает TPDFlibSignerResult
Уровни DocMDP соответствуют значению P преобразования из ISO 32000: 1 — без изменений, 2 — заполнение форм, 3 — аннотации; при ненулевом уровне в AcroForm выставляется бит AppendOnly у /SigFlags, чтобы программы просмотра соблюдали сертификацию
См. также
TPDFlibSignDoc, TPDFlibPFXFile, TPDFlibSignerResult, NewSignProcessFromFile, SetSignProcessDocMDP