top page > computer > web > rfc > x_690 > 8_1_common > coding > existential > sep_en_de.html
更新日:
文責: 重城良国

X.690: ASN.1のBER方式の共通部分の存在型を利用したコーディング

(工事中 0%)

動機

エンコードとデコードは実は、たいていにおいて、完全なペアにはならない。簡単なことをしているときにはそのズレは顕在化しないが、複雑なことをし始めると、それが牙をむく。今回、僕はその野獣に苦しめられた。そもそもエンコードとデコードとは違うものだと考える必要がある。

デコード

デコードする対象はBER方式だ。DERだろうがCERだろうがBERとして扱ってやれば良い。

エンコード

エンコードする対象はDERとCERを代表として、無限に存在する。その無限に存在するエンコード関数をひとつにまとめておいて、それらの特殊ケースとしてDERとCERのエンコード関数を表現できたら最高だが。

選択の可能性

すくなくとも以下の選択の可能性がある。

組み合わせは無限大、だ。すると以下の値を引数として取れば良いのかもしれない。

これらの引数をネストするデータ構造のすべての層で指定する必要がある。そうすれば、すべてのエンコードのしかたを表現することが可能だ。しかし「すべての層で」指定することが可能かどうかという問題がある。データ構造と同じ樹構造を持つ指定子を使ってやる必要があるだろう。若干面倒だが、これらでDERやCERを指定できるなら、それは美しいと思う。

指定子の型

data Sel = Sel (Maybe Integer, Bool) [Sel]

ここで、リストが空であった場合「以下同様」を意味するもととする。

与えられたデータがPrimitiveかConstructedかでSelを変化させる必要がある。

data Sel = Sel (DataType -> ((Maybe Integer, Bool), [Sel]))

「存在型を利用」トップへ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics