aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/hash/hash.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/hash/hash.go')
-rw-r--r--pkg/hash/hash.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/pkg/hash/hash.go b/pkg/hash/hash.go
new file mode 100644
index 000000000..4c45ba6e6
--- /dev/null
+++ b/pkg/hash/hash.go
@@ -0,0 +1,40 @@
+// Copyright 2016 syzkaller project authors. All rights reserved.
+// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+package hash
+
+import (
+ "crypto/sha1"
+ "encoding/hex"
+ "fmt"
+)
+
+type Sig [sha1.Size]byte
+
+func Hash(data []byte) Sig {
+ return Sig(sha1.Sum(data))
+}
+
+func String(data []byte) string {
+ sig := Hash(data)
+ return sig.String()
+}
+
+func (sig *Sig) String() string {
+ return hex.EncodeToString((*sig)[:])
+}
+
+func FromString(str string) (Sig, error) {
+ bin, err := hex.DecodeString(str)
+ if err != nil {
+ return Sig{}, fmt.Errorf("failed to decode sig '%v': %v", str, err)
+ }
+ if len(bin) != len(Sig{}) {
+ return Sig{}, fmt.Errorf("failed to decode sig '%v': bad len", str)
+ }
+ var sig Sig
+ for i, v := range bin {
+ sig[i] = v
+ }
+ return sig, err
+}