Involved Source Filesasn1.gobuilder.go Package cryptobyte contains types that help with parsing and constructing
length-prefixed, binary messages, including ASN.1 DER. (The asn1 subpackage
contains useful ASN.1 constants.)
The String type is for parsing. It wraps a []byte slice and provides helper
functions for consuming structures, value by value.
The Builder type is for constructing messages. It providers helper functions
for appending values and also for appending length-prefixed submessages –
without having to worry about calculating the length prefix ahead of time.
See the documentation and examples for the Builder and String types to get
started.
Package-Level Type Names (total 5, all are exported)
/* sort exporteds by: | */
A Builder builds byte strings from fixed-length and length-prefixed values.
Builders either allocate space as needed, or are ‘fixed’, which means that
they write into a given buffer and produce an error if it's exhausted.
The zero value is a usable Builder that allocates space as needed.
Simple values are marshaled and appended to a Builder using methods on the
Builder. Length-prefixed values are marshaled by providing a
BuilderContinuation, which is a function that writes the inner contents of
the value to a given Builder. See the documentation for BuilderContinuation
for details.child*BuildererrerrorfixedSizeboolinContinuation*booloffsetintpendingIsASN1boolpendingLenLenintresult[]byte AddASN1 appends an ASN.1 object. The object is prefixed with the given tag.
Tags greater than 30 are not supported and result in an error (i.e.
low-tag-number form only). The child builder passed to the
BuilderContinuation can be used to build the content of the ASN.1 object. AddASN1BigInt appends a DER-encoded ASN.1 INTEGER. AddASN1BitString appends a DER-encoded ASN.1 BIT STRING. This does not
support BIT STRINGs that are not a whole number of bytes.(*Builder) AddASN1Boolean(v bool) AddASN1Enum appends a DER-encoded ASN.1 ENUMERATION. AddASN1GeneralizedTime appends a DER-encoded ASN.1 GENERALIZEDTIME. AddASN1Int64 appends a DER-encoded ASN.1 INTEGER. AddASN1Int64WithTag appends a DER-encoded ASN.1 INTEGER with the
given tag.(*Builder) AddASN1NULL()(*Builder) AddASN1ObjectIdentifier(oid encoding_asn1.ObjectIdentifier) AddASN1OctetString appends a DER-encoded ASN.1 OCTET STRING. AddASN1UTCTime appends a DER-encoded ASN.1 UTCTime. AddASN1Uint64 appends a DER-encoded ASN.1 INTEGER. AddBytes appends a sequence of bytes to the byte string. AddUint16 appends a big-endian, 16-bit value to the byte string. AddUint16LengthPrefixed adds a big-endian, 16-bit length-prefixed byte sequence. AddUint24 appends a big-endian, 24-bit value to the byte string. The highest
byte of the 32-bit input value is silently truncated. AddUint24LengthPrefixed adds a big-endian, 24-bit length-prefixed byte sequence. AddUint32 appends a big-endian, 32-bit value to the byte string. AddUint32LengthPrefixed adds a big-endian, 32-bit length-prefixed byte sequence. AddUint64 appends a big-endian, 64-bit value to the byte string. AddUint8 appends an 8-bit value to the byte string. AddUint8LengthPrefixed adds a 8-bit length-prefixed byte sequence. AddValue calls Marshal on v, passing a pointer to the builder to append to.
If Marshal returns an error, it is set on the Builder so that subsequent
appends don't have an effect. Bytes returns the bytes written by the builder or an error if one has
occurred during building. BytesOrPanic returns the bytes written by the builder or panics if an error
has occurred during building. MarshalASN1 calls encoding_asn1.Marshal on its input and appends the result if
successful or records an error if one occurred. SetError sets the value to be returned as the error from Bytes. Writes
performed after calling SetError are ignored. Unwrite rolls back non-negative n bytes written directly to the Builder.
An attempt by a child builder passed to a continuation to unwrite bytes
from its parent will panic.(*Builder) add(bytes ...byte)(*Builder) addASN1Signed(tag asn1.Tag, v int64)(*Builder) addBase128Int(n int64)(*Builder) addLengthPrefixed(lenLen int, isASN1 bool, f BuilderContinuation)(*Builder) callContinuation(f BuilderContinuation, arg *Builder)(*Builder) flushChild()
func NewBuilder(buffer []byte) *Builder
func NewFixedBuilder(buffer []byte) *Builder
func MarshalingValue.Marshal(b *Builder) error
func (*Builder).callContinuation(f BuilderContinuation, arg *Builder)
func crypto/ecdsa.addASN1IntBytes(b *Builder, bytes []byte)
func crypto/tls.addBytesWithLength(b *Builder, v []byte, n int)
func crypto/tls.addUint64(b *Builder, v uint64)
func crypto/tls.marshalCertificate(b *Builder, certificate tls.Certificate)
BuilderContinuation is a continuation-passing interface for building
length-prefixed byte sequences. Builder methods for length-prefixed
sequences (AddUint8LengthPrefixed etc) will invoke the BuilderContinuation
supplied to them. The child builder passed to the continuation can be used
to build the content of the length-prefixed sequence. For example:
parent := cryptobyte.NewBuilder()
parent.AddUint8LengthPrefixed(func (child *Builder) {
child.AddUint8(42)
child.AddUint8LengthPrefixed(func (grandchild *Builder) {
grandchild.AddUint8(5)
})
})
It is an error to write more bytes to the child than allowed by the reserved
length prefix. After the continuation returns, the child must be considered
invalid, i.e. users must not store any copies or references of the child
that outlive the continuation.
If the continuation panics with a value of type BuildError then the inner
error will be returned as the error from Bytes. If the child panics
otherwise then Bytes will repanic with the same value.
func (*Builder).AddASN1(tag asn1.Tag, f BuilderContinuation)
func (*Builder).AddUint16LengthPrefixed(f BuilderContinuation)
func (*Builder).AddUint24LengthPrefixed(f BuilderContinuation)
func (*Builder).AddUint32LengthPrefixed(f BuilderContinuation)
func (*Builder).AddUint8LengthPrefixed(f BuilderContinuation)
func (*Builder).addLengthPrefixed(lenLen int, isASN1 bool, f BuilderContinuation)
func (*Builder).callContinuation(f BuilderContinuation, arg *Builder)
BuildError wraps an error. If a BuilderContinuation panics with this value,
the panic will be recovered and the inner error will be returned from
Builder.Bytes.Errerror
A MarshalingValue marshals itself into a Builder. Marshal is called by Builder.AddValue. It receives a pointer to a builder
to marshal itself into. It may return an error that occurred during
marshaling, such as unset or invalid values.
crypto/tls.marshalingFunction
func (*Builder).AddValue(v MarshalingValue)
String represents a string of bytes. It provides methods for parsing
fixed-length and length-prefixed values from it. CopyBytes copies len(out) bytes into out and advances over them. It reports
whether the copy operation was successful Empty reports whether the string does not contain any bytes. PeekASN1Tag reports whether the next ASN.1 value on the string starts with
the given tag. ReadASN1 reads the contents of a DER-encoded ASN.1 element (not including
tag and length bytes) into out, and advances. The element must match the
given tag. It reports whether the read was successful.
Tags greater than 30 are not supported (i.e. low-tag-number format only). ReadASN1BitString decodes an ASN.1 BIT STRING into out and advances.
It reports whether the read was successful. ReadASN1BitStringAsBytes decodes an ASN.1 BIT STRING into out and advances. It is
an error if the BIT STRING is not a whole number of bytes. It reports
whether the read was successful. ReadASN1Boolean decodes an ASN.1 BOOLEAN and converts it to a boolean
representation into out and advances. It reports whether the read
was successful. ReadASN1Bytes reads the contents of a DER-encoded ASN.1 element (not including
tag and length bytes) into out, and advances. The element must match the
given tag. It reports whether the read was successful. ReadASN1Element reads the contents of a DER-encoded ASN.1 element (including
tag and length bytes) into out, and advances. The element must match the
given tag. It reports whether the read was successful.
Tags greater than 30 are not supported (i.e. low-tag-number format only). ReadASN1Enum decodes an ASN.1 ENUMERATION into out and advances. It reports
whether the read was successful. ReadASN1GeneralizedTime decodes an ASN.1 GENERALIZEDTIME into out and
advances. It reports whether the read was successful. ReadASN1Int64WithTag decodes an ASN.1 INTEGER with the given tag into out
and advances. It reports whether the read was successful and resulted in a
value that can be represented in an int64. ReadASN1Integer decodes an ASN.1 INTEGER into out and advances. If out does
not point to an integer, to a big.Int, or to a []byte it panics. Only
positive and zero values can be decoded into []byte, and they are returned as
big-endian binary values that share memory with s. Positive values will have
no leading zeroes, and zero will be returned as a single zero byte.
ReadASN1Integer reports whether the read was successful. ReadASN1ObjectIdentifier decodes an ASN.1 OBJECT IDENTIFIER into out and
advances. It reports whether the read was successful. ReadASN1UTCTime decodes an ASN.1 UTCTime into out and advances.
It reports whether the read was successful. ReadAnyASN1 reads the contents of a DER-encoded ASN.1 element (not including
tag and length bytes) into out, sets outTag to its tag, and advances.
It reports whether the read was successful.
Tags greater than 30 are not supported (i.e. low-tag-number format only). ReadAnyASN1Element reads the contents of a DER-encoded ASN.1 element
(including tag and length bytes) into out, sets outTag to is tag, and
advances. It reports whether the read was successful.
Tags greater than 30 are not supported (i.e. low-tag-number format only). ReadBytes reads n bytes into out and advances over them. It reports
whether the read was successful. ReadOptionalASN1 attempts to read the contents of a DER-encoded ASN.1
element (not including tag and length bytes) tagged with the given tag into
out. It stores whether an element with the tag was found in outPresent,
unless outPresent is nil. It reports whether the read was successful. ReadOptionalASN1Boolean sets *out to the value of the next ASN.1 BOOLEAN or,
if the next bytes are not an ASN.1 BOOLEAN, to the value of defaultValue.
It reports whether the operation was successful. ReadOptionalASN1Integer attempts to read an optional ASN.1 INTEGER explicitly
tagged with tag into out and advances. If no element with a matching tag is
present, it writes defaultValue into out instead. Otherwise, it behaves like
ReadASN1Integer. ReadOptionalASN1OctetString attempts to read an optional ASN.1 OCTET STRING
explicitly tagged with tag into out and advances. If no element with a
matching tag is present, it sets "out" to nil instead. It reports
whether the read was successful. ReadUint16 decodes a big-endian, 16-bit value into out and advances over it.
It reports whether the read was successful. ReadUint16LengthPrefixed reads the content of a big-endian, 16-bit
length-prefixed value into out and advances over it. It reports whether the
read was successful. ReadUint24 decodes a big-endian, 24-bit value into out and advances over it.
It reports whether the read was successful. ReadUint24LengthPrefixed reads the content of a big-endian, 24-bit
length-prefixed value into out and advances over it. It reports whether
the read was successful. ReadUint32 decodes a big-endian, 32-bit value into out and advances over it.
It reports whether the read was successful. ReadUint64 decodes a big-endian, 64-bit value into out and advances over it.
It reports whether the read was successful. ReadUint8 decodes an 8-bit value into out and advances over it.
It reports whether the read was successful. ReadUint8LengthPrefixed reads the content of an 8-bit length-prefixed value
into out and advances over it. It reports whether the read was successful. Skip advances the String by n byte and reports whether it was successful. SkipASN1 reads and discards an ASN.1 element with the given tag. It
reports whether the operation was successful. SkipOptionalASN1 advances s over an ASN.1 element with the given tag, or
else leaves s unchanged. It reports whether the operation was successful. read advances a String by n bytes and returns them. If less than n bytes
remain, it returns nil.(*String) readASN1(out *String, outTag *asn1.Tag, skipHeader bool) bool(*String) readASN1BigInt(out *big.Int) bool(*String) readASN1Bytes(out *[]byte) bool(*String) readASN1Int64(out *int64) bool(*String) readASN1Uint64(out *uint64) bool(*String) readBase128Int(out *int) bool(*String) readLengthPrefixed(lenLen int, outChild *String) bool(*String) readUnsigned(out *uint32, length int) bool
func (*String).ReadAnyASN1(out *String, outTag *asn1.Tag) bool
func (*String).ReadAnyASN1Element(out *String, outTag *asn1.Tag) bool
func (*String).ReadASN1(out *String, tag asn1.Tag) bool
func (*String).ReadASN1Element(out *String, tag asn1.Tag) bool
func (*String).ReadOptionalASN1(out *String, outPresent *bool, tag asn1.Tag) bool
func (*String).ReadUint16LengthPrefixed(out *String) bool
func (*String).ReadUint24LengthPrefixed(out *String) bool
func (*String).ReadUint8LengthPrefixed(out *String) bool
func (*String).readASN1(out *String, outTag *asn1.Tag, skipHeader bool) bool
func (*String).readLengthPrefixed(lenLen int, outChild *String) bool
func crypto/tls.readUint16LengthPrefixed(s *String, out *[]byte) bool
func crypto/tls.readUint24LengthPrefixed(s *String, out *[]byte) bool
func crypto/tls.readUint64(s *String, out *uint64) bool
func crypto/tls.readUint8LengthPrefixed(s *String, out *[]byte) bool
func crypto/tls.unmarshalCertificate(s *String, certificate *tls.Certificate) bool
func crypto/x509.forEachSAN(der String, callback func(tag int, data []byte) error) error
func crypto/x509.parseAI(der String) (pkix.AlgorithmIdentifier, error)
func crypto/x509.parseBasicConstraintsExtension(der String) (bool, int, error)
func crypto/x509.parseCertificatePoliciesExtension(der String) ([]asn1.ObjectIdentifier, error)
func crypto/x509.parseExtension(der String) (pkix.Extension, error)
func crypto/x509.parseExtKeyUsageExtension(der String) ([]x509.ExtKeyUsage, []asn1.ObjectIdentifier, error)
func crypto/x509.parseKeyUsageExtension(der String) (x509.KeyUsage, error)
func crypto/x509.parseName(raw String) (*pkix.RDNSequence, error)
func crypto/x509.parseSANExtension(der String) (dnsNames, emailAddresses []string, ipAddresses []net.IP, uris []*url.URL, err error)
func crypto/x509.parseTime(der *String) (time.Time, error)
func crypto/x509.parseValidity(der String) (time.Time, time.Time, error)
Package-Level Functions (total 6, in which 2 are exported)
NewBuilder creates a Builder that appends its output to the given buffer.
Like append(), the slice will be reallocated if its capacity is exceeded.
Use Bytes to get the final buffer.
NewFixedBuilder creates a Builder that appends its output into the given
buffer. This builder does not reallocate the output buffer. Writes that
would exceed the buffer's capacity are treated as an error.
The pages are generated with Goldsv0.6.7. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds.