]> Sergey Matveev's repositories - meta4ra.git/blob - cmd/meta4ra/hash.go
266aa61a59724db4797673acb45dc311b5069ef3
[meta4ra.git] / cmd / meta4ra / hash.go
1 // meta4ra -- Metalink 4.0 utilities
2 // Copyright (C) 2021-2024 Sergey Matveev <stargrave@stargrave.org>
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, version 3 of the License.
7 //
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
16 package main
17
18 import (
19         "bufio"
20         "flag"
21         "fmt"
22         "io"
23         "log"
24         "os"
25         "strings"
26
27         meta4ra "go.stargrave.org/meta4ra/internal"
28 )
29
30 func runHash() {
31         hashes := flag.String("hashes", meta4ra.HashesDefault,
32                 "hash-name:commandline[,...]")
33         flag.Usage = func() {
34                 fmt.Fprintf(flag.CommandLine.Output(),
35                         "Usage: %s [-hashes ...] < data | read hash name\n", os.Args[0])
36                 flag.PrintDefaults()
37                 fmt.Fprint(flag.CommandLine.Output(), `
38 Only the first hash from -hashes will be used.
39 `)
40         }
41         flag.Parse()
42
43         hsh := *hashes
44         if i := strings.Index(hsh, ","); i != -1 {
45                 hsh = hsh[:i]
46         }
47         hasher, err := meta4ra.NewHasher(hsh)
48         if err != nil {
49                 log.Fatalln(err)
50         }
51         if err = hasher.Start(); err != nil {
52                 log.Fatalln(err)
53         }
54         if _, err = io.Copy(hasher, bufio.NewReaderSize(
55                 os.Stdin, meta4ra.BufLen)); err != nil {
56                 log.Fatalln(err)
57         }
58         sums, err := hasher.Sums()
59         if err != nil {
60                 log.Fatalln(err)
61         }
62         fmt.Println(sums[0].Hash, sums[0].Type)
63 }