diff --git a/types/wgkey/key.go b/types/wgkey/key.go index 668ceee85..fe757083a 100644 --- a/types/wgkey/key.go +++ b/types/wgkey/key.go @@ -106,11 +106,10 @@ func (k *Key) UnmarshalJSON(b []byte) error { return errors.New("wgkey.Key: UnmarshalJSON not given a string") } b = b[1 : len(b)-1] - key, err := ParseHex(string(b)) - if err != nil { - return fmt.Errorf("wgkey.Key: UnmarshalJSON: %v", err) + if len(b) != 2*Size { + return fmt.Errorf("wgkey.Key: UnmarshalJSON input wrong size: %d", len(b)) } - copy(k[:], key[:]) + hex.Decode(k[:], b) return nil } diff --git a/types/wgkey/key_test.go b/types/wgkey/key_test.go index ba3e4166f..1c4c2da59 100644 --- a/types/wgkey/key_test.go +++ b/types/wgkey/key_test.go @@ -156,3 +156,18 @@ func BenchmarkMarshalJSON(b *testing.B) { } } } + +func BenchmarkUnmarshalJSON(b *testing.B) { + b.ReportAllocs() + var k Key + buf, err := k.MarshalJSON() + if err != nil { + b.Fatal(err) + } + for i := 0; i < b.N; i++ { + err := k.UnmarshalJSON(buf) + if err != nil { + b.Fatal(err) + } + } +}