--- /dev/null
+// meta4ra -- Metalink 4.0 utilities
+// Copyright (C) 2021-2024 Sergey Matveev <stargrave@stargrave.org>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 3 of the License.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+package main
+
+import (
+ "bufio"
+ "flag"
+ "fmt"
+ "io"
+ "log"
+ "os"
+ "strings"
+
+ meta4ra "go.stargrave.org/meta4ra/internal"
+)
+
+func runHash() {
+ hashes := flag.String("hashes", meta4ra.HashesDefault,
+ "hash-name:commandline[,...]")
+ flag.Usage = func() {
+ fmt.Fprintf(flag.CommandLine.Output(),
+ "Usage: %s [-hashes ...] < data | read hash name\n", os.Args[0])
+ flag.PrintDefaults()
+ fmt.Fprint(flag.CommandLine.Output(), `
+Only the first hash from -hashes will be used.
+`)
+ }
+ flag.Parse()
+
+ hsh := *hashes
+ if i := strings.Index(hsh, ","); i != -1 {
+ hsh = hsh[:i]
+ }
+ hasher, err := meta4ra.NewHasher(hsh)
+ if err != nil {
+ log.Fatalln(err)
+ }
+ if err = hasher.Start(); err != nil {
+ log.Fatalln(err)
+ }
+ if _, err = io.Copy(hasher, bufio.NewReaderSize(
+ os.Stdin, meta4ra.BufLen)); err != nil {
+ log.Fatalln(err)
+ }
+ sums, err := hasher.Sums()
+ if err != nil {
+ log.Fatalln(err)
+ }
+ fmt.Println(sums[0].Hash, sums[0].Type)
+}