
Документы системы iBank
Контент документа преобразуется к байтовому представлению: контент преобразуется в строку, затем из строки формируется массив символов с представлением каждого символа в виде 2х байт. Из контента получаются все поля, исключая те, для которых стоит флаг EXCLUDED=true(поле исключено из подписи) в том же порядке, в каком они присутствуют в контенте. Также в список полей не включаются служебные поля. Записывается название поля(name), затем ставится символ '=', затем значение поля. Заканчивается описание поля символом '\n'. В процессе подписи никакие из символов в значении поля не экранируются. Если поле имеет тип 'LIST' (список), то для из поля получается список полей сущностей, хранящихся в значении и над каждым полем производится такая же операция, как и для обычного поля.
Получаются все вложения документа. Если вложение - двоичные данные, то они просто добавляются в подпись. Иначе вложение переводится в двоичное представление по алгоритму обработки контента документа.
Получается идентификатор публичного ключа и сам ключ, с помощью него инициализируется объект подписи. В него помещается байтовое представление документа, информация об аттачментах, байтовое представление временной метки.
Затем подпись проверяется алгоритмически. Если все проверки успешно завершены, документ подписывается.