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