import "asn1"
ITU-T勧告X.690で定義されている、DERエンコードされたASN.1データ構造の解析を実装しています。
こちらも参照ください。
“A Layman’s Guide to a Subset of ASN.1, BER, and DER,” http://luca.ntop.org/Teaching/Appunti/asn1.html
パッケージファイル
asn1.go common.go marshal.go
Marshal関数
func Marshal(out io.Writer, val interface{}) os.Error
MarshalはASN.1構造をシリアライズし結果を書き出します。エラーが発生したときは出力は行われません。
Unmarshal関数
func Unmarshal(val interface{}, b []byte) (rest []byte, err os.Error)
UnmarshalはパラメータbのDERエンコードされたASN.1データ構造を解析し、val内の任意の型にreflectパッケージを利用してセットします。reflectパッケージを使用しているため変換先が構造体のときはフィールド名が大文字である必要があります。
ASN.1 INTEGER はint型またはint64型に変換できます。ASN.1の値がGoの型と一致しなければ解析エラーを返します。
ASN.1 BIT STRINGはBitString型に変換できます。
ASN.1 OCTET STRINGは[]byte型に変換できます。
ASN.1 OBJECT IDENTIFIERはObjectIdentifier型に変換できます。
ASN.1 PrintableString またはIA5Stringはstring型に変換できます。
上に挙げたすべてのASN.1の型は、valで指定した値と型が適応すれば変換が行われます。整数なら型はint64です。
ASN.1 SEQUENCE OF xまたはSET OF xはxがスライスの要素の型と一致するならスライス型に変換できます。
ASN.1 SEQUENCE またはSETはシーケンスの各要素が構造体の要素に変換できるなら、構造体に変換できます。
下に記述する構造体フィールドのタグは、Unmarshalにとって特別な意味を持ちます。
optional ASN.1 OPTIONALとしてマークします。 [explicit] tag:x ASN.1のタグ番号 default:x オプションの整数フィールドにデフォルト値をセットします。
これ以外のASN.1の型はサポートしていません。サポートしていない型が現れるとparse errorを返します。
BitString型
BitStringはASN.1 BIT STRINGを扱う構造体です。
ビット列のパッドは除去され、ビット長は保持されます。
type BitString struct {
Bytes []byte; // bits packed into bytes.
BitLength int; // length in bits.
}
(BitString) At関数
func (b BitString) At(i int) int
Atはパラメータiで指定したインデックスのビット値を返します。 インデックスがビット列の範囲を超えたときは0を返します。
(BitString) RightAlign関数
func (b BitString) RightAlign() []byte
RightAlignはパディングビットから始まるスライスを返します。
このスライスはBitStringとメモリを共有します。
ObjectIdentifier型
ObjectIdentifierはASN.1 OBJECT IDENTIFIERを扱います。
type ObjectIdentifier []int
RawValue型
RawValueはデコードされていないASN.1 オブジェクトを扱います。
type RawValue struct {
Class, Tag int;
IsCompound bool;
Bytes []byte;
}
StructuralError型
StructuralErrorはASN.1データは正しいが、それを受け取るのに適したGo言語側の型がみつからないことを示します。
type StructuralError struct {
Msg string;
}
(StructuralError) String関数
func (e StructuralError) String() string
SyntaxError型
SyntaxErrorはASN.1データが正しくないことを示します。
type SyntaxError struct {
Msg string;
}
(SyntaxError) String関数
func (e SyntaxError) String() string
Trackback URL
Leave a comment
Comments