github.com/icodeface/tls@v0.0.0-20230910023335-34df9250cd12/internal/x/crypto/cryptobyte/asn1/asn1.go (about)

     1  // Copyright 2017 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Package asn1 contains supporting types for parsing and building ASN.1
     6  // messages with the cryptobyte package.
     7  package asn1
     8  
     9  // Tag represents an ASN.1 identifier octet, consisting of a tag number
    10  // (indicating a type) and class (such as context-specific or constructed).
    11  //
    12  // Methods in the cryptobyte package only support the low-tag-number form, i.e.
    13  // a single identifier octet with bits 7-8 encoding the class and bits 1-6
    14  // encoding the tag number.
    15  type Tag uint8
    16  
    17  const (
    18  	classConstructed     = 0x20
    19  	classContextSpecific = 0x80
    20  )
    21  
    22  // Constructed returns t with the constructed class bit set.
    23  func (t Tag) Constructed() Tag { return t | classConstructed }
    24  
    25  // ContextSpecific returns t with the context-specific class bit set.
    26  func (t Tag) ContextSpecific() Tag { return t | classContextSpecific }
    27  
    28  // The following is a list of standard tag and class combinations.
    29  const (
    30  	BOOLEAN           = Tag(1)
    31  	INTEGER           = Tag(2)
    32  	BIT_STRING        = Tag(3)
    33  	OCTET_STRING      = Tag(4)
    34  	NULL              = Tag(5)
    35  	OBJECT_IDENTIFIER = Tag(6)
    36  	ENUM              = Tag(10)
    37  	UTF8String        = Tag(12)
    38  	SEQUENCE          = Tag(16 | classConstructed)
    39  	SET               = Tag(17 | classConstructed)
    40  	PrintableString   = Tag(19)
    41  	T61String         = Tag(20)
    42  	IA5String         = Tag(22)
    43  	UTCTime           = Tag(23)
    44  	GeneralizedTime   = Tag(24)
    45  	GeneralString     = Tag(27)
    46  )