package ber import "strconv" type OID []int func MarshalOID(obj OID) (b []byte) { if len(obj) < 2 || obj[0] > 2 { return []byte{} } if obj[0] < 2 && obj[1] > 39 { return []byte{} } first := obj[0]*40 + obj[1] b = append(b, base128(first)...) for _, o := range obj[2:] { b = append(b, base128(o)...) } return b } func (o OID) Marshal() ([]byte, error) { b := MarshalOID(o) return b, nil } func UnmarshalOID(b []byte) (o OID) { if len(b) < 1 { return } v, n := debase128(b) if v < 80 { o = append(o, v/40) o = append(o, v%40) } else { o = append(o, 2) o = append(o, v-80) } for i := n; i < len(b); i += n { v, n = debase128(b[i:]) o = append(o, v) } return } func (o OID) String() (s string) { for i, v := range o { if i != 0 { s += "." } s += strconv.Itoa(v) } return } func (o OID) Equal(a OID) bool { if len(o) != len(a) { return false } for i := 0; i < len(o); i++ { if o[i] != a[i] { return false } } return true }