Package asn1

import "encoding/asn1"
Overview
Index

Overview ▾

包asn1实现了ITU-T X.690建议书中定义的DER编码的ASN.1数据结构的解析.

另请参见" ASN.1,BER和DER子集的Layman指南", http://luca.ntop.org/Teaching/Appunti/asn1.html .

Constants

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
)

Variables

NullBytes包含表示DER编码的ASN.1 NULL类型的字节.

var NullBytes = []byte{TagNull, 0}

NullRawValue是一个RawValue,其Tag设置为ASN.1 NULL类型标签(5).

var NullRawValue = RawValue{Tag: TagNull}

func Marshal

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

元帅返回val的ASN.1编码.

除了Unmarshal可以识别的struct标记之外,还可以使用以下标记:

ia5:         causes strings to be marshaled as ASN.1, IA5String values
omitempty:   causes empty slices to be skipped
printable:   causes strings to be marshaled as ASN.1, PrintableString values
utf8:        causes strings to be marshaled as ASN.1, UTF8String values
utc:         causes time.Time to be marshaled as ASN.1, UTCTime values
generalized: causes time.Time to be marshaled as ASN.1, GeneralizedTime values

func MarshalWithParams 1.10

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

MarshalWithParams允许为顶级元素指定字段参数. 参数的形式与字段标签相同.

func Unmarshal

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程序包). 如果编码的值不适合Go类型,则Unmarshal返回解析错误.

可以将ASN.1 BIT STRING写入BitString.

可以将ASN.1 OCTET STRING写入[]字节.

可以将ASN.1对象标识符写入ObjectIdentifier.

可以将ASN.1枚举写入枚举.

可以将ASN.1 UTCTIME或GENERALIZEDTIME写入time.Time.

可以将ASN.1 PrintableString,IA5String或NumericString写入字符串.

以上任何ASN.1值都可以写入接口{}. 接口中存储的值具有相应的Go类型. 对于整数,该类型为int64.

如果可以将x的ASN.1 SEQUENCE OF x或SET OF x写入切片的元素类型,则可以将其写入切片.

如果可以将序列中的每个元素写入结构中的相应元素,则可以将ASN.1 SEQUENCE或SET写入结构中.

struct字段上的以下标记对Unmarshal具有特殊含义:

application specifies that an APPLICATION tag is used
private     specifies that a PRIVATE tag is used
default:x   sets the default value for optional integer fields (only used if optional is also present)
explicit    specifies that an additional, explicit tag wraps the implicit one
optional    marks the field as ASN.1 OPTIONAL
set         causes a SET, rather than a SEQUENCE type to be expected
tag:x       specifies the ASN.1 tag number; implies ASN.1 CONTEXT SPECIFIC

如果结构的第一个字段的类型为RawContent,则该结构的原始ASN1内容将存储在其中.

如果切片元素的类型名称以" SET"结尾,则将其视为在其上设置了" set"标记. 可以与无法提供struct标签的嵌套切片一起使用.

不支持其他ASN.1类型. 如果遇到它们,Unmarshal将返回解析错误.

func UnmarshalWithParams

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

UnmarshalWithParams允许为顶级元素指定字段参数. 参数的形式与字段标签相同.

type BitString

BitString是当您需要ASN.1 BIT STRING类型时要使用的结构. 将位字符串填充到内存中最接近的字节,并记录有效位数. 填充位将为零.

type BitString struct {
    Bytes     []byte // bits packed into bytes.
    BitLength int    // length in bits.
}

func (BitString) At

func (b BitString) At(i int) int

At返回给定索引处的位. 如果索引超出范围,则返回false.

func (BitString) RightAlign

func (b BitString) RightAlign() []byte

RightAlign返回一个切片,其中填充位在开头. 切片可以与BitString共享内存.

type Enumerated

枚举表示为纯整数.

type Enumerated int

type Flag

Flag接受任何数据,如果存在,则设置为true.

type Flag bool

type ObjectIdentifier

一个ObjectIdentifier代表一个ASN.1对象标识符.

type ObjectIdentifier []int

func (ObjectIdentifier) Equal

func (oi ObjectIdentifier) Equal(other ObjectIdentifier) bool

相等报告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 // includes the tag and length
}

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

by  ICOPY.SITE