ASN.1对准确性的定义是:
Accuracy ::= SEQUENCE {
seconds INTEGER OPTIONAL,
millis [0] INTEGER (1..999) OPTIONAL,
micros [1] INTEGER (1..999) OPTIONAL }
我不清楚的是如何处理millis和micros。将SEC_ASN1_INTEGER通用标记以及0和1标记都放在SEC_ASN1Template结构的同一"kind"字段中是不可行的,因为它们都会进入该字段的同一部分(最低字节)。
注意
millis [0] INTEGER (1..999) OPTIONAL
不是INTEGER类型,而是[0]类型。
也许以下等效的类型定义可能会对您有所帮助:
Accuracy ::= SEQUENCE {
seconds AccuracySeconds OPTIONAL,
millis [0] AccuracyMilliseconds OPTIONAL,
micros [1] AccuracyMicroseconds OPTIONAL }
AccuracySeconds ::= INTEGER
AccuracyMilliseconds ::= INTEGER(1..999)
AccuracyMicroseconds ::= INTEGER(1..999)
还需要考虑您的类型定义是否使用IMPLICIT标记或EXPLICIT标记。。。编码会有所不同:
(隐含)
30 06
01 01 02
80 01 02
与(显式)
30 08
01 01 02
A0 03
02 01 02