4. Data Conversion Primitives (データ変換プリミティブ)
本文書で定義されているスキームでは、2つのデータ変換プリミティブ (Data Conversion Primitives) が使用されます:
- I2OSP - 整数からオクテット文字列へのプリミティブ (Integer-to-Octet-String Primitive)
- OS2IP - オクテット文字列から整数へのプリミティブ (Octet-String-to-Integer Primitive)
本文書の目的上、およびASN.1構文と一致して、オクテット文字列 (Octet String) はオクテット(8ビットバイト)の順序付きシーケンスです。このシーケンスは、最初(慣例により、最も左)から最後(最も右)まで索引付けされます。整数との変換のため、以下の変換プリミティブでは、最初のオクテットが最上位として扱われます。
4.1. I2OSP
I2OSPは、非負整数を指定された長さのオクテット文字列に変換します。
I2OSP (x, xLen)
入力 (Input)
x 変換する非負整数
xLen 結果のオクテット文字列の意図された長さ
出力 (Output)
X 長さxLenの対応するオクテット文字列
エラー (Error)
"integer too large" (整数が大きすぎる)
ステップ (Steps)
ステップ1. x >= 256^xLenの場合、"integer too large" を出力して停止します。
ステップ2. 整数xをその一意のxLen桁の256進数表現として書きます:
x = x_(xLen-1) * 256^(xLen-1) + x_(xLen-2) * 256^(xLen-2) + ... + x_1 * 256 + x_0
ここで、0 <= x_i < 256 です(注:xが256^(xLen-1)より小さい場合、1つ以上の先行桁はゼロになります)。
ステップ3. オクテットX_iの整数値をx_(xLen-i)とします。ここで、1 <= i <= xLen です。次のオクテット文字列を出力します:
X = X_1 X_2 ... X_xLen
4.2. OS2IP
OS2IPは、オクテット文字列を非負整数に変換します。
OS2IP (X)
入力 (Input)
X 変換するオクテット文字列
出力 (Output)
x 対応する非負整数
ステップ (Steps)
ステップ1. X_1 X_2 ... X_xLenをXの最初から最後までのオクテットとし、x_(xLen-i)をオクテットX_iの整数値とします。ここで、1 <= i <= xLen です。
ステップ2. 次のように定義します:
x = x_(xLen-1) * 256^(xLen-1) + x_(xLen-2) * 256^(xLen-2) + ... + x_1 * 256 + x_0
ステップ3. xを出力します。