?
This document uses PHP Chinese website manual Release
import "encoding/asn1"
概述
索引
按照 ITU-T Rec X.690 的規(guī)定,asn1 包實現了對 DER 編碼的 ASN.1 數據結構的解析。
另見“ ASN.1,BER 和 DER 子集的外行指南”,http://luca.ntop.org/Teaching/Appunti/asn1.html。
常量
變量
func Marshal(val interface{}) ([]byte, error)
func Unmarshal(b []byte, val interface{}) (rest []byte, err error)
func UnmarshalWithParams(b []byte, val interface{}, params string) (rest []byte, err error)
type BitString
func (b BitString) At(i int) int
func (b BitString) RightAlign() []byte
type Enumerated
type Flag
type ObjectIdentifier
func (oi ObjectIdentifier) Equal(other ObjectIdentifier) bool
func (oi ObjectIdentifier) String() string
type RawContent
type RawValue
type StructuralError
func (e StructuralError) Error() string
type SyntaxError
func (e SyntaxError) Error() string
asn1.go common.go marshal.go
ASN.1 標簽表示以下對象的類型。
const ( TagBoolean = 1 TagInteger = 2 TagBitString = 3 TagOctetString = 4 TagNull = 5 TagOID = 6 TagEnum = 10 TagUTF8String = 12 TagSequence = 16 TagSet = 17 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 類型的字節(jié)。
var NullBytes = []byte{TagNull, 0}
NullRawValue 是一個 RawValue,其標簽設置為 ASN.1 NULL 類型 tag(5)。
var NullRawValue = RawValue{Tag: TagNull}
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 Unmarshal(b []byte, val interface{}) (rest []byte, err error)
Unmarshal 分析 DER 編碼的 ASN.1 數據結構 b 并使用反射包填充 val 指向的任意值。由于 Unmarshal 使用反射包,因此寫入的結構必須使用大寫字段名稱。
ASN.1 INTEGER 可以寫入 int,int32,int64 或 *big.Int(來自 math/big package)。如果編碼值不適合 Go 類型,Unmarshal 會返回解析錯誤。
一個 ASN.1 BIT STRING 可以寫入一個 BitString。
ASN.1 OCTET STRING 可以寫入 []byte。
一個 ASN.1 OBJECT IDENTIFIER 可以寫入一個 ObjectIdentifier。
一個 ASN.1 枚舉可以被寫入枚舉。
一次 ASN.1 UTCTIME 或 GENERALIZEDTIME 可寫入一次。
ASN.1 PrintableString 或 IA5String 可寫入字符串。
任何上面的 ASN.1 值都可以寫入 interface{}。存儲在接口中的值具有相應的 Go 類型。對于整數,該類型是 int64。
如果可以將 x 寫入片段的元素類型,則可以將 x 或 x 的 ASN.1 序列寫入片段。
如果可以將序列中的每個元素寫入結構中的相應元素,則可以將 ASN.1 SEQUENCE 或 SET 寫入結構。
結構字段上的以下標記對 Unmarshal 具有特殊意義:
application指定使用APPLICATION標記default:x設置可選整數字段的默認值(僅在可選的整數字段存在時使用) explicit指定附加的顯式標記包裝隱式標記 可選標記該字段為ASN.1可選set會導致SET,而不是SEQUENCE類型 tag:x指定ASN.1標記號; 暗示ASN.1特定背景
如果結構的第一個字段的類型是 RawContent,那么該結構的原始 ASN1 內容將被存儲在其中。
如果一個切片元素的類型名稱以“SET”結尾,那么它將被視為設置了“set”標簽。這可以用于無法給出 struct 標記的嵌套切片。
其他 ASN.1 類型不受支持;如果遇到,Unmarshal 將返回一個分析錯誤。
func UnmarshalWithParams(b []byte, val interface{}, params string) (rest []byte, err error)
UnmarshalWithParams 允許為頂層元素指定字段參數。參數的形式與字段標簽相同。
當您需要 ASN.1 BIT STRING 類型時,BitString 是要使用的結構。位串被填充到內存中最近的字節(jié)并記錄有效位的數量。填充位將為零。
type BitString struct { Bytes []byte // 比特打包成字節(jié)。 BitLength int // 比特長度。}
func (b BitString) At(i int) int
返回給定索引處的位。如果索引超出范圍,則返回 false。
func (b BitString) RightAlign() []byte
RightAlign 返回填充位在開始位置的片。切片可以與 BitString 共享內存。
Enumerated 被表示為一個純(plain) int。
type Enumerated int
Flag 接受任何數據,如果存在則設置為 true。
type Flag bool
一個 ObjectIdentifier 表示一個 ASN.1 對象標識符。
type ObjectIdentifier []int
func (oi ObjectIdentifier) Equal(other ObjectIdentifier) bool
平等報告 oi 和其他是否表示相同的標識符。
func (oi ObjectIdentifier) String() string
RawContent 用于表示未解碼的 DER 數據需要為結構體保留。要使用它,結構的第一個字段必須有這種類型。任何其他字段都有這種類型的錯誤。
type RawContent []byte
一個 RawValue 表示一個未解碼的 ASN.1 對象。
type RawValue struct { Class, Tag int IsCompound bool Bytes []byte FullBytes []byte // 包括標簽和長度}
StructuralError 表明 ASN.1 數據是有效的,但是接收它的 Go 類型不匹配。
type StructuralError struct { Msg string}
func (e StructuralError) Error() string
SyntaxError 表明 ASN.1 數據無效。
type SyntaxError struct { Msg string}
func (e SyntaxError) Error() string