]> Cypherpunks.ru repositories - nncp.git/blobdiff - src/cmd/nncp-hash/main.go
Raise copyright years
[nncp.git] / src / cmd / nncp-hash / main.go
index 8b90ab9c0cc5eda0dbf6e1b3bcf309f96fc6c4f7..de49971d03b2d2d48d976f81fec0ea0e93e14d23 100644 (file)
@@ -1,6 +1,6 @@
 /*
 NNCP -- Node to Node copy, utilities for store-and-forward data exchange
-Copyright (C) 2016-2021 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2016-2022 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
@@ -28,7 +28,7 @@ import (
        "os"
        "sync"
 
-       "go.cypherpunks.ru/nncp/v7"
+       "go.cypherpunks.ru/nncp/v8"
 )
 
 func usage() {
@@ -76,64 +76,71 @@ func main() {
                }
                size = fi.Size()
        }
-       var mth nncp.MTH
-       if *forceFat {
-               mth = nncp.MTHFatNew(size, int64(*seek))
-       } else {
-               mth = nncp.MTHNew(size, int64(*seek))
-       }
-       var debugger sync.WaitGroup
+
        if *debug {
                fmt.Println("Leaf BLAKE3 key:", hex.EncodeToString(nncp.MTHLeafKey[:]))
                fmt.Println("Node BLAKE3 key:", hex.EncodeToString(nncp.MTHNodeKey[:]))
-               events := mth.Events()
+       }
+
+       var debugger sync.WaitGroup
+       startDebug := func(events chan nncp.MTHEvent) {
                debugger.Add(1)
                go func() {
                        for e := range events {
-                               var t string
-                               switch e.Type {
-                               case nncp.MTHEventAppend:
-                                       t = "Add"
-                               case nncp.MTHEventPrepend:
-                                       t = "Pre"
-                               case nncp.MTHEventFold:
-                                       t = "Fold"
-                               }
-                               fmt.Printf(
-                                       "%s\t%03d\t%06d\t%s\n",
-                                       t, e.Level, e.Ctr, hex.EncodeToString(e.Hsh),
-                               )
+                               fmt.Println(e.String())
                        }
                        debugger.Done()
                }()
        }
-       if *seek != 0 {
-               if *fn == "" {
-                       log.Fatalln("-file is required with -seek")
+       copier := func(w io.Writer) error {
+               _, err := nncp.CopyProgressed(
+                       w, bufio.NewReaderSize(fd, nncp.MTHBlockSize), "hash",
+                       nncp.LEs{{K: "Pkt", V: *fn}, {K: "FullSize", V: size - int64(*seek)}},
+                       *showPrgrs,
+               )
+               return err
+       }
+
+       var sum []byte
+       if *forceFat {
+               mth := nncp.MTHFatNew()
+               if *debug {
+                       startDebug(mth.Events())
+
                }
-               if _, err = fd.Seek(int64(*seek), io.SeekStart); err != nil {
+               if err = copier(mth); err != nil {
                        log.Fatalln(err)
                }
-       }
-       if _, err = nncp.CopyProgressed(
-               mth, bufio.NewReaderSize(fd, nncp.MTHBlockSize),
-               "hash", nncp.LEs{{K: "Pkt", V: *fn}, {K: "FullSize", V: size - int64(*seek)}},
-               *showPrgrs,
-       ); err != nil {
-               log.Fatalln(err)
-       }
-       if *seek != 0 {
-               if _, err = fd.Seek(0, io.SeekStart); err != nil {
-                       log.Fatalln(err)
+               sum = mth.Sum(nil)
+       } else {
+               mth := nncp.MTHSeqNew(size, int64(*seek))
+               if *debug {
+                       startDebug(mth.Events())
                }
-               if *showPrgrs {
-                       mth.SetPktName(*fn)
+               if *seek != 0 {
+                       if *fn == "" {
+                               log.Fatalln("-file is required with -seek")
+                       }
+                       if _, err = fd.Seek(int64(*seek), io.SeekStart); err != nil {
+                               log.Fatalln(err)
+                       }
                }
-               if _, err = mth.PrependFrom(bufio.NewReaderSize(fd, nncp.MTHBlockSize)); err != nil {
+               if err = copier(mth); err != nil {
                        log.Fatalln(err)
                }
+               if *seek != 0 {
+                       if _, err = fd.Seek(0, io.SeekStart); err != nil {
+                               log.Fatalln(err)
+                       }
+                       if _, err = mth.PreaddFrom(
+                               bufio.NewReaderSize(fd, nncp.MTHBlockSize),
+                               *fn, *showPrgrs,
+                       ); err != nil {
+                               log.Fatalln(err)
+                       }
+               }
+               sum = mth.Sum(nil)
        }
-       sum := mth.Sum(nil)
        debugger.Wait()
        fmt.Println(hex.EncodeToString(sum))
 }