PLBuildModernDetachedCMS
Криптография, цифровые подписи
Описание
Строит отделённый CMS SignedData поверх подписей RSA, ECDSA или Ed25519 для алгоритмов, которые не умеет выражать сообщение-слой Windows CryptoAPI
Сертификат подписанта и его контекст цепочки, алгоритм хеша, DER-блоки типа обязательств и политики подписи, данные об отзывах и политика дополнения — всё это приходит через параметры; сырую подпись поставляют CNG NCrypt, внешний callback подписанта дайджеста или чисто-Pascal путь Ed25519
Синтаксис
Delphi
Function PLBuildModernDetachedCMS(CertContext: Pointer;
Const CertificateDER, Ed25519Seed, Data, SubFilter: AnsiString;
DigestAlgorithm: Integer; Const CommitmentTypeDER,
SignaturePolicyDER: AnsiString; NCryptKeyHandle: TPLIntPtr= 0;
AllowPrivateKeyUI: Boolean= False;
ExternalSigner: TPDFlibExternalDigestSignEvent= Nil;
ExternalSender: TObject= Nil; ExternalSignProcessID: Integer= 0;
ExternalSignatureAlgorithm: Integer= 0;
RSAPSSPadding: Boolean= False;
Const RevocationInfoDER: AnsiString= ''): AnsiString;Параметры
| CertContext | Дескриптор Windows CERT_CONTEXT сертификата подписи; Nil для чисто внешнего пути подписи |
|---|---|
| CertificateDER | DER-кодированный сертификат подписи; используется для встроенного сертификата и ссылок на издателя/серийный номер |
| Ed25519Seed | 32-байтовая затравка при подписи Ed25519 без CNG, иначе пустая |
| Data | Байты уже прохешированного диапазона, которые покрывает отделённая подпись |
| SubFilter | Целевой /SubFilter вроде /ETSI.CAdES.detached, управляющий выбором атрибутов |
| DigestAlgorithm | Порядковый номер алгоритма хеша, соответствующий Ord(TPDFlibDigestAlgorithm): 2 SHA-256, 3 SHA-384, 4 SHA-512, с 5 по 7 семейство SHA-3 |
| CommitmentTypeDER | DER-кодированный атрибут типа обязательств, пустой если его нет |
| SignaturePolicyDER | DER-кодированный идентификатор политики подписи, пустой если его нет |
| NCryptKeyHandle | Открытый дескриптор ключа CNG; 0 — функция сама откроет приватный ключ сертификата, при желании с показом UI |
| AllowPrivateKeyUI | Разрешает диалог получения ключа CNG, когда ключ требует присутствия пользователя |
| ExternalSigner | Callback, принимающий дайджест и возвращающий сырую подпись; для HSM или удалённой подписи |
| ExternalSender | Отправитель, передаваемый обратно в callback ExternalSigner |
| ExternalSignProcessID | Идентификатор процесса подписи, передаваемый обратно в callback |
| ExternalSignatureAlgorithm | Одно из PL_EXTERNAL_SIGNATURE_RSA_PKCS1, PL_EXTERNAL_SIGNATURE_ECDSA_DER, PL_EXTERNAL_SIGNATURE_ECDSA_P1363 |
| RSAPSSPadding | Выбирает дополнение RSASSA-PSS для подписей RSA |
| RevocationInfoDER | Заранее собранные данные об отзывах для встраивания как RevocationInfoChoices |
Возвращаемое значение
DER-кодированный отделённый CMS либо пустая строка, если какой-то шаг подписи не удался
Примечания
Эта процедура — движок современных путей подписи в процессе подписания; прямой вызов сохраняет полный контроль над атрибутами обязательств и политики, а возвращённые байты встают в дыру PDF /Contents так же, как данные, проверенные через PLIsModernDetachedCMS
См. также
PLVerifyModernDetachedCMS, PLIsModernDetachedCMS, PLModernSignatureSizeEstimate, TPDFlibExternalDigestSignEvent, SetSignProcessExternalDigestSigner