Удалённый signature provider CSC

THPDFCSCSignatureProvider реализует CSC API v2 — credentials/info, credentials/authorize, credentials/authorizeCheck, signatures/signHash, signatures/signPolling и signatures/timestamp — поверх существующего контракта THPDFSignatureProvider

Транспорт и авторизация

Провайдер никогда не выбирает HTTP stack и не хранит refresh token, client secret, PIN или OTP

THPDFCSCTransport получает точный метод, URL, bearer-авторизацию, JSON-тело, стабильный idempotency key, номер попытки, идентификатор операции и бюджет ответа, а THPDFCSCAccessTokenCallback поставляет и обновляет короткоживущие OAuth access token'ы

Когда нужен SAD, провайдер запрашивает метаданные credential и полную ограниченную цепочку сертификатов, спрашивает у THPDFCSCAuthenticationCallback проверенные значения аутентификации, получает SAD и при необходимости опрашивает асинхронный authorization handle

Подпись и защита от повторов

Sign принимает на вход digest из конвейера CMS, передаёт OID digest и подписи в signatures/signHash и при необходимости выдаёт DER-кодированные параметры RSA-PSS

SignHashBatch отправляет упорядоченный батч digest одного алгоритма под одной авторизацией, привязывает полученный SAD к точному количеству, алгоритмам, параметрам и байтам digest и сохраняет порядок запросов в синхронных и асинхронных результатах

Мультиdigest-вызов принимается, только когда его количество влезает и в MaxBatchSignatures, и в значение multisign credential, а ответ обязан содержать ровно одну подпись на каждый запрошенный digest

Разовые запросы переиспользуют content-addressed Idempotency-Key фиксированной длины на базе SHA-256, а ограниченный кэш операций возвращает защитные копии уже завершённого батча, когда снова подаются те же операция, credential, параметры и упорядоченные digest

Неудачная транспортная попытка сохраняет автоматически авторизованный SAD для точного повтора, но другой батч не может потреблять этот SAD и обязан получить новую авторизацию

Бюджеты и отмена

THPDFCSCOptions.Default ограничивает подписи в батче, байты ответа, одиночные подписи, timestamp, количество и байты цепочки сертификатов, попытки повтора, задержки Retry-After, попытки poll и кэшированные операции

Cancel проверяется до транспортных вызовов, между повторами и во время коротких порций ожидания poll, а идентификатор операции также передаётся транспорту, чтобы приложение могло отменить свой собственный HTTP-запрос в полёте

Цепочки сертификатов и timestamp

RefreshCredentialInfo валидирует и кэширует метаданные ключа, алгоритма, авторизации, SCAL, мультиподписи и цепочки сертификатов без подписывания

GetCertificateChain возвращает защитные байтовые копии, пригодные для ввода сертификатов CMS, а TimestampDigest запрашивает и декодирует один token RFC 3161 с опциональным nonce

Современные signature provider