2012年9月17日月曜日

データ型 - 順序列型

順序列型は、0個以上に順序付けされたASN.1データ型の集まりを表現するデータ型です。順序列型は、構成要素の定義の並び順に符号化をするため、並び順が重要な意味を持ちます。構成要素の並び順に意味を持たせない場合は、集合型を使用します。

 型の記法
  順序列型 ::= SEQUENCE{要素型リスト}
  要素型リスト ::= 要素型 | 要素型リスト , 要素型
  要素型 ::= 名前付き型 | 名前付き型 OPTIONAL | 名前付き型 DEFAULT 値 | COMPONENT OF 型
  名前付き型 ::= 識別子 型 | 型 | 参照選択型

型の例

Validity ::= SEQUENCE {
       notBefore     Time,
       notAfter       Time }

上記の例は、構成要素のデータ型がすべて同じ Time型で表現される期間を表わす順序列型です。

順序列型は各要素型を指定するときにその要素を省略してもいい場合、OPTIONAL キーワードを使用して表現します。
下記は、OPTIONALキーワードを使用した順序列型の例です。
PKIStatusInfo ::= SEQUENCE {
    status          PKIStatus,
    statusString  PKIFreeText    OPTIONAL,
    failInfo          PKIFailureInfo  OPTIONAL }

http://www.ietf.org/rfc/rfc2510.txt

要素が省略された場合に、その要素のデフォルト値を指定したい場合、DEFAULT キーワードを使用して表現します。
下記は、DEFAULTキーワードを使用した順序列型の例です。
TimeStampReq ::= SEQUENCE  {

   version                  INTEGER                       { v1(1) },
   messageImprint       MessageImprint,
   reqPolicy               TSAPolicyId                   OPTIONAL,
   nonce                    INTEGER                      OPTIONAL,
   certReq                 BOOLEAN                     DEFAULT FALSE,
   extensions              [0] IMPLICIT Extensions  OPTIONAL  }
http://www.ietf.org/rfc/rfc3161.txt

要素 certReqが省略された場合、その値は、FALSEと解釈します。

値の記法
 順序列値 ::= { 要素値リスト } {}
 要素値リスト ::= 名前付き値 | 要素値リスト , 名前付き値
 名前付き値 ::= 識別子 値 | 値