Documentation
¶
Overview ¶
パッケージasn1は、ITU-T Rec X.690で定義されたDERエンコードされたASN.1データ構造の解析を実装します。 また、「ASN.1、BER、およびDERのサブセットの素人向けガイド」も参照してください。 http://luca.ntop.org/Teaching/Appunti/asn1.html。
Index ¶
- Constants
- Variables
- func Marshal(val any) ([]byte, error)
- func MarshalWithParams(val any, params string) ([]byte, error)
- func Unmarshal(b []byte, val any) (rest []byte, err error)
- func UnmarshalWithParams(b []byte, val any, params string) (rest []byte, err error)
- type BitString
- type Enumerated
- type Flag
- type ObjectIdentifier
- type RawContent
- type RawValue
- type StructuralError
- type SyntaxError
Constants ¶
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 TagBMPString = 30 )
ASN.1のタグは、次のオブジェクトのタイプを表します。
const ( ClassUniversal = 0 ClassApplication = 1 ClassContextSpecific = 2 ClassPrivate = 3 )
ASN.1クラスタイプは、タグの名前空間を表します。
Variables ¶
var NullBytes = []byte{TagNull, 0}
NullBytesには、DERエンコードされたASN.1 NULLタイプを表すバイトが含まれています。
var NullRawValue = RawValue{Tag: TagNull}
NullRawValueは、ASN.1 NULLのタグ(5)が設定されたRawValueです。
Functions ¶
func Marshal ¶
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 ¶ added in v1.10.0
MarshalWithParamsは、トップレベルの要素にフィールドパラメータを指定することを可能にします。パラメータの形式は、フィールドタグと同じです。
func Unmarshal ¶
UnmarshalはDER形式のASN.1データ構造bを解析し、reflectパッケージを使用してvalで指定された任意の値を埋める。 Unmarshalはreflectパッケージを使用するため、書き込まれる構造体は大文字のフィールド名を使用する必要がある。 valがnilまたはポインタでない場合、Unmarshalはエラーを返す。
bを解析した後、valに埋めるために使用されなかったバイトはrestとして返される。 構造体へのSEQUENCEの解析時、valにマッチするフィールドを持たないトレーリング要素は、 トレーリングデータではなくSEQUENCEの有効な要素と見なされないため、restには含まれません。
ASN.1 INTEGERはint、int32、int64、または*math/bigパッケージの*big.Intに書き込むことができます。 エンコードされた値が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はstringに書き込むことができます。
上記の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タグ番号を指定します。これはASN.1 CONTEXT SPECIFICであるということを意味します。
IMPLICITタグを持つASN.1値を文字列フィールドにデコードする場合、 UnmarshalはデフォルトでPrintableStringになります。これは'@'や'&'などの文字をサポートしません。 他のエンコーディングを強制するには、次のタグを使用します:
ia5は文字列をASN.1 IA5String値として復元します numericは文字列をASN.1 NumericString値として復元します utf8は文字列をASN.1 UTF8String値として復元します
構造体の最初のフィールドの型がRawContentの場合、構造体の生のASN1コンテンツがそれに保存されます。
スライスの型名が"SET"で終わる場合、これは"set"タグが設定されたように扱われます。これにより、 タイプがSEQUENCEではなくSET OF xと解釈されます。これは、 構造体タグが付けられないネストしたスライスで使用することができます。
他のASN.1の型はサポートされていません; 遭遇すると、 Unmarshalは解析エラーを返します。
Types ¶
type BitString ¶
BitStringは、ASN.1 BIT STRINGタイプを使用したい場合に使用する構造体です。ビット文字列は、メモリ上で最も近いバイトまでパディングされ、有効なビット数が記録されます。パディングビットはゼロになります。
func (BitString) RightAlign ¶
RightAlign はパディングビットが先頭にあるスライスを返します。スライスは BitString とメモリを共有する場合があります。
type ObjectIdentifier ¶
type ObjectIdentifier []int
ObjectIdentifierは、ASN.1オブジェクト識別子を表します。
func (ObjectIdentifier) Equal ¶
func (oi ObjectIdentifier) Equal(other ObjectIdentifier) bool
Equalはoiとotherが同じ識別子を表しているかどうかを報告します。
func (ObjectIdentifier) String ¶ added in v1.3.0
func (oi ObjectIdentifier) String() string
type RawContent ¶
type RawContent []byte
RawContentは、未デコードのDERデータが構造体にとって保存される必要があることを示すために使用されます。使用するには、構造体の最初のフィールドはこの型でなければなりません。他のフィールドがこの型であることはエラーです。
type StructuralError ¶
type StructuralError struct {
Msg string
}
StructuralErrorは、ASN.1データが有効であることを示していますが、それを受け取るGoの型が一致していません。
func (StructuralError) Error ¶
func (e StructuralError) Error() string
type SyntaxError ¶
type SyntaxError struct {
Msg string
}
SyntaxErrorは、ASN.1データが無効であることを示唆しています。
func (SyntaxError) Error ¶
func (e SyntaxError) Error() string