ASN.1 参考卡

 

过时、不常用或不推荐使用的语法在下方显示为灰色

对象标识符值

oid1 OBJECT IDENTIFIER ::= {iso standard 2345 modules (0) basic-types (1)}
oid2 OBJECT IDENTIFIER ::= {joint-iso-itu-t ds(5)}
oid3 OBJECT IDENTIFIER ::= { oid2 modules(0) }
oid4 OBJECT IDENTIFIER ::= { oid3 basic-types(1) }
oid5 OBJECT IDENTIFIER ::= { 2 5 0 1 } -- equals oid4

对象标识符值 意思
{ 1 2 } ISO 成员机构
{ 1 2 840 } US (ANSI)
{ 1 2 840 113549 } RSA Data Security, Inc.
{ 1 2 840 113549 1 } RSA Data Security, Inc. PKCS
{ 2 5 } 目录服务 (X.500)
{ 2 5 8 } 目录服务算法

 

类型

基本类型


BOOLEAN
INTEGER
BIT STRING
OCTET STRING
OBJECT IDENTIFIER
REAL
ENUMERATED

SEQUENCE
SEQUENCE OF
CHOICE

UTF8String
NumericString
IA5String
VisibleString

DATE
TIME-OF-DAY
DATE-TIME
DURATION





*occupies two octets

标签

dec/hex
[01/01]
[02/02]
[03/03]
[04/04]
[06/06]
[09/09]
[10/0A]

[16/10]
[16/10]
----

[12/0C]
[18/12]
[22/16]
[26/1A]

[31/ *]
[32/ *]
[33/ *]
[34/ *]

其他类型


ObjectDescriptor

EXTERNAL
EMBEDDED PDV

OID-IRI
RELATIVE-OID-IRI

SET
SET OF

UTCTime
GeneralizedTime

PrintableString
T61String
VideotexString
GraphicString
GeneralString
UniversalString
CHARACTER STRING
BMPString
ISO646String
TeletexString

Tag

dec/hex
[07/07]

[08/08]
[11/0B]

[35/ *]
[36/ *]

[17/11]
[17/11]

[23/17]
[24/18]

[19/13]
[20/14]
[21/15]
[25/19]
[27/1B]
[28/1C]
[29/1D]
[30/1E]
[26/1A]
[20/14]

 

信息对象

在“&”之后使用大写/小写在语义上很重要。

MY-SIMPLE-CLASS ::= TYPE-IDENTIFIER

MY-CLASS ::= CLASS {
  &id OBJECT IDENTIFIER UNIQUE,
  &simple-value ENUMERATED {high, low} DEFAULT low,
  &Set-of-values INTEGER OPTIONAL,
  &Any-type,
  &an-inform-object SOME-CLASS,
  &A-set-of-objects SOME-OTHER-CLASS
} WITH SYNTAX
    {   KEY           &id
      [ URGENCY &simple-value ] -- Optional
      [ VALUE-RANGE &Set-of-values ]
      PARAMETERS &Any-type
      SYNTAX  &an-inform-object
      MATCHING-RULES  &A-set-of-objects
   }

my-object MY-CLASS ::= {
    KEY { ....... }
    URGENCY high
    VALUE-RANGE { 1..10 | 20..30 }
    PARAMETERS My-type
    SYNTAX defined-syntax
    MATCHING-RULES { at-start | at-end | exact }
}

My-object-set MY-CLASS ::= {
                object1 | object2 | object3,
                ...,
                version2-object
}

Message ::= SEQUENCE {
    -- Has to be an OBJECT IDENTIFIER (KEY) from the set:
    key MY-CLASS.&id ({My-object-set}),
    -- Has to be the PARAMETERS for the object with KEY:
    parms MY-CLASS.&Any-type ( {My-object-set} {@key} )
}

变量类型值字段和值集字段不在本参考卡的范围内

 

通常在 ASN.1 模块中指定值仅用于指示默认值,或用于约束项的范围(例如名称的最大长度)。

defaultOn BOOLEAN ::= TRUE
maxAge INTEGER ::= 120
bitmask BIT STRING ::= ‘7FFF’H
defaultBytes OCTET STRING ::= ‘010F’H
placeholder NULL ::= NULL
defaultID OBJECT IDENTIFIER ::= {joint-iso-itu-t country(16) us(840)}
defaultPrice REAL ::= 9.99

Item          ::= SEQUENCE {
   id               CHOICE { -- id alternatives - code, url or color
                      code   INTEGER (0..MAX),
                      url    VisibleString,
                      color  ENUMERATED { black, blue, ... ,-- extended
                                          green, red}
   } DEFAULT code:9999,
   quantity         INTEGER {single(1), dozen(12), crate(36)},
   options          BIT STRING DEFAULT '101100011'B,
   unitPrice        REAL ( 1.00 .. 9999.00 ),
                    ... , -- 此行以下允许扩展名
   [[ isTaxable BOOLEAN DEFAULT FALSE ]], -- 在 v.2 中添加到项目
   [[ voltage INTEGER (110 | 220) OPTIONAL ]] -- 在 v.3 中添加
}
defaultItem Item ::= { -- 这是上述类型的值
   id code : 1,
   quantity single,
   options '0'B,
   unitPrice 1.99
}

ListOfNumbers ::= 整数序列
firstPrimeNumbers ListOfNumbers ::= {1, 2, 3, 5, 7, 11, 13, 17}

name1 UTF8String ::= “Joe” -- 还可以容纳国际字符
phone NumericString ::= “8885551212”
text IA5String ::= “任意文本 - 带标点符号,没问题。”
name2 VisibleString ::= “Joe” -- 不带控制字符的 US ASCII

myDay DATE ::= “2012-01-31”
noon TIME-OF-DAY ::= “12:00:00”
noonMyDay DATE-TIME ::= “2012-01-31T12:00:00”
lunchtime DURATION ::= “PT1H” -- 一小时吃午饭

这是用于限制字符串大小的值表示法的常见用途, 特别是如果将在多个地方使用相同的值:

upperSize INTEGER ::= 64
VisibleString (SIZE (0..upperSize) )
ItemList ::= SEQUENCE (SIZE(0..upperSize)) OF Item

 

PARAMETERIZATION

所有定义引用名称(类型、值、类定义、对象定义、对象集)的赋值都可以给出一个虚拟参数列表。 这里我们有两个虚拟参数 - normal-priority 和 Parameter。

Invoke-message {INTEGER:normal-priority, Parameter} ::=
SEQUENCE {
component1 INTEGER DEFAULT normal-priority,
component2 Parameter }

现在我们将消息定义为两种可能性的选择,它们仅在默认优先级和要使用的类型方面有所不同:

Messages ::= CHOICE {
   first Invoke-message { low-priority, Type1 },
   second Invoke-message { high-priority, Type2 },
   ... }

Messages ::= CHOICE { -- 这就是上面扩展的内容
   first SEQUENCE {
     component1 INTEGER DEFAULT low-priority,
     component2 Type1 },
   second SEQUENCE {
     component1 INTEGER DEFAULT high-priority,
     component2 Type2 },
   ... }

 

编码

Bit-wide

PER: 一种紧凑的二进制编码,传输识别值所需的最少信息。

Byte-wide

OER: A byte-aligned encoding designed for fast encoding/decoding

BER: 类型-长度-值 (TLV) 编码风格

DER: 只有一种编码方式的编码 给定值,用于安全工作。

CER: 另一种与安全相关的编码,很少使用。

XML

XER: 将 ASN.1 值编码为 XML 语法。

还有一些编码指令可以改变 XER 和其他编码,例如,确定序列的哪些组件将被编码为 XML 属性。

ECN

编码控制符号 (ECN) 可用于 完全确定 ASN.1 值的编码。