aboutsummaryrefslogtreecommitdiff
path: root/ber/obj.go
diff options
context:
space:
mode:
Diffstat (limited to 'ber/obj.go')
-rw-r--r--ber/obj.go42
1 files changed, 29 insertions, 13 deletions
diff --git a/ber/obj.go b/ber/obj.go
index c92e657..fa19891 100644
--- a/ber/obj.go
+++ b/ber/obj.go
@@ -4,7 +4,7 @@ import "strconv"
type OID []int
-func marshalOID(obj OID) (b []byte) {
+func MarshalOID(obj OID) (b []byte) {
if len(obj) < 2 || obj[0] > 2 {
return []byte{}
}
@@ -19,23 +19,27 @@ func marshalOID(obj OID) (b []byte) {
return b
}
-func unmarshalOID(b []byte) OID {
- return OID{}
-}
-
func (o OID) Marshal() ([]byte, error) {
- b := marshalOID(o)
+ b := MarshalOID(o)
return b, nil
}
func UnmarshalOID(b []byte) (o OID) {
- o = append(o, int(b[0])/40)
- o = append(o, int(b[0])%40)
- b = b[2:]
- for i := 0; i < len(b); {
- d, n := debase128(b[i:])
- o = append(o, d)
- i += n
+ 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
}
@@ -49,3 +53,15 @@ func (o OID) String() (s string) {
}
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
+}