master
Raw Download raw file
 1package main
 2
 3import (
 4	"crypto/md5"
 5	"flag"
 6	"fmt"
 7	"io"
 8	"os"
 9)
10
11func main() {
12
13	// chose digest function
14	var newHash = md5.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	// md5 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	// md5 files & stdin digest
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}