package asn1
Import Path
encoding/asn1 (on golang.org and go.dev)
Dependency Relation
imports 12 packages, and imported by 3 packages
Involved Source Files
d-> asn1.go
common.go
marshal.go
Exported Type Names
type
Flag bool
A Flag accepts any data and is set to true if present.
type
RawContent ([])
RawContent is used to signal that the undecoded, DER data needs to be
preserved for a struct. To use it, the first field of the struct must have
this type. It's an error for any of the other fields to have this type.
Exported Values
const
ClassApplication = 1
ASN.1 class types represent the namespace of the tag.
const
ClassContextSpecific = 2
ASN.1 class types represent the namespace of the tag.
const
ClassPrivate = 3
ASN.1 class types represent the namespace of the tag.
const
ClassUniversal = 0
ASN.1 class types represent the namespace of the tag.
func
Marshal(val interface{}) ([]
byte,
error)
Marshal returns the ASN.1 encoding of val.
In addition to the struct tags recognised by Unmarshal, the following can be
used:
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(val interface{}, params
string) ([]
byte,
error)
MarshalWithParams allows field parameters to be specified for the
top-level element. The form of the params is the same as the field tags.
var
NullBytes []
byte
NullBytes contains bytes representing the DER-encoded ASN.1 NULL type.
var
NullRawValue RawValue
NullRawValue is a RawValue with its Tag set to the ASN.1 NULL type tag (5).
const
TagBitString = 3
ASN.1 tags represent the type of the following object.
const
TagBMPString = 30
ASN.1 tags represent the type of the following object.
const
TagBoolean = 1
ASN.1 tags represent the type of the following object.
const
TagEnum = 10
ASN.1 tags represent the type of the following object.
const
TagGeneralString = 27
ASN.1 tags represent the type of the following object.
const
TagIA5String = 22
ASN.1 tags represent the type of the following object.
const
TagInteger = 2
ASN.1 tags represent the type of the following object.
const
TagNull = 5
ASN.1 tags represent the type of the following object.
const
TagNumericString = 18
ASN.1 tags represent the type of the following object.
const
TagOctetString = 4
ASN.1 tags represent the type of the following object.
const
TagOID = 6
ASN.1 tags represent the type of the following object.
const
TagT61String = 20
ASN.1 tags represent the type of the following object.
const
TagUTCTime = 23
ASN.1 tags represent the type of the following object.
const
TagUTF8String = 12
ASN.1 tags represent the type of the following object.
func
Unmarshal(b []
byte, val interface{}) (rest []
byte, err
error)
Unmarshal parses the DER-encoded ASN.1 data structure b
and uses the reflect package to fill in an arbitrary value pointed at by val.
Because Unmarshal uses the reflect package, the structs
being written to must use upper case field names.
After parsing b, any bytes that were leftover and not used to fill
val will be returned in rest. When parsing a SEQUENCE into a struct,
any trailing elements of the SEQUENCE that do not have matching
fields in val will not be included in rest, as these are considered
valid elements of the SEQUENCE and not trailing data.
An ASN.1 INTEGER can be written to an int, int32, int64,
or *big.Int (from the math/big package).
If the encoded value does not fit in the Go type,
Unmarshal returns a parse error.
An ASN.1 BIT STRING can be written to a BitString.
An ASN.1 OCTET STRING can be written to a []byte.
An ASN.1 OBJECT IDENTIFIER can be written to an
ObjectIdentifier.
An ASN.1 ENUMERATED can be written to an Enumerated.
An ASN.1 UTCTIME or GENERALIZEDTIME can be written to a time.Time.
An ASN.1 PrintableString, IA5String, or NumericString can be written to a string.
Any of the above ASN.1 values can be written to an interface{}.
The value stored in the interface has the corresponding Go type.
For integers, that type is int64.
An ASN.1 SEQUENCE OF x or SET OF x can be written
to a slice if an x can be written to the slice's element type.
An ASN.1 SEQUENCE or SET can be written to a struct
if each of the elements in the sequence can be
written to the corresponding element in the struct.
The following tags on struct fields have special meaning to 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
If the type of the first field of a structure is RawContent then the raw
ASN1 contents of the struct will be stored in it.
If the type name of a slice element ends with "SET" then it's treated as if
the "set" tag was set on it. This can be used with nested slices where a
struct tag cannot be given.
Other ASN.1 types are not supported; if it encounters them,
Unmarshal returns a parse error.
func
UnmarshalWithParams(b []
byte, val interface{}, params
string) (rest []
byte, err
error)
UnmarshalWithParams allows field parameters to be specified for the
top-level element. The form of the params is the same as the field tags.