如何创建没有NamedType的ASN.1序列?

2024-06-23 02:34:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图编写客户端数字时间戳程序,却一直在创建时间戳请求(.tsr)文件

以下是.tsr文件解码后的实际格式(基于RFC3161)

Sequence:
 field-0=1
 field-1=Sequence:
  field-0=Sequence:
   field-0=2.16.840.1.101.3.4.2.3
   field-1=

  field-1=0x899ca19e19047eb08841d0ed0e8fa19b504927fafc126e5b7f100de56549ccab4d66fe92db70aa5d99e276c1c39a21cc0166e037406a0d1644dc2103181d86f6

我使用pyasn1模块复制格式并获得以下内容(在将其编码为.tsr之前)

TimeStampReq:
 version=1
 messageImprint=MessageImprint:
  hashAlgorithm=AlgorithmIdentifier:
   algorithm=2.16.840.1.101.3.4.2.3

  hashedMessage=0x899ca19e19047eb08841d0ed0e8fa19b504927fafc126e5b7f100de56549ccab4d66fe92db70aa5d99e276c1c39a21cc0166e037406a0d1644dc2103181d86f6

 nonce=5580318124348686814

这是我写的代码,它给出了后一种格式

"""
Timestamp request class
"""
from pyasn1.type import univ, namedtype, namedval, tag
from pyasn1_modules.rfc2459 import Extensions, AlgorithmIdentifier


class MessageImprint(univ.Sequence):
    """
    A message imprint as defined per IETF RFC 3161
    """
    componentType = namedtype.NamedTypes(
        namedtype.NamedType('hashAlgorithm', AlgorithmIdentifier()),
        namedtype.NamedType('hashedMessage', univ.OctetString())
    )


class TSAPolicyId(univ.ObjectIdentifier):
    pass


class TimeStampReq(univ.Sequence):
    """
    A timestamp request as defined per IETF RFC 3161
    """
    componentType = namedtype.NamedTypes(
        namedtype.NamedType('version', univ.Integer(1)),
        namedtype.NamedType('messageImprint', MessageImprint()),
        namedtype.OptionalNamedType('reqPolicy', TSAPolicyId()),
        namedtype.OptionalNamedType('nonce', univ.Integer()),
        namedtype.DefaultedNamedType('certReq', univ.Boolean(False)),

        namedtype.OptionalNamedType('extensions', Extensions().subtype(
            implicitTag=tag.Tag(tag.tagClassUniversal, tag.tagFormatSimple, 0)
        ))
    )
    tagSet = univ.Sequence.tagSet.tagImplicitly(
        tag.Tag(tag.tagClassContext, tag.tagFormatConstructed, 0))

为了创建正确格式的.tsr文件,我必须做些什么


Tags: 文件fieldtag格式时间classunivsequence