Spec-Zone.ru › Go

Пакет asn1

  • import "encoding/asn1"
  • Обзор
  • Индекс

Обзор

Пакет asn1 реализует разбор структур данных ASN.1, закодированных в DER, как определено в рекомендации ITU-T X.690.

См. также «Руководство для неспециалистов по подмножеству ASN.1, BER и DER», http://luca.ntop.org/Teaching/Appunti/asn1.html.

Индекс

  • Константы
  • Переменные
  • Функция Marshal(val any) ([]byte, error)
  • Функция MarshalWithParams(val any, params string) ([]byte, error)
  • Функция Unmarshal(b []byte, val any) (rest []byte, err error)
  • Функция UnmarshalWithParams(b []byte, val any, params string) (rest []byte, err error)
  • Тип BitString
  • Функция (b BitString) At(i int) int
  • Функция (b BitString) RightAlign() []byte
  • Тип Enumerated
  • Тип Flag
  • Тип ObjectIdentifier
  • Функция (oi ObjectIdentifier) Equal(other ObjectIdentifier) bool
  • Функция (oi ObjectIdentifier) String() string
  • Тип RawContent
  • Тип RawValue
  • Тип StructuralError
  • Функция (e StructuralError) Error() string
  • Тип SyntaxError
  • Функция (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
    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
)

Переменные

NullBytes содержит байты, представляющие тип NULL ASN.1, закодированный в DER.

var NullBytes = []byte{TagNull, 0}

NullRawValue — это RawValue с тегом, установленным на тег типа NULL ASN.1 (5).

var NullRawValue = RawValue{Tag: TagNull}

Функция Marshal

func Marshal(val any) ([]byte, error)

Marshal возвращает кодирование val в формате ASN.1.

Помимо тегов структур, распознаваемых Unmarshal, можно использовать следующее:

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

Функция MarshalWithParams 1.10

func MarshalWithParams(val any, params string) ([]byte, error)

MarshalWithParams позволяет задавать параметры полей для верхнего элемента. Формат параметров такой же, как у тегов полей.

Функция Unmarshal

func Unmarshal(b []byte, val any) (rest []byte, err error)

Unmarshal разбирает структуру данных ASN.1, закодированную в DER, b, и использует пакет reflect для заполнения произвольного значения, на которое указывает val. Поскольку Unmarshal использует пакет reflect, структуры, в которые записываются данные, должны использовать имена полей с заглавными буквами. Если val имеет значение nil или не является указателем, Unmarshal возвращает ошибку.

После разбора b любые оставшиеся байты, которые не были использованы для заполнения val, будут возвращены в rest. При разборе SEQUENCE в структуру любые хвостовые элементы SEQUENCE, не имеющие соответствующих полей в val, не будут включены в rest, поскольку они считаются допустимыми элементами SEQUENCE, а не хвостовыми данными.

  • ASN.1 INTEGER может быть записан в int, int32, int64 или *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 могут быть записаны в строку.

  • Любое из вышеперечисленных значений ASN.1 может быть записано в interface{}. Значение, хранящееся в интерфейсе, имеет соответствующий тип Go. Для целых чисел это тип int64.

  • ASN.1 SEQUENCE OF x или SET OF x может быть записан в срез, если x может быть записан в тип элемента среза.

  • ASN.1 SEQUENCE или SET могут быть записаны в структуру, если каждый элемент в последовательности может быть записан в соответствующий элемент структуры.

Следующие теги полей структуры имеют особое значение для 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

При декодировании значения ASN.1 с неявным тегом в поле строки Unmarshal будет использоваться PrintableString по умолчанию, который не поддерживает символы, такие как «@» и «&». Чтобы принудительно использовать другие кодировки, используйте следующие теги:

ia5     causes strings to be unmarshaled as ASN.1 IA5String values
numeric causes strings to be unmarshaled as ASN.1 NumericString values
utf8    causes strings to be unmarshaled as ASN.1 UTF8String values

Если тип первого поля структуры равен RawContent, то необработанное содержимое ASN1 структуры будет храниться в нем.

Если имя типа среза заканчивается на «SET», оно обрабатывается так, как будто тег «set» установлен на нем. Это приводит к интерпретации типа как SET OF x, а не SEQUENCE OF x. Это можно использовать со вложенными срезами, где тег структуры не может быть задан.

Другие типы ASN.1 не поддерживаются; если он их обнаружит, Unmarshal возвращает ошибку разбора.

Функция UnmarshalWithParams

func UnmarshalWithParams(b []byte, val any, params string) (rest []byte, err error)

UnmarshalWithParams позволяет задавать параметры полей для верхнего элемента. Формат параметров такой же, как у тегов полей.

Тип BitString

BitString — это структура, используемая, когда требуется тип ASN.1 BIT STRING. Битовая строка дополняется до ближайшего байта в памяти, и записывается количество допустимых битов. Дополнительные биты будут нулевыми.

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

Функция (BitString) At

func (b BitString) At(i int) int

At возвращает бит по заданному индексу. Если индекс находится вне диапазона, возвращается 0.

Функция (BitString) RightAlign

func (b BitString) RightAlign() []byte

RightAlign возвращает срез, где биты заполнения находятся в начале. Срез может использовать общую память со BitString.

Тип Enumerated

Enumerated представлен обычным целым числом.

type Enumerated int

Тип Flag

Flag принимает любые данные и устанавливается в true, если присутствует.

type Flag bool

Тип ObjectIdentifier

ObjectIdentifier представляет собой идентификатор ASN.1 OBJECT IDENTIFIER.

type ObjectIdentifier []int

Функция (ObjectIdentifier) Equal

func (oi ObjectIdentifier) Equal(other ObjectIdentifier) bool

Equal проверяет, представляют ли oi и other один и тот же идентификатор.

Функция (ObjectIdentifier) String 1.3

func (oi ObjectIdentifier) String() string

Тип RawContent

RawContent используется для указания необходимости сохранения необработанных данных DER для структуры. Для его использования первое поле структуры должно иметь этот тип. Ошибка возникает, если любой другой из полей имеет этот тип.

type RawContent []byte

Тип RawValue

RawValue представляет собой необработанный объект ASN.1.

type RawValue struct {
    Class, Tag int
    IsCompound bool
    Bytes      []byte
    FullBytes  []byte // includes the tag and length
}

Тип StructuralError

StructuralError указывает на то, что данные ASN.1 допустимы, но тип Go, который их получает, не соответствует им.

type StructuralError struct {
    Msg string
}

Функция (StructuralError) Error

func (e StructuralError) Error() string

Тип SyntaxError

SyntaxError указывает на то, что данные ASN.1 недействительны.

type SyntaxError struct {
    Msg string
}

Функция (SyntaxError) Error

func (e SyntaxError) Error() string

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/encoding/asn1/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API