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 | Идентификатор учетных данных, определяемый поставщиком |
| OAuthToken | Bearer-токен только для записи, добавляемый к каждому стандартному транспортному запросу |
| TimeoutMS | Тайм-аут запроса, по умолчанию 300000 миллисекунд |
| MaxResponseBytes | Максимальный принимаемый размер ответа, по умолчанию 8 МиБ |
| ClientData | Необязательное определяемое поставщиком значение, отправляемое с запросами подписания |
| AuthorizationPIN | PIN только для записи, используемый автоматической авторизацией 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