]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/asn1: document support for *big.Int
authorFlorian Weimer <fw@deneb.enyo.de>
Sun, 8 Jan 2012 15:02:23 +0000 (10:02 -0500)
committerAdam Langley <agl@golang.org>
Sun, 8 Jan 2012 15:02:23 +0000 (10:02 -0500)
        Also add basic tests.

R=golang-dev
CC=golang-dev
https://golang.org/cl/5533045

src/pkg/encoding/asn1/asn1.go
src/pkg/encoding/asn1/asn1_test.go
src/pkg/encoding/asn1/marshal_test.go

index 22a0dde0da43d8e1d28a575d8429d3dbeaecbe62..4d1ae38c4edaa1ce4203da112dd81aa287d92b71 100644 (file)
@@ -786,7 +786,8 @@ func setDefaultValue(v reflect.Value, params fieldParameters) (ok bool) {
 // Because Unmarshal uses the reflect package, the structs
 // being written to must use upper case field names.
 //
-// An ASN.1 INTEGER can be written to an int, int32 or int64.
+// An ASN.1 INTEGER can be written to an int, int32, int64,
+// or *big.Int (from the math/big package).
 // If the encoded value does not fit in the Go type,
 // Unmarshal returns a parse error.
 //
index 09f94139f906218200b69f4e6cceef1c0c5647bf..92c9eb62d2c6b373bbdb94e233cf07254e7abc6d 100644 (file)
@@ -6,6 +6,7 @@ package asn1
 
 import (
        "bytes"
+       "math/big"
        "reflect"
        "testing"
        "time"
@@ -351,6 +352,10 @@ type TestElementsAfterString struct {
        A, B int
 }
 
+type TestBigInt struct {
+       X *big.Int
+}
+
 var unmarshalTestData = []struct {
        in  []byte
        out interface{}
@@ -369,6 +374,7 @@ var unmarshalTestData = []struct {
        {[]byte{0x01, 0x01, 0x00}, newBool(false)},
        {[]byte{0x01, 0x01, 0x01}, newBool(true)},
        {[]byte{0x30, 0x0b, 0x13, 0x03, 0x66, 0x6f, 0x6f, 0x02, 0x01, 0x22, 0x02, 0x01, 0x33}, &TestElementsAfterString{"foo", 0x22, 0x33}},
+       {[]byte{0x30, 0x05, 0x02, 0x03, 0x12, 0x34, 0x56}, &TestBigInt{big.NewInt(0x123456)}},
 }
 
 func TestUnmarshal(t *testing.T) {
index d05b5d8d4e92e398bd359b4258410d8f00a56abf..a7447f978127c3362c1cf4691f63d6a63abf84d6 100644 (file)
@@ -7,6 +7,7 @@ package asn1
 import (
        "bytes"
        "encoding/hex"
+       "math/big"
        "testing"
        "time"
 )
@@ -20,6 +21,10 @@ type twoIntStruct struct {
        B int
 }
 
+type bigIntStruct struct {
+       A *big.Int
+}
+
 type nestedStruct struct {
        A intStruct
 }
@@ -65,6 +70,7 @@ var marshalTests = []marshalTest{
        {-128, "020180"},
        {-129, "0202ff7f"},
        {intStruct{64}, "3003020140"},
+       {bigIntStruct{big.NewInt(0x123456)}, "30050203123456"},
        {twoIntStruct{64, 65}, "3006020140020141"},
        {nestedStruct{intStruct{127}}, "3005300302017f"},
        {[]byte{1, 2, 3}, "0403010203"},