1 个不稳定版本
0.1.0 | 2021年2月19日 |
---|
#2219 in 编码
63KB
1K SLoC
simple-tlv
按照ISO 7816-4描述的简易-TLV的编码和解码,不进行内存分配。
遵循der
中采用的方法。
许可证
simple-tlv
许可证为Apache License, Version 2.0或MIT License,由您选择。
除非您明确说明,否则根据Apache-2.0许可证定义的任何有意提交以包含在作品中的贡献,都应如上双许可,不附加任何额外条款或条件。
lib.rs
:
simple-tlv
实现ISO 7816-4:2005中的SIMPLE-TLV序列化格式。
5.2.1 SIMPLE-TLV数据对象
每个SIMPLE-TLV数据对象应包含两个或三个连续字段:一个必需的标签字段,一个必需的长度字段和一个条件值字段。记录(见7.3.1)可以是SIMPLE-TLV数据对象。
- 标签字段由一个字节组成,表示从1到254的标签号。'00'和'FF'值对标签字段无效。如果记录是SIMPLE-TLV数据对象,则标签可以用作记录标识符。
- 长度字段由一个或三个连续字节组成。
- 如果第一个字节未设置为'FF',则长度字段由一个字节组成,表示从0到254的数字,表示为N。
- 如果第一个字节设置为'FF',则长度字段继续在随后的两个字节中,任何值编码的数字从0到65,535,表示为N。
- 如果N为零,则没有值字段,即数据对象为空。否则(N>0),值字段由N个连续字节组成。
致谢
这个库是RustCrypto/utils/der的一个混搭,着眼于
- 不需要对ASN.1的引用(例如,因为SIMPLE-TLV没有任何这样的引用)
- 不需要分配或memmoves(如ring, derp, x509:der)
- 在SIMPLE-TLV的字节切片值之上添加一个类型层
从der中吸取的核心思想是让Encodable需要一个encoded_length方法。通过在第一次遍历中递归调用此方法,可以避免其他方法中所需的分配。
依赖关系
~0–375KB