Ранее я уже представлял свою статью на этом ресурсе.
1 простыми словами .
Сейчас публикую свою новую работу — свободно распространяемый набор тестов для проверки совместимости со стандартом ASN.1:2008. А точнее даже две мои работы — в качестве дополнения к предложенному набору тестов я предлагаю свой собственный кодер/декодер ASN.1 BER (в исходном коде), который на 100% удовлетворяет требованиям предлагаемого мной набора тестов.
Ниже представлено более подробное описание всего комплекса.
Работая долгое время с АСН.
1, вы постоянно сталкиваетесь с необходимостью использования программы кодирования/декодирования (специальной программы для работы с АСН.
1).
Однако, несмотря на общедоступность стандарта ASN.1, разные программы ASN.1 иногда дают разные результаты.
Зачастую даже известные (и платные!) программы допускают ошибки при работе со стандартными типами ASN.1, что является следствием упущений в тестировании программы или следствием неполного понимания всех аспектов стандарта ASN.1. Для решения этой проблемы, казалось бы, достаточно одного, централизованно разработанного набора тестов для каждого типа ASN.1. Однако, изучая этот вопрос, я обнаружил, что подобных тестов в открытом доступе нет. Совсем.
По моим сведениям, такие тесты еще существуют, но они либо закрытые, либо платные, а тестирование по таким тестам проводится только на специальных площадках в сертифицированных организациях.
Но что делать рядовому разработчику, например, нового, свободно распространяемого компилятора ASN.1? Именно в помощь всем, кто хочет создать что-то новое для работы с данными в стандарте ASN.1, а также всем, кто хочет изучить этот стандарт, я сделал набор тестов, достаточно полно охватывающий вопросы кодирования для ASN. .
1 типы данных.
Набор тестов решает следующие задачи:
- Дает тесты для наиболее распространенного формата кодировки ASN.1 — BER;
- Выполнение требований кодирования для каждого типа, а также каждого из подблоков каждого типа;
- Дает полный набор нестандартных ситуаций при кодировании каждого типа;
- Дает полный набор ошибочных кодировок для каждого типа;
- Предоставляет нормативное описание поведения программы обработки ASN.1 для каждого из предложенных тестов;
- Позволяет любой заинтересованной стороне участвовать в добавлении новых тестовых примеров, а также обеспечивает отправную точку для создания собственных наборов тестов;
Все тесты являются допустимыми вариантами кодирования, то есть все они, так или иначе, могут рано или поздно встретиться в реальной работе программы обработки данных ASN.1. Полный архив со всеми тестами (файлы «tc*.
ber»), файлы CompliXML (см.
ниже), полученные из тестов (файлы «transformed_tc*.
xml»), перекодированные файлы (файлы «encoded_tc*.
ber»), а также краткое описание всех тестов (файл «free_asn1_testsuite.pdf») можно получить по прямой ссылке .
Изначально при составлении приведенных выше тестов я использовал только свой личный опыт и актуальный стандарт кодирования ASN.1. Однако по мере составления полного списка тест-кейсов все чаще возникал вопрос: как должна корректно реагировать программа обработки ASN.1 в каждом конкретном случае и можно ли вообще как-то нормально обработать каждую исключительную ситуацию? Чтобы найти ответ на эти вопросы, мне пришлось создать собственную программу, позволяющую как декодировать ASN.1 BER, так и кодировать те же данные ASN.1 BER. Все исходные коды этой программы я распространяю совершенно бесплатно и каждый волен использовать эти коды по своему усмотрению (почти - программа выпущена под лицензией BSD).
Программа предназначена только для тестирования и информационных целей.
Ниже приведено более подробное описание моего программного продукта.
Программа называется COMPLI (полностью совместимый декодер/кодировщик ASN.1 BER).
Сначала об ограничениях программы:
- Программа написана для Windows;
- Для работы программы требуется установленный MSXML 6;
- Программа предназначена исключительно для ознакомления с принципами кодирования/декодирования типов данных ASN.1, а также для предоставления примера реагирования на нестандартные ситуации, возникающие в процессе кодирования/декодирования;
- В программе нет оптимизации исходного кода, что облегчает понимание внутренних процессов программы;
- Это кодер/декодер самого распространенного формата кодировки ASN.1 — BER (то есть программа также обрабатывает форматы DER и CER);
- Программный продукт также позволяет работать с двоичными данными, дополнительно закодированными в формате BASE64, а также с внутренним форматом XML для описания типов ASN.1 (см.
ниже);
- Кодирование и декодирование реализованы для всех типов из последнего стандарта ASN.1:2008;
- Кодирование и декодирование для каждого типа удовлетворяет 100% ранее предложенных тестовых случаев для проверки совместимости со стандартом ASN.1;
- Программа поставляется в исходном коде, под лицензией, позволяющей использовать ее даже в коммерческих разработках;
- Программный код написан на языке C++ с использованием объектной модели программирования;
- Код проверен на наличие ошибок и утечек памяти;
- Код произвольно расширяем, что позволяет добавлять работу с новыми форматами кодирования ASN.1;
- В программе имеется пакетный режим работы с файлами, позволяющий обрабатывать множество входных файлов одновременно, причем один пакет обработки может содержать как операции декодирования для определенного типа, так и операции кодирования.
Файл конфигурации представлен в формате XML, формат файла конфигурации описан в виде схемы XSD ( ссылка на файл XSD );
- Стандартный формат вывода (CompliXML) описывает декодированные типы в XML, что облегчает понимание результатов декодирования, а также дает возможность создавать вторичные отчеты на основе декодированных данных;
- Стандартный формат вывода подробно описан в виде XSD-диаграммы ( ссылка на файл XSD );
- Стандартный формат вывода описывает каждый отдельный субблок в каждом декодированном типе.
Например, при декодировании ИДЕНТИФИКАТОРА ОБЪЕКТА в выходном файле создается отдельный блок информации для каждого «подидентификатора», а при декодировании типа REAL создаются отдельные блоки информации для подблоков мантиссы, показателя степени и информации;
- Помимо собственно декодированных данных, стандартный формат вывода позволяет описывать предупреждения и ошибки, возникающие при декодировании.
При этом предупреждения и ошибки могут относиться как ко всему декодируемому файлу, так и к каждому из декодируемых подблоков внутри каждого типа ASN.1;
- Для упрощения возможностей кодирования форматы вывода и ввода программы полностью идентичны.
То есть, декодировав сложный файл (например, сертификат X.509) и получив на выходе XML-файл в формате CompliXML, вы можете передать этот же файл на вход программы и получить закодированный бинарный файл, абсолютно идентичный исходный декодированный файл;
- Такая гибкость программы даже позволяет, например, декодировать бинарный файл, изменить в нем тип данных ASN.1 (например, с BMP STRING на PRINTABLE STRING), а затем закодировать новый бинарный файл с новыми, измененными данными.
типы;
- Получите действительный бесплатный кодер/декодер ASN.1 BER;
- Получить стенд для тестирования предложенных тест-кейсов кодирования всех типов ASN.1;
- Получите максимально подробный и простой формат описания для каждого типа ASN.1;
- Получите возможность легко кодировать все типы файлов ASN.1 с использованием XML и формата BER. То есть COMPLI позволяет полностью избавиться от программирования при создании произвольных двоичных файлов ASN.1 BER, предоставляя возможность работать только с текстовыми данными в формате XML;
- Показать возможные реакции на все тестовые примеры, которые я предлагаю для кодирования типов ASN.1;
В настоящее время он позволяет кодировать в/из следующих форматов:
- BER (DER, CER);
- BER дополнительно закодирован в BASE64 (например, сертификаты OpenSSL);
- КомплиXML;
- Формат XER скоро будет добавлен к этому списку.
-
Мобильная Gmail Обновлена
19 Oct, 24 -
Исследовательские Инициативы Jetbrains
19 Oct, 24