BER-TLV библиотека с открытым исходным кодом для Objective-C
Я намерен проанализировать формат BER-TLV из ответа смарт-карты, чтобы интерпретировать данные.
это похоже на JACCAL, но в Objective-C или C++
Может ли кто-нибудь дать ссылку на какой-либо проект с открытым исходным кодом или ссылку для этого?
2 ответа
Вот проект, декодирующий формат ASN.1 BER. https://github.com/chrisridd/asn1-dump/
Основная логика находится в этом файле: https://github.com/chrisridd/asn1-dump/blob/master/berd.m
И если у вас будет достаточно времени, не сложно написать собственный декодер после прочтения стандарта: http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf http: / /luca.ntop.org/Teaching/Appunti/asn1.html
Поток декодирования выглядит следующим образом: читайте в последовательности Tag, Length, Value.
Из тега вы получите
- Класс данных, как правило, универсальный (предопределенный тип в стандарте, такой как "Boolean","Sequence"...) и специфичный для контекста (чтобы различать различные поля с одинаковым типом).
- Примитивный (как логическое и целое) или Конструктивный (обычно это последовательность). потому что сконструированный тип может содержать примитивный или сконструированный тип. возможно, нужно рекурсивное декодирование.
- Номер тега, определить типы данных (логическое "целое число" bitstring ")
Длина:
- определить длину содержимого для декодирования (возможно, потребуется рекурсивное декодирование).
- Длина имеет две формы (короткая и длинная). вам лучше поддержать оба.
Значение: реальное значение для чтения в текущем уровне TLV. если это построенные данные (например, последовательность), значение будет содержать внутренний уровень TLV.
В конце стандарта (http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf) есть изображение, показывающее многоуровневый TLV, может быть, может лучше помочь вам понять BER.
После того, как вы прочитали стандарты, лучше всего: 1) найти программу просмотра GUI, чтобы посмотреть файл сертификата BER и ознакомиться с ним. Google "ASN.1 просмотра", чтобы найти. 2) начинай смотреть код https://github.com/chrisridd/asn1-dump/blob/master/berd.m
Как насчет ТЛВЭ? http://tlve.sourceforge.net/
Apple Token тоже кажется полезным: http://www.opensource.apple.com/source/Tokend/Tokend-36720/PIV/TLV.cpp
jayacard на sourceforge - еще один проект, который занимался этим, сейчас кажется заброшенным, но источник здесь: http://www.codeforge.com/read/7149/tlv.c__html