Сертификационные подписи и блокировки полей
HotPDF может создавать структуры прав PDF, привязанные к сертификационным подписям и подписанным блокировкам полей, а затем инспектировать те же структуры в загруженном документе
API производителя
procedure AddCertificationSignatureField(
const FieldName: AnsiString;
Rectangle: TRect;
Permission: THPDFDocMDPPermission;
ContentsBytes: Integer = 8192;
const SubFilter: AnsiString = 'adbe.pkcs7.detached';
const Reason: AnsiString = '';
const Location: AnsiString = '';
const ContactName: AnsiString = '';
Flags: THPDFFormFieldFlags = []);
procedure ConfigureCertificationSignature(
const FieldName: AnsiString;
Permission: THPDFDocMDPPermission);
procedure AttachSignatureFieldLock(
const FieldName: AnsiString;
Action: THPDFFieldLockAction;
const Fields: array of AnsiString);
AddCertificationSignatureField объединяет создание подписанного заполнителя с настройкой сертификации
ConfigureCertificationSignature предназначен для существующего созданного подписанного заполнителя и требует, чтобы это поле было первым полем, несущим словарь подписи
Документ может содержать только одну сертификационную подпись, поэтому второй запрос на настройку отклоняется до изменения графа объектов
Эти API автоматически согласуют вывод в формате PDF 1.5
Уровни прав DocMDP
| Значение | Право сертификации |
|---|---|
dmpNoChanges | После сертификации изменения не разрешены |
dmpFormFillAndSign | Разрешены заполнение формы, создание экземпляра шаблона и подписание |
dmpFormFillSignAndAnnotate | Разрешены предыдущие изменения, а также создание, удаление и изменение аннотаций |
dmpNone зарезервирован для результатов инспекции без преобразования DocMDP и отклоняется методами производителя
Области блокировки полей
| Значение | Аргумент Fields | Действие после подписания |
|---|---|---|
flaAll | Должен быть пустым | Блокирует каждое поле формы |
flaInclude | Одно или несколько уникальных имён полей | Блокирует только перечисленные поля |
flaExclude | Одно или несколько уникальных имён полей | Блокирует каждое поле, кроме перечисленных |
AttachSignatureFieldLock отклоняет пустые имена, повторяющиеся имена, недопустимые значения действия, несовместимую структуру Fields, неподписанное целевое поле или поле, которое уже несёт блокировку или политику FieldMDP
Формируемая структура
- Сертификационная подпись несёт прямой массив
/Reference, содержащий прямой словарь ссылки подписи DocMDP и прямые параметры преобразования - Элемент Catalog
/Perms /DocMDPуказывает на тот же косвенный словарь подписи - Элемент поля
/Lockуказывает на косвенный словарь/Type /SigFieldLock - Область блокировки копируется в прямую ссылку подписи FieldMDP, а её элемент
/Dataуказывает на косвенный корень Catalog - Словарь подписи помечает ссылки преобразования как критические через
/V 1
Пример на Delphi
var
LockedFields: THPDFAnsiStringArray;
begin
HotPDF.CurrentPage.AddTextField(
'InternalCode', '', Rect(40, 80, 220, 108));
HotPDF.CurrentPage.AddCertificationSignatureField(
'CertSig', Rect(40, 140, 260, 190),
dmpFormFillAndSign, 8192,
'adbe.pkcs7.detached', 'Document approval');
SetLength(LockedFields, 1);
LockedFields[0] := 'InternalCode';
HotPDF.CurrentPage.AttachSignatureFieldLock(
'CertSig', flaInclude, LockedFields);
end;
Загруженная инспекция
function GetLoadedSignaturePermissions(
SigIndex: Integer;
out Info: THPDFSignaturePermissionInfo): Boolean;
Модуль чтения сообщает право DocMDP, связь Catalog, область SigFieldLock, область FieldMDP, имена полей, структурную корректность и строку диагностической проблемы
Проверяются требуемые прямые и непрямые формы, цели /Perms Catalog, версии transform, дублирующиеся ссылки, ограничения UR против UR3 и опциональный /P 2 default
Если присутствуют и SigFieldLock, и FieldMDP, их действия и списки полей должны совпадать
Модуль чтения выполняет ограниченную инспекцию словарей и массивов и не выполняет JavaScript, действия или содержимое подписи
Граница проверки
| Метод | Сообщаемая политика |
|---|---|
DocMDP | Право сертификации и совпадающая цель Catalog /Perms /DocMDP |
UR | Права на документ, аннотации, форму, подписи и встроенные файлы плюс legacy /UR или побайтовый диапазон /UR3 |
FieldMDP | Область блокировки полей All, Include или Exclude и скопированное соглашение SigFieldLock |
Identity | Циклобезопасные транзитивные номера объектов, достижимые из требуемого непрямого /Data корня |
Неизвестные имена методов сохраняются в UnknownTransformMethods и делают структуру прав недействительной, чтобы критичный transform нельзя было упустить
Граница валидации
GetLoadedSignaturePermissions сообщает только о структуре политики
VerifyLoadedSignature продолжает отдельно сообщать о криптографической целостности
AnalyzeLoadedSignatureRevisions выполняет поревизионный анализ семантических изменений для политик DocMDP, FieldMDP, UR3 и Identity с диапазоном байтов, тогда как устаревшие подписи UR object digest без диапазона байтов остаются доступны структурному осмотру
SaveIncrementalUpdateAuthenticated превращает осмотр в принуждение: читает политики из их подписанных снимков, аутентифицирует управляющие подписи, валидирует все последующие ревизии и публикует через атомарную замену только после успеха всех политик
Производительность
Проверка производителя сканирует только созданные поля AcroForm и небольшой массив ссылок на подписи, тогда как загруженная инспекция считывает только выбранную подпись, её блокировку, её ссылки и элемент прав каталога
Ни одно содержимое страницы, поток изображений, программа шрифта или несвязанный косвенный объект не декодируется