aboutsummaryrefslogtreecommitdiff
path: root/ber
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-08-09 13:47:34 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-08-09 13:47:34 +0200
commit993e9c8138699a08379711d6e071e9365b6edaf0 (patch)
treee1523d0073548ed225e95b1ee02506e0f0ea0507 /ber
parentbd2a9d7540b13f6a3edc748d5e91e267b1b03d41 (diff)
Add len marshaling
Diffstat (limited to 'ber')
-rw-r--r--ber/len.go12
-rw-r--r--ber/len_test.go9
2 files changed, 20 insertions, 1 deletions
diff --git a/ber/len.go b/ber/len.go
index 5e0232c..dffb1df 100644
--- a/ber/len.go
+++ b/ber/len.go
@@ -10,3 +10,15 @@ func UnmarshalLen(b []byte) (i, n int) {
}
return i, n + 1
}
+
+func MarshalLen(i int) (b []byte) {
+ if i < 0x80 {
+ b = append(b, byte(i))
+ return
+ }
+ for n := intLen(i); n > 0; n-- {
+ b = append(b, byte(i>>uint((n-1)*8)))
+ }
+ b = append([]byte{byte(len(b) | 0x80)}, b...)
+ return
+}
diff --git a/ber/len_test.go b/ber/len_test.go
index aeda5f9..ea40453 100644
--- a/ber/len_test.go
+++ b/ber/len_test.go
@@ -1,6 +1,9 @@
package ber
-import "testing"
+import (
+ "bytes"
+ "testing"
+)
type lenTest struct {
in int
@@ -17,6 +20,10 @@ var lenTestData = []lenTest{
func TestLen(t *testing.T) {
for _, test := range lenTestData {
+ a := MarshalLen(test.in)
+ if !bytes.Equal(a, test.out) {
+ t.Error(test.in, "expected", test.out, "got", a)
+ }
n, _ := UnmarshalLen(test.out)
if n != test.in {
t.Error(test.out, "expected", test.in, "got", n)