Кілька основних підписувачів CMS
HotPDF може створити один контейнер SignedData за RFC 5652, що містить до 256 незалежних записів основних SignerInfo
Запити на побудову
Кожен THPDFCMSPrimarySignerRequest надає свої сертифікат і матеріал ключа, дайджест документа, THPDFCMSSignOptions, необов'язковий THPDFSignatureProvider та ідентифікатор ключа постачальника
HPDFCMSBuildMultiSignedData перевіряє кожен запит перед викликом будь-якого рідного ключа, зовнішнього callback, callback позначки часу, callback PDF MAC чи постачальника, запобігаючи тому, щоб недійсний пізніший запит спричиняв зайву часткову віддалену роботу з підписуванням
SetLength(Signers, 2);
Signers[0].KeyMaterial := FirstKey;
Signers[0].DocumentDigest := HPDFCMSDigestBytes(DocumentBytes, cmsdaSHA256);
Signers[0].Options := FirstOptions;
Signers[1].KeyMaterial := SecondKey;
Signers[1].DocumentDigest := HPDFCMSDigestBytes(DocumentBytes, cmsdaSHA384);
Signers[1].Options := SecondOptions;
Signers[1].Provider := RemoteProvider;
Signers[1].KeyIdentifier := 'approval-key';
CMS := HPDFCMSBuildMultiSignedData(Signers);
Детерміноване злиття
HPDFCMSMergeSignedData поєднує вже побудовані CMS-контейнери для асинхронних або розподілених робочих процесів підписування, не повторюючи операцій із закритим ключем
Кожен вхід має використовувати конверти та множини signedData визначеної довжини, має оголошувати кожен алгоритм дайджеста, використаний його основними підписувачами, і має нести байт-ідентичний encapContentInfo; додаткові оголошені алгоритми дайджестів лишаються дозволеними
Злитий контейнер видаляє дублікати алгоритмів дайджестів, сертифікатів і значень відкликання, сортує всі значення SET OF за байтовим порядком DER, зберігає кожного основного підписувача й підвищує зовнішню версію до найвищої дійсної вимоги входу
Порядок запитів навмисно не спостережуваний після кодування, оскільки signerInfos — це DER SET OF; тому результати розбору й перевірки використовують порядок DER, а не порядок запитів
Побудова з одним підписувачем і злиття з одним контейнером точно зберігають наявні байти CMS
Незалежна перевірка
HPDFParseCMSSignatures, HPDFVerifyCMSSignaturesEx і HPDFVerifyCMSSignerReport повертають незалежний результат для кожного основного підписувача, зокрема його атрибути, політику дайджеста й підпису, відповідний сертифікат, позначки часу, контрпідписи та статус помилки
Пошкоджений або криптографічно недійсний підписувач не стирає дійсний результат іншого, тоді як сукупний булевий результат дорівнює false, якщо кожен основний підписувач не успішний
Обчислення розміру місця
HPDFCMSEstimateMultiSignerPlaceholder виводить довжину кожного підпису без підписування, будує точну форму статичного контейнера без дублікатів із синтетичними значеннями підписів, підсумовує динамічні резерви callback і один раз застосовує налаштований глобальний запас безпеки, вирівнювання, мінімум і максимум
THPDFCMSPlaceholderEstimateInfo.SignatureBytes повідомляє суму для всіх основних підписувачів, а cpesMixed позначає результат, чиї підписувачі використали різні джерела оцінки
Межа PDF-робочого процесу
API з кількома підписувачами розкривають універсальну функціональність CMS для застосунків, чий споживчий профіль дозволяє кілька основних підписувачів в одному контейнері
Багато PDF-підписів і робочих процесів PAdES моделюють одного основного підписувача на словник підпису, тому використовуйте окремі поля PDF-підпису, якщо профіль одержувача явно не приймає CMS із кількома підписувачами
Див. підписувачів CMS SubjectKeyIdentifier, узгодженість алгоритму дайджеста CMS та автоматичне обчислення розміру місця CMS