Free ASN.1:2008 compliance test suite

    Ранее я уже представлял на данном ресурсе свою статью 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 данных. Все тесты являются допустимыми вариантами кодирования, то есть все они так или иначе могут быть рано или поздно встречены в реальной работе программы обработки 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 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.

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

    Похожие публикации

    Комментарии 7
      0
      Каким образом можно использовать ваш набор тестов для проверки другого энкодера/декодера?
        0
        Ответил ниже в комментарии.
        0
        Предлагаемый набор тестов состоит из бинарных файлов (tc*.ber), представляющие из себя закодированные ASN.1 BER данные. Эти бинарные файлы передать проверяемому программному продукту. Например для проверки «декстопных» версий декодировщиков ASN.1 от OSS Nokalva или Objective Systems достаточно открыть эти файлы в программе декодирования.

        Затем реакция декодера сопоставляется с ожидаемой реакцией (описана в файле «free_asn1_testsuite.pdf»). Если реакция не совпадает, то значит в проверяемом продукте имеются проблемы.
          0
          Т.е. для автоматизации тестирования необходимо написание модуля для конверсии результатов в ваш (или из вашего) XML-формата с последующим сранением результатов кодирования/декодирования? Кстати, почему вы отказались от XER в пользу собственного XML-формата?
            0
            Нет.

            Мой XML формат специфичен только для моей программы и приведен совместно с этим «complicance suite» только для показа варианта правильное реакции на декодирование тестовых BER файлов (tc*.ber). То есть первичны только бинарные файлы, мой XML формат служит только для описания возможной реакции. Если же говорить о проверке кодирования, то можно предложить вариант — с помощью тестируемого программного продукта декодировать тестовые бинарные файлы, сохранить полученный результат в любом формате, а потом закодировать этот вторичный результат повторно.

            Насчет «отказался от XER» — этот формат тоже будет поддержан в моей программе. Насчет «почему отказался» — стандартный XER не содержит столь много детальной информации о каждом подблоке ASN.1, как мой формат. Кроме того в моём формате присутствует возможность генерации предупреждений и ошибок.
              0
              Кстати ещё раз обращу внимание: моя программа позволяет осуществлять двунаправленные преобразования (в/из) для всех следующих форматов:
              1) BER (DER, CER);
              2) BER дополнительно закодированный BASE64;
              3) Мой формат CompliXML;

              То есть для «конвертации в мой формат» достаточно преобразовать с помощью моей программы стандартно кодированные BER данные.
          0
          Дополнен список тестов, подкорректирован код COMPLI.
          Ссылки для скачивания остались прежними.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое