Компиляция сложной (со многими ссылками) схемы ASN — Формат запроса сертификата (RFC4211)

Что я хочу сделать, так это иметь свою собственную процедуру (предпочтительно CPP), которая может создавать сообщение запроса сертификата, как в RFC4211.

Я понимаю, что способ сделать это, прежде всего, получить описание модуля ASN, а затем скомпилировать его, чтобы получить код, который я могу использовать для создания объекта нужного мне типа (в данном случае CertReqMessage). Затем я могу закодировать это, используя BER или XER или что-то еще...

Поэтому я сначала настроил сбор всех необходимых модулей ASN, и список содержит много RFCS — RFC4211, RFC5280, RFC5652, RFC5755 и, возможно, еще один, который мне сейчас не хватает. Я извлек их из RFC, а затем попытался скомпилировать, но не могу скомпилировать все файлы (я использую этот компилятор http://lionet.info/asn1c/compiler.html). RFC «самого низкого уровня» (которые не импортируются из других) работают, но когда я добавляю другие RFC в список компиляции, в какой-то момент (обычно при добавлении последнего) я получаю сообщение, что один или два внешних модули не найдены, хотя они находятся в списке аргументов как файлы для компиляции. Я также получаю сообщения о конфликте выражений между модулями ASN...

Я попытался поместить все модули в один файл и использовал этот компилятор: http://asn1-playground.oss.com/ и, похоже, он работал (с некоторыми предупреждениями), но я не могу получить код, используя этот онлайн-код.

Я не уверен, что не так - проблема с этим компилятором asn1c (v0.9.27) или есть какие-то шаги, которые я должен сделать, но я не сделал? Должен ли я вручную исправлять все эти коллизии самостоятельно и с импортом или как?

Или есть какой-то лучший компилятор, который я могу использовать?

Спасибо за любую помощь!


person octav    schedule 15.08.2015    source источник


Ответы (2)


Список инструментов ASN.1 доступен по адресу http://www.itu.int/en/ITU-T/asn1/Pages/Tools.aspx. Если вы ищете открытый исходный код, вы можете рассмотреть компилятор Objective Systems с библиотекой ooberrt (см. http://www.obj-sys.com/products/opensource/index.php) в качестве альтернативы lionet.

person user5106095    schedule 16.08.2015

Если кому интересно или у кого такая же проблема -

Я нашел «решение», используя BouncyCastle API (1.49-1.52) в java. Библиотека включает в себя конкретные реализации контейнера CMS и CRMF и т. д., которые мне были нужны, и я смог найти некоторые (хотя и не очень подробные) примеры приложений, из которых я мог построить нужные мне сообщения.

Если вам это нужно в C#, имейте в виду, что реализация C# bouncycastle не поддерживается так же хорошо, как java, и есть разница в API. Есть несколько инструментов, которые позволяют вам «переносить» библиотеку с java на C#, чтобы у вас была последняя актуальная версия.

Я до сих пор не смог полностью скомпилировать всю схему самостоятельно, хотя... просто нашел способ обойти это.

Может быть, ответ может помочь кому-то еще в этом нуждается.

person octav    schedule 05.11.2015