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 для чисто внешнего пути подписи
CertificateDERDER-кодированный сертификат подписи; используется для встроенного сертификата и ссылок на издателя/серийный номер
Ed25519Seed32-байтовая затравка при подписи Ed25519 без CNG, иначе пустая
DataБайты уже прохешированного диапазона, которые покрывает отделённая подпись
SubFilterЦелевой /SubFilter вроде /ETSI.CAdES.detached, управляющий выбором атрибутов
DigestAlgorithmПорядковый номер алгоритма хеша, соответствующий Ord(TPDFlibDigestAlgorithm): 2 SHA-256, 3 SHA-384, 4 SHA-512, с 5 по 7 семейство SHA-3
CommitmentTypeDERDER-кодированный атрибут типа обязательств, пустой если его нет
SignaturePolicyDERDER-кодированный идентификатор политики подписи, пустой если его нет
NCryptKeyHandleОткрытый дескриптор ключа CNG; 0 — функция сама откроет приватный ключ сертификата, при желании с показом UI
AllowPrivateKeyUIРазрешает диалог получения ключа CNG, когда ключ требует присутствия пользователя
ExternalSignerCallback, принимающий дайджест и возвращающий сырую подпись; для 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