2013年2月16日土曜日

基本符号化規則(BER)

概要

ASN.1の構文は、符号化規則によって、オクテット列(バイト列)に変換します。基本符号化規則は,TLV符号化と呼ばれる技術を利用しています。TLV符号化はデータを情報タイプ(Type)、長さ(Length)、および値(Value)で構成します。ASN.1のデータ型は、基本符号化規則により、次の3つのフィールドに符号化されます。



定形式と不定形式

概要で示した形で符号化する形式を定形式と呼びます。基本符号化規則ではこの定形式のほかに、不定形式と呼ばれる符号化形式を提供しています。



ビットの並び

基本符号化規則は、ASN.1のデータ型を8ビットのオクテット単位に符号化します。オクテットの並びは、最上位オクテットから最下位オクテットへ左から順に第一オクテット、第二オクテット、・・・第nオクテットと並べます。 オクテット内のビットの並びは、最上位ビットをMSBと呼び、最下位ビットをLSBと呼びます。ビットは、最上位ビットから最下位ビットへ向かう順序で並べます。

2013年2月7日木曜日

データ型 - 部分型 - 内部部分型化

内部部分型化は、構造型の親の型を詳細化します。構成要素の中で、どの要素が存在し、存在する場合にとりうる値は何かを規定します。

型の記法

  内部部分型化 ::= WITH COMPONENTS 単一型制限 | WITH COMPONENTS 複数型制限
  単一型制限 ::= 部分型仕様
  複数型制限 ::= { 型制限 } | { ... , 型制限 }

  型制限 ::= 名前付き制限リスト
  名前付き制限リスト ::= 名前つき制限 | 名前つき制限 , 名前付き制限リスト
  名前付き制限 ::= 識別子 制限 | 識別子
  制限 ::= 値制限 存在制限
  値制限 ::= 部分型仕様 | empty
  存在制限 ::= PRESENT | ABSENT | empty
  PRESENT : 対応する要素値が存在
  ABSENT   : 対応する要素値が存在しない
  empty   : { 型制限 }の場合、PRESENTと同じ意味
               { ... , 型制限 }の場合、特別な制限はない

型の記法の例

  Envelope ::= SET {
  typeA TypeA,
  typeB TypeB OPTIONAL,
  typeC TypeC OPTIONAL
  }
  ABEnvelope ::= Envelope ( WITH COMPONENTS {
  ... ,
  typeB PRESENT,
  typeC ABSENT })
  ACEnvelope ::= Envelope ( WITH COMPONENTS {
  ... ,
  typeB ABSENT,
  typeC PRESENT })

  ABEnvelope ::= Envelope ( WITH COMPONENTS { typeA, typeB } )
  ACEnvelope ::= Envelope ( WITH COMPONENTS { typeA, typeC } )


データ型 - 部分型 - サイズ制限

サイズ制限は、値のとりうる長さを制限します。

部分型仕様で、許容する長さを整数で指定します。長さの単位は、対象とするデータ型により変化します。
単一順序列型、単一集合型などの配列をモデル化したデータ型の場合は、その配列のとりうる範囲を構成要素の数の最小値と最大値で示します。


型の記法
  サイズ制限 ::= SIZE 部分型仕様

型の記法の例
  PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
RFC2510

  ExtensionAttributes ::= SET SIZE (1..ub-extension-attributes) OF ExtensionAttribute
OrganizationName ::= PrintableString (SIZE (1..ub-organization-name-length))
PKIX1Explicit88

2013年2月5日火曜日

データ型 - 部分型 - 許容アルファベット

許容アルファベットは、使用できるアルファベットを制限します。

型の記法
  許容アルファベット ::= FROM 部分型仕様

型の記法の例
  DigitString ::= PrintableString ( FROM ( “1”| “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9” | “0” ))

データ型 - 部分型 - 値域

値域は、とりうる値の最小値および最大値を制限します。

型の記法
  値域   ::= 下端点 .. 上端点
  下端点 ::= 下端値 | 下端値 <
  上端点 ::= 上端値 | < 上端値
  下端値 ::= 値 | MIN
  上端値 ::= 値 | MAX

型の記法の例
IntegerType ::= INTEGER
0未満の整数
NegativeNumber ::= IntegerType ( MIN .. < 0 )

0以下の整数
NonPositiveNumber ::= IntegerType ( MIN .. 0 )

0より大きい整数
PositiveNumber ::= IntegerType ( 0 < .. MAX )

0以上の整数
NonNegativeNumber ::= IntegerType ( 0 .. MAX )

2013年2月2日土曜日

データ型 - 部分型 - 包含部分型

包含部分型は、既存の部分型を組み合わせて、新たな部分型を定義します。

型の記法
  包含部分型 ::= INCLUDES 部分型


型の記法の例
  ProtoType ::= ENAMURATED {
    first-class(0), buisiness-class(1), coach-class(2), economy-class(3)
  }
  SubType ::= ProtoType ( coach-class | economy-class )
  OtherType ::= ProtoType ( INCLUDES SubType | business-class )

データ型 - 部分型 - 単一値

単一値は、親の型のとりうる値から部分型で許容する値を制限します。許容する値を直接指定します。

型の記法
  単一値 ::=

型の記法の例
  ESSVersion ::= INTEGER { v1(1) }
AllOrFirstTier ::= INTEGER { allReceipts (0), firstTierRecipients (1) }
rfc2634