aboutsummaryrefslogtreecommitdiff
path: root/ber
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-06-29 19:46:32 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-06-29 19:46:32 +0200
commitfaaeb924bfb89d90860f8c38c15fb21b13787e8d (patch)
treebc8cf900578b9cedb660e449dec4c06beb0b1500 /ber
parent33ff8c56d49f9dcd37f0b68511189a5db831a284 (diff)
Rudimentar UnmarshalOID
Diffstat (limited to 'ber')
-rw-r--r--ber/int.go4
-rw-r--r--ber/obj.go36
2 files changed, 38 insertions, 2 deletions
diff --git a/ber/int.go b/ber/int.go
index 85d99e8..a8fe19c 100644
--- a/ber/int.go
+++ b/ber/int.go
@@ -44,3 +44,7 @@ func marshalInt(i int64) (b []byte) {
}
return
}
+
+func UnmarshalInt(b []byte) int {
+ return int(unmarshalInt(b))
+}
diff --git a/ber/obj.go b/ber/obj.go
index a03d198..8823667 100644
--- a/ber/obj.go
+++ b/ber/obj.go
@@ -1,5 +1,7 @@
package ber
+import "strconv"
+
type OID []int
func base128(n int) (b []byte) {
@@ -21,8 +23,16 @@ func base128(n int) (b []byte) {
return
}
-func debase128(b []byte) int {
- return 0
+func debase128(b []byte) (i, n int) {
+ for _, v := range b {
+ i <<= 7
+ i |= int(v & 0x7f)
+ n++
+ if v & 0x80 == 0 {
+ return
+ }
+ }
+ return
}
func marshalOID(obj OID) (b []byte) {
@@ -48,3 +58,25 @@ func (o OID) Marshal() ([]byte, error) {
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
+ }
+ return
+}
+
+func (o OID) String() (s string) {
+ for i, v := range o {
+ if i != 0 {
+ s += "."
+ }
+ s += strconv.Itoa(v)
+ }
+ return
+}