Skip to content

Commit

Permalink
encoding/asn1: add MarshalWithParams
Browse files Browse the repository at this point in the history
Fixes #18873

Change-Id: Idb9750f739f91ebca34efcbc177254d412b4d90d
Reviewed-on: https://go-review.googlesource.com/44111
Reviewed-by: Adam Langley <agl@golang.org>
Run-TryBot: Adam Langley <agl@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
  • Loading branch information
hirochachacha authored and bradfitz committed Nov 16, 2017
1 parent 6a3d4be commit c32626a
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/encoding/asn1/marshal.go
Original file line number Diff line number Diff line change
Expand Up @@ -658,7 +658,13 @@ func makeField(v reflect.Value, params fieldParameters) (e encoder, err error) {
// utc: causes time.Time to be marshaled as ASN.1, UTCTime values
// generalized: causes time.Time to be marshaled as ASN.1, GeneralizedTime values
func Marshal(val interface{}) ([]byte, error) {
e, err := makeField(reflect.ValueOf(val), fieldParameters{})
return MarshalWithParams(val, "")
}

// MarshalWithParams allows field parameters to be specified for the
// top-level element. The form of the params is the same as the field tags.
func MarshalWithParams(val interface{}, params string) ([]byte, error) {
e, err := makeField(reflect.ValueOf(val), parseFieldParameters(params))
if err != nil {
return nil, err
}
Expand Down
25 changes: 25 additions & 0 deletions src/encoding/asn1/marshal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,31 @@ func TestMarshal(t *testing.T) {
}
}

type marshalWithParamsTest struct {
in interface{}
params string
out string // hex encoded
}

var marshalWithParamsTests = []marshalWithParamsTest{
{intStruct{10}, "set", "310302010a"},
{intStruct{10}, "application", "600302010a"},
}

func TestMarshalWithParams(t *testing.T) {
for i, test := range marshalWithParamsTests {
data, err := MarshalWithParams(test.in, test.params)
if err != nil {
t.Errorf("#%d failed: %s", i, err)
}
out, _ := hex.DecodeString(test.out)
if !bytes.Equal(out, data) {
t.Errorf("#%d got: %x want %x\n\t%q\n\t%q", i, data, out, data, out)

}
}
}

type marshalErrTest struct {
in interface{}
err string
Expand Down

0 comments on commit c32626a

Please sign in to comment.