2015-07-22 78 views
0

我发现在pyasn1中添加显式标签项的最佳方式是...明确标记它们。但是,这看起来过于冗长:在pyasn1中添加标签项的简单方法

cert['tbsCertificate']['extensions'] = rfc2459.Extensions().subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 3)) 

有什么办法来产生一个空值将适用于像extensions的地方没有指定的标签?

回答

1

有更简单的方法。惯例是,如果将None分配给复杂[py] ASN.1类型的组件,则该组件将被实例化,但不会有任何值。

>>> cert = rfc2459.Certificate() 
>>> print cert.prettyPrint() 
Certificate: 
>>> cert['tbsCertificate'] = None 
>>> print cert.prettyPrint() 
Certificate: 
tbsCertificate=TBSCertificate: 
>>> cert['tbsCertificate']['extensions'] = None 
>>> print cert.prettyPrint() 
Certificate: 
tbsCertificate=TBSCertificate: 
    extensions=Extensions: 
>>> cert['tbsCertificate']['extensions'][0] = None 
>>> print cert.prettyPrint() 
Certificate: 
tbsCertificate=TBSCertificate: 
    extensions=Extensions: 
    Extension: 
>>> cert['tbsCertificate']['extensions'][0]['extnID'] = '1.3.5.4.3.2' 
>>> cert['tbsCertificate']['extensions'][0]['extnValue'] = '\x00\x00' 
>>> print cert.prettyPrint() 
Certificate: 
tbsCertificate=TBSCertificate: 
    extensions=Extensions: 
    Extension: 
    extnID=1.3.5.4.3.2 
    extnValue=0x0000 
>>> 

这实际上让您建立从复合pyasn1对象或者Python中内置或其他步骤pyasn1对象,而无需重复其类型规范。

相关问题