Сертифікаційні підписи та блокування полів

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

Структура, що формується

Приклад на 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 та невеликий масив посилань на підписи, тоді як завантажена інспекція читає лише обраний підпис, його блокування, його посилання та елемент прав каталога

Жоден вміст сторінки, потік зображень, програма шрифту чи непрямий об'єкт, що не стосується справи, не декодується

Див. також