...

パッケージ asn1

import "encoding/asn1"
概要
目次

概要 ▾

asn1 パッケージは,ITU-T Rec 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 もご覧ください。

定数

ASN.1 タグは,次のオブジェクトの種類を表します。

const (
    TagBoolean         = 1
    TagInteger         = 2
    TagBitString       = 3
    TagOctetString     = 4
    TagNull            = 5
    TagOID             = 6
    TagEnum            = 10
    TagUTF8String      = 12
    TagSequence        = 16
    TagSet             = 17
    TagNumericString   = 18
    TagPrintableString = 19
    TagT61String       = 20
    TagIA5String       = 22
    TagUTCTime         = 23
    TagGeneralizedTime = 24
    TagGeneralString   = 27
)

ASN.1 クラス型はタグの名前空間を表します。

const (
    ClassUniversal       = 0
    ClassApplication     = 1
    ClassContextSpecific = 2
    ClassPrivate         = 3
)

変数

NullBytes は, DER エンコードされた ASN.1 NULL 型を表すバイトが含まれています。

var NullBytes = []byte{TagNull, 0}

NullRawValue は,Tag が ASN.1 NULL type tag (5) に設定された RawValue です。

var NullRawValue = RawValue{Tag: TagNull}

func Marshal

func Marshal(val interface{}) ([]byte, error)

Marshal (整列化) は val の ASN.1 符号化を返します。

Unmarshal が認識する構造体タグに加えて,次のものを使用できます。

ia5:         文字列を ASN.1, IA5String 値として整列化します
omitempty:   空のスライスをスキップします
printable:   文字列を ASN.1, PrintableString 値として整列化します
utf8:        文字列を ASN.1, UTF8String 値として整列化します
utc:         time.Time を ASN.1, UTCTime 値として整列化します
generalized: time.Time を ASN.1, GeneralizedTime 値として整列化します

func MarshalWithParams 1.10

func MarshalWithParams(val interface{}, params string) ([]byte, error)

MarshalWithParams では,最上位要素にフィールドパラメータを指定できます。 params の形式はフィールドタグと同じです。

func Unmarshal

func Unmarshal(b []byte, val interface{}) (rest []byte, err error)

Unmarshal (非整列化) は DER エンコードされた ASN.1 データ構造 b を解析し, val が指す任意の値を埋めるために reflect パッケージを使用します。 Unmarshal は reflect パッケージを使用するので,書き込まれる構造体は大文字のフィールド名を使用する必要があります。

ASN.1 INTEGER は, int, int32, int64, または *big.Int (math/big パッケージから) に書き込むことができます。 エンコードされた値が Go 型に収まらない場合, Unmarshal は解析エラーを返します。

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, または NumericString は文字列に書き込むことができます。

上記の ASN.1 値はいずれも interface{} に書き込むことができます。 インターフェースに格納された値は,対応する Go 型を持ちます。 整数の場合,その型は int64 です。

ASN.1 SEQUENCE OF x あるいは SET OF x は,x がスライスの要素の型に書き込める場合にスライスに書き込めます。

ASN.1 SEQUENCE または SET は, シーケンス内の各要素を構造体内の対応する要素に書き込むことができる場合は, 構造体に書き込むことができます。

以下の構造体フィールドのタグは, Unmarshal にとって特別な意味を持ちます。

application APPLICATION タグを使用するよう指示します
private     PRIVATE タグを使用するよう指示します
default:x   オプションの整数フィールドのデフォルト値を設定します (オプションもある場合にのみ使われます)
explicit    追加の明示的なタグが暗黙的なタグをラップするよう指示します
optional    ASN.1 OPTIONAL としてフィールドをマークします
set         SEQUENCE 型ではなく, SET を期待します
tag:x       ASN.1 tag number を指定します。ASN.1 CONTEXT SPECIFIC を意味します

構造体の最初のフィールドの型が RawContent の場合は, その構造体の生の ASN1 の内容が格納されます。

スライス要素の型名が "SET" で終わっている場合は, "set" タグが設定されているかのように扱われます。 これは構造体タグを設定できないネストされたスライスで使用できます。

他の ASN.1 型はサポートされていません。 それらに遭遇した場合, Unmarshal は解析エラーを返します。

func UnmarshalWithParams

func UnmarshalWithParams(b []byte, val interface{}, params string) (rest []byte, err error)

UnmarshalWithParams では,最上位要素にフィールドパラメータを指定できます。 params の形式はフィールドタグと同じです。

type BitString

BitString (ビット列) は, ASN.1 BIT STRING 型が必要なときに使用する構造体です。 ビット列はメモリ内の最も近いバイトまで埋められ,有効なビット数が記録されます。 パディングビットはゼロになります。

type BitString struct {
    Bytes     []byte // バイトに入れられたビット
    BitLength int    // ビットの長さ
}

func (BitString) At

func (b BitString) At(i int) int

At はインデックス i のビットを返します。 インデックスが範囲外の場合は false を返します。

func (BitString) RightAlign

func (b BitString) RightAlign() []byte

RightAlign は,パディングビットが先頭にあるスライスを返します。 スライスは BitString とメモリを共有します。

type Enumerated

Enumerated は単純な int として表されます。

type Enumerated int

type Flag

Flat (フラグ) は任意のデータを受け入れ,存在する場合は true に設定されます。

type Flag bool

type ObjectIdentifier

ObjectIdentifier は, ASN.1 オブジェクト識別子を表します。

type ObjectIdentifier []int

func (ObjectIdentifier) Equal

func (oi ObjectIdentifier) Equal(other ObjectIdentifier) bool

Equal は, oi と other が同じ識別子を表しているかどうかを報告します。

func (ObjectIdentifier) String 1.3

func (oi ObjectIdentifier) String() string

type RawContent

RawContent は,デコードされていない DER データを構造体に保存する必要があることを通知するために使用されます。 これを使うためには,構造体の最初のフィールドがこの型を持たなければなりません。 他のフィールドのいずれかがこの型を持つとエラーになります。

type RawContent []byte

type RawValue

RawValue は,デコードされていない ASN.1 オブジェクトを表します。

type RawValue struct {
    Class, Tag int
    IsCompound bool
    Bytes      []byte
    FullBytes  []byte // タグと長さを含む
}

type StructuralError

StructuralError は, ASN.1 データが有効であることを示唆していますが,それを受信して​​いる Go 型は一致しません。

type StructuralError struct {
    Msg string
}

func (StructuralError) Error

func (e StructuralError) Error() string

type SyntaxError

SyntaxError は, ASN.1 データが無効であることを示唆します。

type SyntaxError struct {
    Msg string
}

func (SyntaxError) Error

func (e SyntaxError) Error() string