From 6905df6e3b4f00786311a07f30ad32c9a9de7213 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 30 Jun 2015 19:15:48 +0200 Subject: Multi-byte indentifier --- ber/class.go | 14 +++++++++++--- ber/class_test.go | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'ber') diff --git a/ber/class.go b/ber/class.go index 04a796a..f2915fe 100644 --- a/ber/class.go +++ b/ber/class.go @@ -34,7 +34,7 @@ var kindNames = map[Kind]string{ func (k Kind) String() string { return kindNames[k] } -type Tag byte +type Tag int const ( EOT Tag = iota @@ -105,6 +105,14 @@ var tagNames = map[Tag]string{ func (t Tag) String() string { return tagNames[t] } -func Ident(b byte) (Class, Kind, Tag) { - return Class(b) & classMask, Kind(b) & kindMask, Tag(b) & tagMask +func Ident(b []byte) (Class, Kind, Tag, int) { + var d, n int + c := Class(b[0]) & classMask + k := Kind(b[0]) & kindMask + t := Tag(b[0]) & tagMask + if t == tagMask { + d, n = debase128(b[1:]) + t = Tag(d) + } + return c, k, t, n + 1 } diff --git a/ber/class_test.go b/ber/class_test.go index 9b91981..d56cd87 100644 --- a/ber/class_test.go +++ b/ber/class_test.go @@ -10,7 +10,7 @@ var berTestData = []byte{ func ExampleIdent() { for _, test := range berTestData { - c, k, t := Ident(test) + c, k, t, _ := Ident([]byte{test}) if c == Universal { fmt.Printf("%#x: %v %v %v\n", test, c, k, t) -- cgit v1.2.3