github.com/ice-blockchain/go/src@v0.0.0-20240403114104-1564d284e521/hash/example_test.go (about) 1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package hash_test 6 7 import ( 8 "bytes" 9 "crypto/sha256" 10 "encoding" 11 "fmt" 12 "log" 13 ) 14 15 func Example_binaryMarshaler() { 16 const ( 17 input1 = "The tunneling gopher digs downwards, " 18 input2 = "unaware of what he will find." 19 ) 20 21 first := sha256.New() 22 first.Write([]byte(input1)) 23 24 marshaler, ok := first.(encoding.BinaryMarshaler) 25 if !ok { 26 log.Fatal("first does not implement encoding.BinaryMarshaler") 27 } 28 state, err := marshaler.MarshalBinary() 29 if err != nil { 30 log.Fatal("unable to marshal hash:", err) 31 } 32 33 second := sha256.New() 34 35 unmarshaler, ok := second.(encoding.BinaryUnmarshaler) 36 if !ok { 37 log.Fatal("second does not implement encoding.BinaryUnmarshaler") 38 } 39 if err := unmarshaler.UnmarshalBinary(state); err != nil { 40 log.Fatal("unable to unmarshal hash:", err) 41 } 42 43 first.Write([]byte(input2)) 44 second.Write([]byte(input2)) 45 46 fmt.Printf("%x\n", first.Sum(nil)) 47 fmt.Println(bytes.Equal(first.Sum(nil), second.Sum(nil))) 48 // Output: 49 // 57d51a066f3a39942649cd9a76c77e97ceab246756ff3888659e6aa5a07f4a52 50 // true 51 }