X.690
ISO/IEC 8825-1 JIS X 5606-1
ITU-T X.680 ASN.1 の基本書式 BER / CER / DER などを決めたもの 8. Basic Encoding Rules 基本符号化規則
Canonical Encodnig Rules 標準符号化規則
Distinguished Encoding Rules 識別符号化規則
他 シリーズ
X.691 PER Packed Encoding Rules
X.692 ECN
X.693 XER XML Encoding Rules X.696 OER
X.697 JER JavaScript Object Notation (JSON) Encoding Rules 現在では DER がよく利用されている
読みたいところだけ翻訳
6.
6.2. ビット列は87654321の順
6.3. 比較順
8. Basic encoding rules
8.1 エンコーディングの一般規則
8.1.1 1つのエンコーディングの構造
8.1.1.1 データ値のエンコードは、次の順序で現れる 4 つのコンポーネントで構成されます:
a) identifier octets (see 8.1.2);
b) length octets (see 8.1.3);
c) contents octets (see 8.1.4);
d) end-of-contents octets (see 8.1.5).
8.1.1.2 コンテンツ終了オクテットは、長さオクテットの値によって存在する必要がある場合を除き、存在してはならない(8.1.3 を参照)。
8.1.1.3 図 1 は、エンコーディング (プリミティブまたは構築) の構造を示しています。 図 2 は、別の構築されたエンコーディングを示しています。
table:図1 an encodingの構造
Identifier octets Length octets Contents octets
↑ contents octsts
のオクテット数
(8.1.3.2参照)
table: BERの構造
Identifier octets Length octets Contents octets End-of-contents octets
↑
(8.1.3.6参照)
長さが定まらない構造(constructed)の場合はLengthを未確定にしてEnd-of-contents で終わる形にすることができる (DERでは不可)
8.5 Encoding of a real value
8.5.1 実数値(real value)のエンコードはプリミティブでなければなりません。
8.5.2 実数値がプラスゼロの場合、エンコーディングには内容オクテットは存在しません。
8.5.3 実際値がマイナスゼロである場合、8.5.9 で指定されているようにエンコードされます。
8.5.4 ゼロ以外の実数値の場合、抽象値の底が 10 の場合、エンコードされた値の底は 10 になり、抽象値の底が 2 の場合、エンコードされた値の底は 送信者のオプションとして 2, 8, または 16 を選択できます。
8.5.5 実数値がゼロ以外の場合、エンコードに使用される基数は 8.5.4 で指定されているように B' になります。 B' が 2、8、または 16 の場合、8.5.7 で指定されたバイナリエンコーディングが使用されます。 B' が 10 の場合、8.5.8 で指定された文字エンコーディングが使用されます。
8.5.6 最初の内容オクテットのビット 8 は次のように設定されます:
a) bit 8 = 1, の場合 8.5.7 で指定されたバイナリ エンコーディングが適用されます。
b) ビット 8 = 0 およびビット 7 = 0 の場合、8.5.8 で指定されている 10 進エンコーディングが適用されます。
c) ビット 8 = 0 およびビット 7 = 1 の場合、「SpecialRealValue」(Rec. ITU-T X.680 | ISO/IEC 8824-1 を参照) または
値からゼロを引いた値は、8.5.9 で指定されているようにエンコードされます。
8.5.7 バイナリ エンコーディングが使用される場合 (ビット 8 = 1)、仮数 M がゼロ以外の場合、それは符号 S、正の整数値 N、およびバイナリ スケーリング ファクタ F によって表されます。
$ M = S × N × 2^F
$ 0 ≤ F < 4
$ S = +1 or -1
注 – バイナリスケール係数 F は、仮数の暗黙の小数点をこの節のエンコード規則で要求される位置に揃えるために、特定の状況下で必要となります。 この位置合わせは、指数 E の変更によって常に実現できるとは限りません。エンコードに使用される基数 B' が 8 または 16 の場合、暗黙のポイントは、コンポーネント E を変更することによって、それぞれ 3 ビットまたは 4 ビットのステップでのみ移動できます。 、暗黙の点を必要な位置に移動するには、ゼロ以外のバイナリ スケーリング係数 F の値が必要になる場合があります。
8.5.7.1 最初の内容オクテットのビット 7 は、S が –1 の場合は 1、それ以外の場合は 0 になります。
8.5.7.2 最初の内容オクテットのビット 6 ~ 5 は、ベース B' の値を次のようにエンコードします。
table:base
Bits 6 to 5 Base
00 base 2
01 base 8
10 base 16
11 この勧告 | 国際標準の今後の版のために予約されています
8.5.7.3 最初の内容オクテットのビット 4 ~ 3 は、バイナリ スケーリング ファクタ F の値を符号なし 2 進整数としてエンコードします。
8.5.7.4 最初の内容オクテットのビット 2 ~ 1 は、次のように指数の形式をエンコードします:
a) ビット 2 ~ 1 が 00 の場合、2 番目の内容オクテットは指数の値を 2 の補数の 2 進数としてエンコードします。
b) ビット 2 ~ 1 が 01 の場合、2 番目と 3 番目の内容オクテットは指数の値を 2 の補数の 2 進数としてエンコードします。
c) ビット 2 ~ 1 が 10 の場合、2 番目、3 番目、および 4 番目の内容オクテットは、指数の値を 2 の補数の 2 進数としてエンコードします。
d) ビット 2 ~ 1 が 11 の場合、2 番目の内容のオクテットは、指数の値をエンコードするために使用されるオクテットの数 (X など) をエンコードし、3 番目は (X プラス 3) 番目までをエンコードします。 (包括的な) 内容オクテットは、指数の値を 2 の補数の 2 進数としてエンコードします。 X の値は少なくとも 1 でなければなりません。 送信される指数の最初の 9 ビットは、すべて 0 またはすべて 1 であってはなりません。
8.5.7.5 残りの内容オクテットは、整数 N (8.5.7 を参照) の値を符号なし 2 進数としてエンコードします。
注 1 – 非標準 BER の場合、仮数の浮動小数点正規化は必要ありません。 これにより、実装者はメモリ内の仮数に対してシフト関数を実行することなく、仮数を含むオクテットを送信できるようになります。 Canonical Encoding Rules と Distinguished Encoding Rules では正規化が指定されており、仮数部 (0 でない場合) は最下位ビットが 1 になるまで繰り返しシフトされる必要があります。
注 2 – 実数のこの表現は、浮動小数点ハードウェアで通常使用される形式とは大きく異なりますが、そのような形式との間で簡単に変換できるように設計されています (付録 C を参照)。