ASN.1翻译库。
asn1ate的Python项目详细描述
ASN1ate–ASN.1翻译库。 2013-2017施耐德电气建筑有限公司版权所有
简介
asn1ate是一个用于将ASN.1转换为其他形式的Python库。 它用于从正式的ASN.1定义生成代码,以及 包含pyasn1的代码生成器。
asn1ate是根据3子句bsd许可证发布的。有关详细信息,请参见 license.txt文件。
警告
这是一个非常高质量的原型。需要做的事情:
- 回归测试套件
- 需要修复hack/todo/bug
- ASN.1语法在某些地方很不完整。已知问题:
- 约束语法目前仅限于简单的值范围约束(ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12.asn,第53行)
- 完全不接受引用语法(ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-12/pkcs-12.asn,第74行)
- 改进分析器错误处理/报告
- 允许进行语义分析,例如有效性检查、有问题的警告 结构等
用法
asn1ate的直接用途是从 ASN.1定义。执行此操作的命令是:
$ python .../asn1ate/pyasn1gen.py source.asn1
它将把pyasn1等价于source.asn1的pyasn1打印到stdout。
但是asn1ate也可以用作库,以允许重用 用于自定义代码生成的ASN.1解析器。
警告2
我对ASN.1语法和语义的理解是有限的。当我学习和 更多信息,设计将更改。我会优先考虑一个更好的模型 在可预见的未来API稳定之前。
因此,如果使用asn1ate作为自定义代码生成器的库,请注意 每一次发布都可能会为你破坏一些东西。
当然,in-treepyasn1代码生成器将保持最新,并且 可以作为不同代码生成任务的示例,
依赖关系
唯一的第三方依赖项是pyparsing。
虽然asn1ate最初是在python 3.2上开发的,但它已经过测试 使用Python2.7,应该可以轻松地移植到较旧的Python版本。最新发布 测试时间:
- python 3.6.3
- Python2.7.14
设计说明
asn1ate包的设计思路与使用 驱动程序、解析器、语义模型和代码生成器的约定。
- parser.py–每x.680一个asn.1的标记化解析器。目前 识别x.680的天真子集
- sema.py–语义ASN.1对象模型,可以从 由parser.py 生成的ast
- support/pygen.py–用于生成python代码的支持库。
- pyasn1gen.py–将语义模型转换为 pyasn1语法。这可以用作脚本,在这种情况下它将转储 输出到标准输出。
ASN.1解析器是非常特别的,我一直在尝试语法,直到 找到了接受我们专有的ASN.1定义的东西。它基于 pyparsing但设置解析操作以生成带注释的ast。的每个节点 兴趣用表示其类型的字符串进行注释,例如Identifier, TypeAssignment等。我尝试使用x.680中命名的令牌类型, 但添加自定义的或抑制其他的,如有必要在 有用的形状。
带注释的标记由包含类型名和 子项列表(称为elements),可以是带注释的标记、列表或 简单的价值观。这提供了一个非常容易发现的树结构,但是 或许我们可以使用更清晰的ast表示。欢迎使用补丁程序。
asn1ate.sema是表示ASN.1构造的对象模型。它 描述从类型分配到默认值和标记的所有内容,但仍然 只有ASN.1的部分我们碰巧用在这里。大部分逻辑都围绕着 将asn1ate.parser生成的ast转换为更具语义的模型 威斯康辛州正确的python对象。
codegen被设计成可扩展的。我们家有一套代码生成器 基于asn.1源构建整个协议栈,但仅限于asn1ate。 包括通常有用的asn1ate.pyasn1gen。
asn1ate.support中最著名的成员可能是 PythonWriter和PythonFragment类,它们简化了 正确缩进的python代码。