过时、不常用或不推荐使用的语法在下方显示为灰色
对象标识符值
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
对象标识符值 | 意思 |
ISO 成员机构 | |
US (ANSI) | |
RSA Data Security, Inc. | |
RSA Data Security, Inc. PKCS | |
目录服务 (X.500) | |
目录服务算法 |
类型
基本类型
|
标签 [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/ *] |
其他类型
|
Tag [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] |
信息对象
在“&”之后使用大写/小写在语义上很重要。
&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 模块中指定值仅用于指示默认值,或用于约束项的范围(例如名称的最大长度)。
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” -- 一小时吃午饭
这是用于限制字符串大小的值表示法的常见用途, 特别是如果将在多个地方使用相同的值:
VisibleString (SIZE (0..upperSize) )
ItemList ::= SEQUENCE (SIZE(0..upperSize)) OF Item
PARAMETERIZATION
所有定义引用名称(类型、值、类定义、对象定义、对象集)的赋值都可以给出一个虚拟参数列表。 这里我们有两个虚拟参数 - normal-priority 和 Parameter。
SEQUENCE {
component1 INTEGER DEFAULT normal-priority,
component2 Parameter }
现在我们将消息定义为两种可能性的选择,它们仅在默认优先级和要使用的类型方面有所不同:
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 语法。 |
ECN |
编码控制符号 (ECN) 可用于 完全确定 ASN.1 值的编码。 |