/
hash.go
57 lines (48 loc) · 1.27 KB
/
hash.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//main package has examples shown
// in Hands-On Data Structures and algorithms with Go book
package main
// importing bytes, crpto/sha256, encoding, fmt and log package
import (
"bytes"
"crypto/sha256"
"encoding"
"fmt"
"hash"
"log"
)
//main method
func main() {
const (
example1 = "this is a example "
example2 = "second example"
)
var firstHash hash.Hash
firstHash = sha256.New()
firstHash.Write([]byte(example1))
var marshaler encoding.BinaryMarshaler
var ok bool
marshaler, ok = firstHash.(encoding.BinaryMarshaler)
if !ok {
log.Fatal("first Hash does not implement encoding.BinaryMarshaler")
}
var data []byte
var err error
data, err = marshaler.MarshalBinary()
if err != nil {
log.Fatal("unable to marshal first Hash:", err)
}
var secondHash hash.Hash
secondHash = sha256.New()
var unmarshaler encoding.BinaryUnmarshaler
unmarshaler, ok = secondHash.(encoding.BinaryUnmarshaler)
if !ok {
log.Fatal("second Hash does not implement encoding.BinaryUnmarshaler")
}
if err := unmarshaler.UnmarshalBinary(data); err != nil {
log.Fatal("unable to unmarshal hash:", err)
}
firstHash.Write([]byte(example2))
secondHash.Write([]byte(example2))
fmt.Printf("%x\n", firstHash.Sum(nil))
fmt.Println(bytes.Equal(firstHash.Sum(nil), secondHash.Sum(nil)))
}