From faaeb924bfb89d90860f8c38c15fb21b13787e8d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 29 Jun 2015 19:46:32 +0200 Subject: Rudimentar UnmarshalOID --- ber/int.go | 4 ++++ ber/obj.go | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) (limited to 'ber') 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 +} -- cgit v1.2.3