用于Objective-C的BER-TLV开源库

时间:2012-11-21 07:03:23

标签: objective-c smartcard tlv

我打算从智能卡响应中解析BER-TLV格式来解释数据。

它与JACCAL类似,但在Objective-C或C ++中

任何人都可以参考任何开源项目或任何参考来做这个吗?

2 个答案:

答案 0 :(得分:4)

这是一个解码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获取

    • 数据类,通常是通用的(标准中的预定义类型,如“布尔”,“序列”......)         和特定于上下文(区分不同字段的相同类型)。
    • 原语(如布尔和整数)或构造(通常是序列)。 因为构造类型可以包含原始类型或构造类型。 也许需要递归解码。
    • 标签号,确定数据类型(布尔?整数?位串?)
  • 长度:

    • 确定要解码的内容的长度(可能需要递归解码)。
    • 长度有两种形式(短和长)。你最好支持两者。
  • 值:以当前TLV级别读取的实际值。      如果这是构造的数据(如序列),则值将包含TLV的内部级别。

在标准的最后(http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf)有一个图像显示多级TLV,也许可以更好的帮助你了解BER。

阅读标准后,最好的方法是: 1)找一些GUI查看器来查看一些BER证书文件,以便熟悉它。谷歌“ASN.1查看器”找到。 2)开始查看代码https://github.com/chrisridd/asn1-dump/blob/master/berd.m

答案 1 :(得分:0)

怎么样? http://tlve.sourceforge.net/

Apple的Tokend似乎也很有用:http://www.opensource.apple.com/source/Tokend/Tokend-36720/PIV/TLV.cpp

来自sourceforge的jayacard是另一个处理这个问题的项目,现在似乎已经放弃了,但是来源就在这里:http://www.codeforge.com/read/7149/tlv.c__html