diff --git a/sha512sum/.gitignore b/sha512sum/.gitignore new file mode 100644 index 0000000..8fedf02 --- /dev/null +++ b/sha512sum/.gitignore @@ -0,0 +1,2 @@ +sha512sum +sha512sum.exe diff --git a/sha512sum/Makefile b/sha512sum/Makefile new file mode 100644 index 0000000..bea7546 --- /dev/null +++ b/sha512sum/Makefile @@ -0,0 +1,4 @@ + + +build: + go build . diff --git a/sha512sum/go.mod b/sha512sum/go.mod new file mode 100644 index 0000000..29d28e6 --- /dev/null +++ b/sha512sum/go.mod @@ -0,0 +1,3 @@ +module lcthw.dev/go/go-coreutils/sha512sum + +go 1.25.3 diff --git a/sha512sum/main.go b/sha512sum/main.go new file mode 100644 index 0000000..a6a10a3 --- /dev/null +++ b/sha512sum/main.go @@ -0,0 +1,45 @@ +package main + +import ( + "fmt" + "flag" + "os" + "log" + "crypto/sha512" +) + +type Opts struct { + Inputs []string +} + +func parse_opts() Opts { + var opts Opts + + flag.Parse() + opts.Inputs = flag.Args() + + return opts +} + +func to_hex(hash [sha512.Size]byte) string { + result := "" + + for _, b := range hash { + result += fmt.Sprintf("%x", b) + } + + return result +} + +func main() { + opts := parse_opts() + + for _, fname := range opts.Inputs { + in_data, err := os.ReadFile(fname) + if err != nil { log.Fatal(err) } + + hash := sha512.Sum512(in_data) + + fmt.Println(to_hex(hash), fname) + } +}