Удалённый 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