【发布时间】:2019-07-31 02:56:49
【问题描述】:
我正在尝试编写客户端数字时间戳程序并坚持创建时间戳请求 (.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 文件,我需要做什么?
【问题讨论】: