| // 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 |
| } |