]> Cypherpunks repositories - gostls13.git/commitdiff
hash: add marshaling, unmarshaling example
authorTim Cooper <tim.cooper@layeh.com>
Fri, 3 Nov 2017 23:17:08 +0000 (20:17 -0300)
committerIan Lance Taylor <iant@golang.org>
Sat, 4 Nov 2017 03:47:34 +0000 (03:47 +0000)
Example usage of functionality implemented in CL 66710.

Change-Id: I87d6e4d2fb7a60e4ba1e6ef02715480eb7e8f8bd
Reviewed-on: https://go-review.googlesource.com/76011
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/hash/example_test.go [new file with mode: 0644]

diff --git a/src/hash/example_test.go b/src/hash/example_test.go
new file mode 100644 (file)
index 0000000..f07b9aa
--- /dev/null
@@ -0,0 +1,51 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package hash_test
+
+import (
+       "bytes"
+       "crypto/sha256"
+       "encoding"
+       "fmt"
+       "log"
+)
+
+func Example_binaryMarshaler() {
+       const (
+               input1 = "The tunneling gopher digs downwards, "
+               input2 = "unaware of what he will find."
+       )
+
+       first := sha256.New()
+       first.Write([]byte(input1))
+
+       marshaler, ok := first.(encoding.BinaryMarshaler)
+       if !ok {
+               log.Fatal("first does not implement encoding.BinaryMarshaler")
+       }
+       state, err := marshaler.MarshalBinary()
+       if err != nil {
+               log.Fatal("unable to marshal hash:", err)
+       }
+
+       second := sha256.New()
+
+       unmarshaler, ok := second.(encoding.BinaryUnmarshaler)
+       if !ok {
+               log.Fatal("second does not implement encoding.BinaryUnmarshaler")
+       }
+       if err := unmarshaler.UnmarshalBinary(state); err != nil {
+               log.Fatal("unable to unmarshal hash:", err)
+       }
+
+       first.Write([]byte(input2))
+       second.Write([]byte(input2))
+
+       fmt.Printf("%x\n", first.Sum(nil))
+       fmt.Println(bytes.Equal(first.Sum(nil), second.Sum(nil)))
+       // Output:
+       // 57d51a066f3a39942649cd9a76c77e97ceab246756ff3888659e6aa5a07f4a52
+       // true
+}