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Помечает редакцию как обновление открытого документа на месте

Параметры

IsDocTimeStampTrue, если подписывающий формирует метку времени документа

Примечания

Каждый метод открытия возвращает TPDFlibSignerResult

Уровни DocMDP соответствуют значению P преобразования из ISO 32000: 1 — без изменений, 2 — заполнение форм, 3 — аннотации; при ненулевом уровне в AcroForm выставляется бит AppendOnly у /SigFlags, чтобы программы просмотра соблюдали сертификацию

См. также

TPDFlibSignDoc, TPDFlibPFXFile, TPDFlibSignerResult, NewSignProcessFromFile, SetSignProcessDocMDP