Функція signature_details()

1. Опис

Функція signature_details(String data, SignFormat container): SignatureInfoDto використовується для отримання деталей підпису з підписаних даних. Ця функція приймає дані у форматі Base64 та тип контейнера підпису, і повертає об’єкт типу SignatureInfoDto, що містить інформацію про підписантів.

2. Параметри

Таблиця 1. Параметри функції

Аргумент

Опис

data

Дані, що включають підпис у форматі Base64.

container

Тип контейнера підпису.

3. Що повертає

Ця функція повертає об’єкт типу SignatureInfoDto, що містить інформацію про підписантів.

Таблиця 2. SignatureInfoDto

Поле

Опис

allSignInfo

Список всіх деталей підпису.

signInfo

Деталі останнього підпису.

4. Алгоритм роботи

Функція працює за таким алгоритмом:

  1. Приймає дані, що включають підпис у форматі Base64, та тип контейнера підпису.

  2. Виконує запит до сервісу цифрового підпису для отримання деталей підпису.

  3. Повертає об’єкт типу SignatureInfoDto, що містить список всіх деталей підпису та деталі останнього підпису.

5. Методи взаємодії

Функція надає наступні методи:

Метод

Опис

getAllSignInfo()

Повертає список всіх деталей підпису.

getSignInfo()

Повертає деталі останнього підпису.

6. Приклади використання

Цей розділ демонструє приклади використання JUEL-функції у Groovy-скриптах бізнес-процесу.

Змоделюйте Script Task та використайте скрипт, що збиратиме інформацію про підписантів отриманих файлів та виконуватиме перевірку на збіги персональних даних. Використайте у скрипті JUEL-функцію signature_details().

bp sign validate 5
Скрипт отримання деталей цифрового підпису
var asicSignInfo = signature_details(animalResponse.prop('photos').value(),
                        validationAsicResult.container).getSignInfo()
var cadesSignInfo = signature_details(animalResponse.prop('mainPhoto').value(),
                        validationCadesResult.container).getSignInfo()

var isEqualFullName = asicSignInfo.getSubjFullName()
                                .equalsIgnoreCase(cadesSignInfo.getSubjFullName())

def signerPayload = S([:], 'application/json')
signerPayload.prop('fullName', cadesSignInfo.getSubjFullName())
signerPayload.prop('drfo', cadesSignInfo.getSubjDRFOCode())
signerPayload.prop('edrpou', cadesSignInfo.getSubjEDRPOUCode())

set_transient_variable('isEqualFullName', isEqualFullName)
set_transient_variable('signerPayload', signerPayload)
set_variable('validationCadesRes', validationCadesResult)
set_variable('validationAsicRes', validationAsicResult)

Поданий скрипт спрямований на роботу з деталями цифрового підпису і робить наступне:

  • Отримує деталі цифрових підписів для фотографій тварини.

  • Порівнює повні імена осіб, які підписали обидва документи.

  • Формує JSON-об’єкт з деталями підпису.

  • Зберігає отримані дані в змінних для подальшого використання.

Функція signature_details(…​) приймає два аргументи: контент, що підписується, та контейнер підпису. Вона повертає деталі про підпис (як про особу, яка підписала, так і технічні деталі підпису).

Розглянемо скрипт докладно:

  1. Використання функції signature_details(…​):

    • asicSignInfo:

      var asicSignInfo = signature_details(animalResponse.prop('photos').value(),
                              validationAsicResult.container).getSignInfo()

      Функція signature_details(…​) приймає два аргументи: контент для підпису (у цьому випадку — це фотографії тварини) та контейнер підпису. Ця функція повертає деталі про цифровий підпис ASIC. Після цього за допомогою методу .getSignInfo() ми отримуємо інформацію про підпис.

    • cadesSignInfo:

      var cadesSignInfo = signature_details(animalResponse.prop('mainPhoto').value(),
                              validationCadesResult.container).getSignInfo()

      Аналогічно попередньому пункту, але тут ми працюємо з основною фотографією тварини та контейнером підпису CADES.

    Функція signature_details(…​) приймає лише контейнери ASIC та CAdES.
  2. Порівняння імен у підписах:

    var isEqualFullName = asicSignInfo.getSubjFullName()
                        .equalsIgnoreCase(cadesSignInfo.getSubjFullName())

    Скрипт порівнює повні імена суб’єктів (людей, які підписали документи) в обох підписах (ASIC та CADES) і перевіряє, чи вони збігаються. Результат порівняння зберігається у змінній isEqualFullName.

  3. Формування JSON-об’єкта з деталями підпису:

    def signerPayload = S([:], 'application/json')
    signerPayload.prop('fullName', cadesSignInfo.getSubjFullName())
    signerPayload.prop('drfo', cadesSignInfo.getSubjDRFOCode())
    signerPayload.prop('edrpou', cadesSignInfo.getSubjEDRPOUCode())

    Тут ми створюємо порожній JSON-об’єкт (signerPayload) та наповнюємо його даними з підпису CADES: повне ім’я, код DRFO та код EDRPOU.

  4. Збереження змінних:

    set_transient_variable('isEqualFullName', isEqualFullName)
    set_transient_variable('signerPayload', signerPayload)
    set_variable('validationCadesRes', validationCadesResult)
    set_variable('validationAsicRes', validationAsicResult)

    Результати обробки зберігаються у змінних, які будуть доступні для подальшого використання в бізнес-процесі.

Детальніше з використанням функції у бізнес-процесі ви можете ознайомитися на сторінці Перевірка підписаних даних, отриманих зі сторонньої системи: валідація КЕП та ідентифікація підписантів у файлах ASICS/CADES.