Современные провайдеры подписи
HPDFSignatureProvider отделяет разбор и кодирование CMS от хранения закрытых ключей и платформенной криптографии
Алгоритмы проверки
HPDFVerifyCMSSignatureEx проверяет pure-mode подписи CMS Ed25519 и Ed448 через THPDFPlatformSignatureProvider или переданный вызывающим кодом провайдер и записывает точный OID подписи в THPDFSignatureInfo.SignatureAlgorithmOID
При разборе CMS сверяются набор дайджестов контейнера, дайджест подписанта, параметры механизма подписи и опциональный атрибут защиты алгоритмов из RFC 6211 — ещё до хеширования или диспетчеризации в провайдер; статусы и детальные коды проблем см. в согласованности digest-алгоритмов CMS
ML-DSA-44, ML-DSA-65 и ML-DSA-87 используют платформенный провайдер, когда он доступен, но при проверке загруженного документа они включаются, только если Catalog объявляет developer extension HotPDF для PDF 2.0
Провайдеры подписания
THotPDF.SignPDFWithPFX и перегрузки HPDFCMSSignPDFStream на базе PFX выбирают RSA, ECDSA, Ed25519 или Ed448 из совпавшей идентичности PKCS#12 без переданного вызывающим кодом signing callback
Закрытые скаляры ECDSA подписываются через Windows CNG и возвращаются как строгие DER-значения ECDSA, а Ed25519 и Ed448 используют опциональный OpenSSL 3 libcrypto, выбираемый через THPDFCMSSignOptions.OpenSSLLibraryPath или обычный путь поиска библиотек
PureEdDSA подписывает полный DER SET OF подписанных атрибутов, а не заранее вычисленный дайджест атрибутов; Ed25519 комбинирует этот вход с дайджестами документа SHA-512, а Ed448 использует id-shake256-len с 512-битным выходом SHAKE256
THPDFCMSSignOptions.SignerIdentifier выбирает кодирование идентичности issuer-and-serial или X.509 SubjectKeyIdentifier независимо от провайдера закрытого ключа; см. подписантов CMS с SubjectKeyIdentifier
THPDFCallbackSignatureProvider адаптирует callback приложения, а THPDFRemoteSignatureProvider оборачивает удалённый transport ограниченными лимитами на повторные попытки, отмену, входные данные и подписи
THPDFCSCSignatureProvider реализует удалённое подписание по CSC API v2 поверх переданного приложением HTTP transport, включая обновление OAuth token, обнаружение credential и цепочек сертификатов, явное получение SAD с фиксированным hash, ограниченные упорядоченные batch multisign, синхронный или асинхронный signatures/signHash, ограниченный polling, метки времени RFC 3161, отмену и воспроизведение идемпотентных запросов по адресу контента
THPDFPKCS11SignatureProvider сериализует операции RSA и ECDSA относительно принадлежащей вызывающему коду аутентифицированной сессии PKCS#11 и handle закрытого ключа, выбирая механизмы RSA PKCS#1 v1.5 под конкретный дайджест, RSA-PSS или сырую ECDSA — без экспорта материала ключа
THPDFWindowsKeyStorageSignatureProvider открывает персистентные ключи в Microsoft smart card KSP или любом именованном key storage provider CNG, опционально отклоняет программные ключи через свойство Impl Type, применяет silent- или интерактивную политику доступа и подписывает дайджесты SHA-2 или SHA3 с RSA PKCS#1 v1.5, RSA-PSS или ECDSA
CreateFromKeyHandle адаптирует существующий NCRYPT_KEY_HANDLE и может либо заимствовать его, либо владеть им — приложения, которые уже управляют аутентификацией smart card, TPM или vendor HSM, сохраняют контроль над жизненным циклом
HPDFCMSBuildSignedDataWithProvider собирает detached CMS из дайджеста, выбранного в THPDFCMSSignOptions.DigestAlgorithm, а HPDFCMSSignPDFStreamWithProvider подписывает существующий placeholder подписи PDF через ограниченные потоковые копии, потоковое хеширование диапазона и seek-патчи фиксированной ширины, не удерживая в памяти полный второй PDF
HPDFCMSEstimatePlaceholder вычисляет размер CMS без побочных эффектов из явной длины подписи, оценки провайдера или размера ключа сертификата RSA, а затем учитывает точную статическую форму CMS и настроенные динамические резервы под timestamp или counter-signature
HPDFCMSSignPDFStreamWithProviderAutoSize и HPDFCMSSignPDFStreamWithExternalSignerAutoSize перестраивают слишком маленькие unsigned placeholder перед подписанием; повторные попытки после подписания требуют возможности провайдера spcSafeSignRetry, а callback внешнего подписанта после возврата подписи никогда не вызывается повторно
Варианты размеров, контракты перестроения, политика повторов и диагностика — в автоматическом определении размера placeholder CMS
Контракты transport, авторизации, повторов, polling и бюджетов — в удалённом провайдере подписи CSC
Политика дайджестов, RFC 3161, Seed Value, провайдеры и потоковые контракты — в подписях и метках времени PDF на SHA3
Требования к сертификатам с именованными кривыми, матрица SHA-2 и SHA3 для конкретных кривых, строгое кодирование DER и валидация производителя с отказом до обращения к провайдеру — в подписях ECDSA на кривых Brainpool
Контракт запроса к провайдеру
THPDFSignatureProviderRequest несёт алгоритм подписи и OID, OID дайджеста, вид входа (сообщение или дайджест), длину соли PSS, публичный ключ или сертификат, идентификатор ключа, идентификатор операции, подпись и контекст алгоритма
Провайдер подписания возвращает spsValid с непустой подписью, а провайдеры проверки — spsValid или spsInvalid; результаты «не поддерживается», «повреждено», «ошибка провайдера» и «отменено» остаются различимыми