package ber import ( "bytes" "strconv" "strings" ) type state struct{ bytes.Buffer } func newState(b []byte) *state { s := &state{} s.Write(b) return s } func (s *state) subState() *state { ss := state{} ss.Write(s.next()) return &ss } func (s *state) next() []byte { l := s.unmarshalLen() return s.Next(l) } type OID []int func (o OID) Equal(p OID) bool { if len(o) != len(p) { return false } for i := range o { if o[i] != p[i] { return false } } return true } func (o OID) String() string { s := make([]string, len(o)) for i, v := range o { s[i] = strconv.Itoa(v) } return strings.Join(s, ".") } type BitString []bool func (o BitString) Equal(p BitString) bool { if len(o) != len(p) { return false } for i := range o { if o[i] != p[i] { return false } } return true } func (o BitString) String() string { var s string for i, bit := range o { if i != 0 && i%4 == 0 { s += " " } switch bit { case true: s += "1" case false: s += "0" } } return s } type Raw []byte type Tag int