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構造をシリアライズした結果を書き出します。エラーが発生したときは出力は行われません。
MarshalToMemory関数
func MarshalToMemory(val interface{}) ([]byte, os.Error)
MarshalToMemoryは、Marshalと同じ動きをしますが、結果をbyteのスライスで返します。
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 ENUMERATEDは、Enumerated型に変換できます。
ASN.1 UTCTIMEまたは、GENERALIZEDTIMEは、*time.Time型に変換できます。
ASN.1 PrintableString またはIA5Stringはstring型に変換できます。
上に挙げたすべてのASN.1の型は、interface{}に変換できます。インタフェースに格納された値は Goの型のどれかと一致します。たとえば整数のときは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 オプションの整数フィールドにデフォルト値をセットします。
構造体の最初のフィールドがRawContentのときは、そこにASN.1の生データが格納されます。
これら以外のASN.1の型はサポートしていません。サポートしていない型が現れると解析エラーを返します。
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とメモリを共有します。
Enumerated型
Enumeratedは、単なるintを表します。
type Enumerated int
Flag型
Flagはどのデータでも受け付け、そのデータが存在するときにtrueがセットされます。
type Flag bool
ObjectIdentifier型
ObjectIdentifierは、ASN.1 OBJECT IDENTIFIERを扱います。
type ObjectIdentifier []int
(ObjectIdentifier) Equal関数
func (oi ObjectIdentifier) Equal(other ObjectIdentifier) bool
Equalは、oiとotherがともに同じ識別子であるときtrueを返します。
RawContent型
RawContentは、DERデータをデコードされない状態で保持しておきたいことを知らせるために使います。 これを使用するときは構造体の最初のフィールドがこの型でなければなりません。それ以外のどれかのフィールドがこの型であるときはエラーとなります。
type RawContent []byte
RawValue型
RawValueは、デコードされていないASN.1 オブジェクトを扱います。
type RawValue struct {
Class, Tag int
IsCompound bool
Bytes []byte
FullBytes []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
Comments