Free ASN.1:2008 compliance test suite

в 6:51, , рубрики: asn.1, Сетевые технологии, метки:

Ранее я уже представлял на данном ресурсе свою статью ASN.1 простыми словами. Теперь я бы хотел представить свой новый труд — свободно распространяемый набор тестов для проверки совместимости со стандартом ASN.1:2008. А точнее даже два своих труда — как дополнение к предлагаемому набору тестов я предлагаю свой собственный ASN.1 BER кодировщик/декодировщик (в исходных текстах), который на 100% удовлетворяет требованиям предлагаемого мною набора тестов. Ниже дано более подробное описание всего комплекса.

Занимаясь долгое время работой с ASN.1 постоянно сталкиваешься с необходимостью применения программы кодирования/декодирования (специальной программы работы с ASN.1). Однако не смотря на общедоступность стандарта ASN.1 различные программы работы с ASN.1 подчас производят различные результаты. Зачастую даже известные (и платные!) программы допускают ошибки при работе со стандартными типами ASN.1, что является следствием упущений в тестировании программы или следствием неполного понимания всех аспектов стандарта ASN.1.

Для решения данной проблемы, казалось бы, достаточно одного, централизованно разработанного набора тестов для каждого из типов ASN.1. Однако разбираясь с этим вопросом я обнаружил, что в свободном доступе таких тестов нет. Вообще. По моей информации все-таки такие тесты существуют, но они либо закрытые, либо платные и тестирование по таким тестам производится только на специальных площадках в аттестованных организациях. Но что делать обычному разработчику например нового, свободно распространяемого ASN.1-компилятора? Именно для помощи всем желающим создавать что-то новое для работы с данными в стандарте ASN.1, а также для всех желающих изучить данный стандарт мною был сделан набор тестов, достаточно полно охватывающий вопросы кодирования для типов данных ASN.1.

Набор тестов решает следующие задачи:

  1. Даёт тесты для наиболее общего формата кодирования ASN.1 — BER;
  2. Выполнение требований к кодированию каждого из типов, а также каждого из подблоков каждого типа;
  3. Даёт полный набор нестандартных ситуаций при кодировании каждого из типов;
  4. Даёт полный набор ошибочного кодирования для каждого из типов;
  5. Даёт рекомендательное описание поведения программы обработки ASN.1 для каждого из предлагаемых тестов;
  6. Даёт возможность участия любого заинтересованного лица в добавлении новых тестовых случаев, а также предоставляет отправную точку для создания собственных наборов тестов;

Собственно сами тесты представляют из себя бинарные файлы с закодированными данными в формате ASN.1 BER. Все тесты являются допустимыми вариантами кодирования, то есть все они так или иначе могут быть рано или поздно встречены в реальное работе программы обработки ASN.1 данных. Полный архив со всеми тестами (файлы «tc*.ber»), файлами формата CompliXML (см. ниже) полученными на основе тестов (файлы «transformed_tc*.xml»), повторно закодированными файлами (файлы «encoded_tc*.ber»), а также с кратким описанием всех тестов (файл «free_asn1_testsuite.pdf») можно получить по прямой ссылке.

Для облегчения работы с предлагаемым набором тестов предлагается также сводное текстовое краткое описание каждого тестового случая, вместе с тестируемым типом данных, а также кратким описанием предлагаемых действий программы обработки ASN.1 данных.

Первично при составлении вышеупомянутых тестов я использовал только свой личный опыт и собственно стандарт кодирования ASN.1. Однако по мере составления полного списка тестовых случаев все чаще возникал вопрос — как же надо правильно реагировать программе обработки ASN.1 в каждом конкретном случае и вообще возможно ли как-то нормально обработать каждую исключительную ситуацию? Для нахождения ответа на данные вопросы мне пришлось создать свою программу, позволяющую как декодировать ASN.1 BER, так и кодировать такие же ASN.1 BER данные. Все исходные коды этой программы я распространяю совершенно бесплатно и каждый волен использовать эти коды как ему угодно (почти — программа выпущена под BSD license). Программа служит исключительно для тестовых и ознакомительных целей. Ниже приведено более подробное описание моего программного продукта.

Программа называется COMPLI (fully-compliant ASN.1 BER decoder/encoder).

Сначала об ограничениях программы:

  1. Программа написана под Windows;
  2. Для работы программы требуется установленный MSXML 6;
  3. Программа предназначена исключительно для ознакомления с принципами кодирования/декодирования типов данных ASN.1, а также для предоставления образца реакции на возникающие нестандартные ситуации, возникающие в процессе кодирования/декодирования;
  4. В программе отсутствует оптимизация исходного кода, что позволяет легче понимать процессы внутренней деятельности программы;

Теперь более подробно об особенностях программы:

  1. Представляет из себя кодер/декодер для наиболее общего формата кодирования ASN.1 — BER (то есть форматы DER и CER программа обрабатывает также);
  2. Также программный продукт позволяет работать с бинарными данными, дополнительно закодированными в BASE64-формате, а также с внутренним XML форматом описания ASN.1 типов (см. ниже);
  3. Кодирование и декодирование реализовано для всех типов из последнего стандарта ASN.1:2008;
  4. Кодирование и декодирование для каждого из типов на 100% удовлетворяет предлагаемым ранее тестовым случаям для тестирования совместимости со стандартом ASN.1;
  5. Программа поставляется в исходных кодах, под лицензией, позволяющей использовать их даже в коммерческих разработках;
  6. Код программы написан на С++ с применением объектной модели программирования;
  7. Код проверен на отсутствие ошибок и утечек памяти;
  8. Код произвольно расширяем, позволяя добавлять работу с новыми форматами кодирования ASN.1;
  9. Программа имеет пакетный режим работы с файлами, позволяя за один раз обработать множество входных файлов, причем в одном пакете обработки могут быть как операции декодирования для определенного типа, так и операции кодирования. Конфигурационный файл представляется в XML, формат конфигурационного файла описан в виде XSD-схемы ( ссылка на файл XSD );
  10. Стандартный выходной формат (CompliXML) описывает декодированные типы в виде XML, что позволяет проще воспринимать результаты декодирования, а также дает возможность делать вторичные отчеты на основе декодированных данных;
  11. Стандартный выходной формат подробно описан в виде XSD-схемы ( ссылка на файл XSD );
  12. Стандартный выходной формат описывает каждый отдельный подблок внутри каждого декодированного типа. Например при декодировании OBJECT IDENTIFIER в выходном файле создается отдельный блок информации для каждого «sub-identifier», а при декодировании типа REAL — отдельные блоки информации для подблоков мантиссы, экспоненты и информационного подблок;
  13. Кроме собственно декодированных данных стандартный выходной формат позволяет описывать возникающие при декодировании предупреждения и ошибки. Причём предупреждения и ошибки могут относиться как ко всему декодированному файлу, так и к каждому из декодированных подблоков внутри каждого ASN.1 типа;
  14. Для упрощения возможностей кодирования выходной и входной форматы программы полностью идентичны. То есть декодировав сложный файл (например X.509 сертификат) и получив выходной XML файл в формате CompliXML можно этот же файл передать на вход программы и получить закодированный бинарный файл, абсолютно идентичный исходному декодированному файлу;
  15. Подобная гибкость программы позволяет даже например декодировать бинарный файл, поменять в нем тип ASN.1 данных (например с BMP STRING на PRINTABLE STRING), а затем закодировать новый бинарный файл с новыми, измененными типами данных;

В итоге после создания программы COMPLI мне удалось реализовать следующие задачи:

  1. Получить действующий свободно распространяемых ASN.1 BER кодировщик/декодировщик;
  2. Получить стенд для тестирования предлагаемых тестовых случаев кодирования всех типов ASN.1;
  3. Получить максимально детализированный и простой формат описания для каждого из типов ASN.1;
  4. Получить возможность простого кодирования с помощью XML файлов всех типов ASN.1, причем в формате BER. То есть COMPLI позволяет полностью избавится от программирования при создании произвольных бинарных ASN.1 BER файлов, предоставляя возможность работать только с текстовыми данными в формате XML;
  5. Показать возможные варианты реакций на все предлагаемые мною тестовые случаи кодирования ASN.1 типов;

Программа будет еще расти и расширяться. В настоящий момент она позволяет кодировать в/из для следующих форматов:

  1. BER (DER, CER);
  2. BER дополнительно закодированный в BASE64 (например OpenSSL сертификаты);
  3. CompliXML;
  4. В скором времени к этому списку добавится и формат XER.

Исходные тексты COMPLI
Исполняемый файл COMPLI + XSD схемы + файл конфигурации для набора тестов
Эта же статья в виде PDF

Автор: ystr

Поделиться

* - обязательные к заполнению поля