master
1package main
2
3import (
4 "crypto/sha1"
5 "flag"
6 "fmt"
7 "io"
8 "os"
9)
10
11func main() {
12
13 // choose a digest function
14 var newHash = sha1.New
15
16 // no args, read from stdin
17 if len(os.Args) == 1 {
18 h := newHash()
19 _, err := io.Copy(h, os.Stdin)
20 if err != nil {
21 fmt.Println(err.Error())
22 }
23 fmt.Printf("%x\t%s\n", h.Sum(nil), "-")
24 return
25 }
26
27 // string digest
28 var s = flag.String("s", "", "print the checksum of the given string")
29 flag.Parse()
30 sVal := *s
31 if sVal != "" {
32 fmt.Printf("%x\t\"%s\"\n", newHash().Sum([]byte(sVal)), sVal)
33 return
34 }
35
36 // files & stdin digests
37 for _, filename := range flag.Args() {
38 var (
39 f = os.Stdin
40 h = newHash()
41 err error
42 )
43 if filename != "-" {
44 f, err = os.Open(filename)
45 }
46 if err != nil {
47 fmt.Println(err.Error())
48 continue
49 }
50 _, err = io.Copy(h, f)
51 if err != nil {
52 fmt.Println(err.Error())
53 continue
54 }
55 fmt.Printf("%x\t%s\n", h.Sum(nil), filename)
56 }
57
58}