Сертифікаційні підписи та блокування полів
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, області SigFieldLock і FieldMDP, права використання UR, джерело UR чи UR3 у Catalog, область об'єктів Identity, невідомі методи, структурну коректність та рядок діагностичної проблеми
Вона перевіряє потрібні прямі та непрямі форми, цілі /Perms у Catalog, версії перетворень, дублікати посилань, обмеження UR проти UR3 і усталене значення DocMDP /P 2
Якщо присутні і SigFieldLock, і FieldMDP, їхні дії та списки полів мають збігатися
Обхід області Identity безпечний щодо циклів і обмежений 64 рівнями та 100000 непрямих об'єктів, тоді як інспекція ніколи не виконує JavaScript, дії чи вміст підпису
Охоплення стандартних перетворень
| Метод | Повідомлювана політика |
|---|---|
DocMDP | Право сертифікації та відповідна ціль /Perms /DocMDP у Catalog |
UR | Права документа, анотацій, форм, підписів і вбудованих файлів плюс застаріле джерело /UR або байт-діапазонне /UR3 |
FieldMDP | Область блокування полів All, Include чи Exclude і скопійована угода SigFieldLock |
Identity | Цикл-безпечні транзитивні номери непрямих об'єктів, досяжні з обов'язкового непрямого кореня /Data |
Невідомі імена методів зберігаються в UnknownTransformMethods і роблять структуру прав недійсною, щоб критичне перетворення не можна було проглядіти
Межа перевірки
GetLoadedSignaturePermissions повідомляє лише про структуру політики
VerifyLoadedSignature продовжує окремо повідомляти про криптографічну цілісність
AnalyzeLoadedSignatureRevisions виконує семантичний аналіз змін по кожній ревізії для байт-діапазонних політик DocMDP, FieldMDP, UR3 і Identity, тоді як застарілі підписи UR з дайджестом об'єктів без байт-діапазону залишаються доступними для структурної інспекції
SaveIncrementalUpdateAuthenticated перетворює інспекцію на примусове забезпечення: вона читає політики з підписаних знімків, автентифікує керівні підписи, перевіряє всі пізніші ревізії та публікує через атомарну заміну лише після успіху кожної політики
Продуктивність
Перевірка виробника сканує лише створені поля AcroForm та невеликий масив посилань на підписи, тоді як завантажена інспекція читає лише обраний підпис, його блокування, його посилання та елемент прав каталога
Жоден вміст сторінки, потік зображень, програма шрифту чи непрямий об'єкт, що не стосується справи, не декодується