?
本文檔使用 php中文網(wǎng)手冊 發(fā)布
import "encoding/asn1"
概述
索引
按照 ITU-T Rec X.690 的規(guī)定,asn1 包實現(xiàn)了對 DER 編碼的 ASN.1 數(shù)據(jù)結(jié)構(gòu)的解析。
另見“ 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,其標簽設(shè)置為 ASN.1 NULL 類型 tag(5)。
var NullRawValue = RawValue{Tag: TagNull}
func Marshal(val interface{}) ([]byte, error)
Marshal 返回 val 的 ASN.1 編碼。
除了由 Unmarshal 識別的結(jié)構(gòu)標簽之外,還可以使用以下內(nèi)容:
ia5:導(dǎo)致字符串被封送為ASN.1,IA5String值 omitempty:導(dǎo)致跳過空切片 printable:導(dǎo)致字符串被封送為ASN.1,PrintableString值 utf8:導(dǎo)致字符串被封送為ASN.1,UTF8String值 utc:導(dǎo)致time.Time被封送為ASN.1,UTCTime值 generalized:導(dǎo)致time.Time被封送為ASN.1,GeneralizedTime值
func Unmarshal(b []byte, val interface{}) (rest []byte, err error)
Unmarshal 分析 DER 編碼的 ASN.1 數(shù)據(jù)結(jié)構(gòu) b 并使用反射包填充 val 指向的任意值。由于 Unmarshal 使用反射包,因此寫入的結(jié)構(gòu)必須使用大寫字段名稱。
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{}。存儲在接口中的值具有相應(yīng)的 Go 類型。對于整數(shù),該類型是 int64。
如果可以將 x 寫入片段的元素類型,則可以將 x 或 x 的 ASN.1 序列寫入片段。
如果可以將序列中的每個元素寫入結(jié)構(gòu)中的相應(yīng)元素,則可以將 ASN.1 SEQUENCE 或 SET 寫入結(jié)構(gòu)。
結(jié)構(gòu)字段上的以下標記對 Unmarshal 具有特殊意義:
application指定使用APPLICATION標記default:x設(shè)置可選整數(shù)字段的默認值(僅在可選的整數(shù)字段存在時使用) explicit指定附加的顯式標記包裝隱式標記 可選標記該字段為ASN.1可選set會導(dǎo)致SET,而不是SEQUENCE類型 tag:x指定ASN.1標記號; 暗示ASN.1特定背景
如果結(jié)構(gòu)的第一個字段的類型是 RawContent,那么該結(jié)構(gòu)的原始 ASN1 內(nèi)容將被存儲在其中。
如果一個切片元素的類型名稱以“SET”結(jié)尾,那么它將被視為設(shè)置了“set”標簽。這可以用于無法給出 struct 標記的嵌套切片。
其他 ASN.1 類型不受支持;如果遇到,Unmarshal 將返回一個分析錯誤。
func UnmarshalWithParams(b []byte, val interface{}, params string) (rest []byte, err error)
UnmarshalWithParams 允許為頂層元素指定字段參數(shù)。參數(shù)的形式與字段標簽相同。
當您需要 ASN.1 BIT STRING 類型時,BitString 是要使用的結(jié)構(gòu)。位串被填充到內(nèi)存中最近的字節(jié)并記錄有效位的數(shù)量。填充位將為零。
type BitString struct { Bytes []byte // 比特打包成字節(jié)。 BitLength int // 比特長度。}
func (b BitString) At(i int) int
返回給定索引處的位。如果索引超出范圍,則返回 false。
func (b BitString) RightAlign() []byte
RightAlign 返回填充位在開始位置的片。切片可以與 BitString 共享內(nèi)存。
Enumerated 被表示為一個純(plain) int。
type Enumerated int
Flag 接受任何數(shù)據(jù),如果存在則設(shè)置為 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 數(shù)據(jù)需要為結(jié)構(gòu)體保留。要使用它,結(jié)構(gòu)的第一個字段必須有這種類型。任何其他字段都有這種類型的錯誤。
type RawContent []byte
一個 RawValue 表示一個未解碼的 ASN.1 對象。
type RawValue struct { Class, Tag int IsCompound bool Bytes []byte FullBytes []byte // 包括標簽和長度}
StructuralError 表明 ASN.1 數(shù)據(jù)是有效的,但是接收它的 Go 類型不匹配。
type StructuralError struct { Msg string}
func (e StructuralError) Error() string
SyntaxError 表明 ASN.1 數(shù)據(jù)無效。
type SyntaxError struct { Msg string}
func (e SyntaxError) Error() string