TPDFlibCSCClient

Безопасность и подписи

Описание

Даёт синхронный клиент для эндпоинтов учётных данных, авторизации и подписания дайджестом Cloud Signature Consortium

Клиент получает сертификат подписания и поддерживаемые OID алгоритмов из credentials/info, берет данные активации подписи из credentials/authorize и отправляет один или несколько уже вычисленных дайджестов в signatures/signHash

SignDigest реализует TPDFlibExternalDigestSignEvent и может назначаться напрямую TPDFlib.OnExternalDigestSign, оставляя создание PDF ByteRange, аутентифицированные атрибуты CMS, подбор размера заполнителя и проверку возвращенной подписи внутри библиотеки

Единица

PDFlibCSC

Создание

Constructor TPDFlibCSCClient.Create;
Destructor TPDFlibCSCClient.Destroy;

Обнаружение учетных данных

Function TPDFlibCSCClient.RefreshCredentialInfo: Boolean;
Function TPDFlibCSCClient.SupportsAlgorithm(DigestAlgorithm, SignatureAlgorithm: Integer): Boolean;
Function TPDFlibCSCClient.GetCertificateChainDER(Index: Integer): AnsiString;
Function TPDFlibCSCClient.GetSupportedAlgorithmOID(Index: Integer): AnsiString;
Procedure TPDFlibCSCClient.ClearCredentialInfo;

RefreshCredentialInfo

Сертификат подписания раскрывается через SigningCertificateDER, дополнительные сертификаты — через CertificateChainCount и GetCertificateChainDER, а потолок удаленного пакета — через MaxBatchSize

Подписание

Function TPDFlibCSCClient.Authorize(NumSignatures: Integer; Const Digests: TPDFlibCSCByteArray; Const PIN, OTP, Description, ClientData: WideString; Out SAD: AnsiString): Boolean;
Function TPDFlibCSCClient.PrefetchAuthorization(NumSignatures: Integer; Const Digests: TPDFlibCSCByteArray; Const PIN, OTP, Description, ClientData: WideString): Boolean;
Function TPDFlibCSCClient.SetPrefetchedSAD(Const SAD: AnsiString; ExpiresInSeconds: Integer; Const PinnedDigests: TPDFlibCSCByteArray): Boolean;
Procedure TPDFlibCSCClient.ClearSAD;
Procedure TPDFlibCSCClient.ClearAuthorizationSecrets;

Каждый дайджест в пакете должен использовать тот же алгоритм и иметь точную длину, подразумеваемую HashPinningRequired=TrueNumSignatures поддерживает

Упреждающе выбранный SAD проверяется на срок действия и привязку к хешу и потребляется ровно один раз

Подписание

Function TPDFlibCSCClient.SignHashes(Const Digests: TPDFlibCSCByteArray; DigestAlgorithm, SignatureAlgorithm: Integer; Const SAD: AnsiString; Out Signatures: TPDFlibCSCByteArray): Boolean;
Function TPDFlibCSCClient.SignAuthorizedHashes(Const Digests: TPDFlibCSCByteArray; DigestAlgorithm, SignatureAlgorithm: Integer; Out Signatures: TPDFlibCSCByteArray): Boolean;
Function TPDFlibCSCClient.SignDigest(Sender: TObject; SignProcessID: Integer; Const Digest: AnsiString; DigestAlgorithm, SignatureAlgorithm: Integer; Var Signature: AnsiString): Boolean;

Каждый дайджест в пакете должен использовать один и тот же алгоритм и иметь точную длину, подразумеваемую DigestAlgorithm

SignatureAlgorithm and PDF_EXTERNAL_SIGNATURE_RSA_PKCS1PDF_EXTERNAL_SIGNATURE_ECDSA_DER

Параметры

ServiceURLБазовый URL сервиса до /csc/<version>
APIVersionСегмент версии endpoint, по умолчанию v1
CredentialIDИдентификатор учетных данных, определяемый поставщиком
OAuthTokenBearer-токен только для записи, добавляемый к каждому стандартному транспортному запросу
TimeoutMSТайм-аут запроса, по умолчанию 300000 миллисекунд
MaxResponseBytesМаксимальный принимаемый размер ответа, по умолчанию 8 МиБ
ClientDataНеобязательное определяемое поставщиком значение, отправляемое с запросами подписания
AuthorizationPINPIN только для записи, используемый автоматической авторизацией callback
AuthorizationOTPОдноразовый пароль только для записи, стираемый после авторизации колбэком
AuthorizationDescriptionНеобязательное описание, используемое автоматической авторизацией callback
OnTransportНеобязательный транспортный callback для mTLS, прокси, интеграции конкретного поставщика или детерминированных тестов

Свойства состояния

CredentialLoaded, SigningCertificateDER, CertificateChainCount, SupportedAlgorithmCount, MaxBatchSize, HashPinningRequired, LastAuthorizationExpiresAt, LastHTTPStatus и LastError открывают текущее состояние, не раскрывая секреты OAuth, PIN, OTP или SAD

Пример

var
  CSC: TPDFlibCSCClient;
  ProcessID: Integer;
begin
  CSC:= TPDFlibCSCClient.Create;
  try
    CSC.ServiceURL:= 'https://sign.example.com';
    CSC.CredentialID:= 'account/signing-key';
    CSC.OAuthToken:= AccessToken;
    CSC.AuthorizationPIN:= UserPIN;
    CSC.AuthorizationOTP:= CurrentOTP;
    if not CSC.RefreshCredentialInfo then
      raise Exception.Create(String(CSC.LastError));

    PDF.OnExternalDigestSign:= CSC.SignDigest;
    ProcessID:= PDF.NewSignProcessFromFile(InputFile, '');
    PDF.SetSignProcessField(ProcessID, 'Approval');
    PDF.SetSignProcessDigestAlgorithm(ProcessID, 2);
    PDF.SetSignProcessExternalDigestSigner(ProcessID,
      CSC.SigningCertificateDER, PDF_EXTERNAL_SIGNATURE_RSA_PKCS1, 512);
    PDF.EndSignProcessToFile(ProcessID, OutputFile);
  finally
    CSC.Free;
  end;
end;

Поведение при сбое

Методы возвращают False и устанавливают LastError, когда не проходит проверка конфигурации, транспорта, JSON, Base64, X.509, алгоритма, пакета, активации или числа ответов

Путь подписания внешним дайджестом независимо проверяет каждую возвращенную необработанную подпись по SigningCertificateDER до принятия PDF

См. также

OnExternalDigestSign, SetSignProcessExternalDigestSigner, SetSignProcessDigestAlgorithm