X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcmd%2Fnncp-hash%2Fmain.go;h=de49971d03b2d2d48d976f81fec0ea0e93e14d23;hb=0367cce2741e1ce6a89a49fd5c4e9df6005c9744;hp=8b90ab9c0cc5eda0dbf6e1b3bcf309f96fc6c4f7;hpb=4859da5e7e24cb8ba262d8e5d793b9070c2d00b6;p=nncp.git diff --git a/src/cmd/nncp-hash/main.go b/src/cmd/nncp-hash/main.go index 8b90ab9..de49971 100644 --- a/src/cmd/nncp-hash/main.go +++ b/src/cmd/nncp-hash/main.go @@ -1,6 +1,6 @@ /* NNCP -- Node to Node copy, utilities for store-and-forward data exchange -Copyright (C) 2016-2021 Sergey Matveev +Copyright (C) 2016-2022 Sergey Matveev 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)) }