Home | History | Annotate | Download | only in hash
      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 }
     52