生成的ASN.1处理程序的快速DER抽象基类
arpa2.quickder的Python项目详细描述
在Python中嵌入quickder
^{1}$This description explains how Quick DER is mapped into Python. The design is made to facilitate similar structural traversals in Python as in C, albeit through a different mechanism. Much like the C headers, the structures are generated and placed into modules that are delivered along with Quick DER for Python.
一般说明
Python中quickder的实现围绕着
封装各种ASN.1对象的逻辑。构造类型,如
作为CHOICE
,SEQUENCE
和SET
有命名字段,它们映射到属性
可以通过向实例中添加.fielfname
来直接寻址。在
虽然在C中我们需要显式地遍历SEQUENCE OF
和{
ANY
类型的ASN.1对象保持原样,并作为
(二进制)Python字符串,包含头和内容。你可以用
它以任何你喜欢的方式,但是如果你知道类,你可以实例化
就好像你是通过协议接收数据的。在
通过设置正确的内部
变量在ASN1Object
的子类或实例中,但这不是
胆小的人;在当前的形势下,有很多方法可以使程序崩溃
系统。生成的include文件不会出现相同的风险。所以,
为自定义结构创建处理程序的最佳方法是映射
通过asn2quickder
编译器自定义ASN.1规范。在
构建DER是一个逆向过程,它可以遵循相同的过程。在
使用生成的类
快速订购的软件包是 给定这样一个实例,可以按预期操作其中的条目。它
应该注意, 任何 如果您想知道为什么包 Kerberos完全是用ASN.1定义的,因此它可以作为一个好的
例子。而不是难以操纵的二进制传输格式
甚至是阅读部分,我们可以把它变成一个Python对象,工作
并在需要时生成二进制传输格式。在 标签:quick_der
。它提供了一个功能
^{cda}必须是der_unpack()
的每个输出中的数据是共享的,
意思是你可以遍历到解析结构中的对象,
更改它,然后重新打包整个结构,以找到所做的更改
在嵌入的对象中。如果这不是您需要的,您应该clone()
各自的对象。在ASN1Object
都可以通过其_der_pack()
转换为DER字节
方法(不是ASN.1名称)或包der_pack()
函数。这个
使用存储在对象中的信息来查找打包的格式。
一般来说,在Python下使用quickder意味着您使用的是类,
不是像C中那样的包装器描述。它标记了
语言。在quick_der
显式地提到
在der_pack()
和der_unpack()
函数中再次排序:我们可以看到方法
用BER、XER和JER的编码来扩展这种方法
编码、PER、CER等。这可以通过多重继承来实现
在这些对象中,可能包含一个未来可能的Quick XER模块,
等等。工厂可以为您的平台适当地执行此操作。有一天,
谁知道呢!在示例代码
asn2quickder
编译器为许多规范生成Python包,
准备作为模块加载。例如,定义了Kerberos票证
在rfc4120中使用Ticket
,因此可以通过
quickder.rfc.rfc4120.Ticket
并像自定义类那样使用
实现Kerberos票证:from quickder.rfc.rfc4120 import Ticket
def show_ticket (der):
"""Access individual parts of the Ticket, and print them.
Then compose the owner's name from its constituent parts.
"""
tkt = Ticket (der)
print 'Ticket for Realm', tkt.realm
print ' has name-type', tkt.sname.name_type
for nm in tkt.sname.name_string:
print ' has name-string component', nm
owner = '/'.join (tkt.sname.name_string) + '@' + tkt.realm
print 'In short, it is for', owner
def rebase_ticket (der, newrealm):
"""This violates RFC 4120, but is still a nice demo of modifying
DER data in Python. The violation is caused by the mismatch
of the realm with the encrypted copy in tkt.enc_part
"""
tkt = Ticket (der)
tkt.realm = newrealm
return tkt._der_pack ()
推荐PyPI第三方库