From 1df2854b39c97f92d8fc8a77a6f763e5e8752009 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Fri, 14 Apr 2023 13:28:30 +0300 Subject: [PATCH] SHAKE it --- cmd/meta4-create/main.go | 29 ++++++++++++++++++++++++++++- common.go | 2 ++ go.mod | 7 ++++++- go.sum | 5 ++++- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/cmd/meta4-create/main.go b/cmd/meta4-create/main.go index f14ed7c..1c799af 100644 --- a/cmd/meta4-create/main.go +++ b/cmd/meta4-create/main.go @@ -36,6 +36,7 @@ import ( "go.cypherpunks.ru/gogost/v5/gost34112012256" "go.cypherpunks.ru/gogost/v5/gost34112012512" "go.stargrave.org/meta4ra" + "golang.org/x/crypto/sha3" ) type MultiHasher struct { @@ -43,6 +44,8 @@ type MultiHasher struct { sha512h hash.Hash streebog256h hash.Hash streebog512h hash.Hash + shake128h sha3.ShakeHash + shake256h sha3.ShakeHash g sync.WaitGroup } @@ -52,11 +55,13 @@ func NewMultiHasher() *MultiHasher { sha512h: sha512.New(), streebog256h: gost34112012256.New(), streebog512h: gost34112012512.New(), + shake128h: sha3.NewShake128(), + shake256h: sha3.NewShake256(), } } func (h *MultiHasher) Write(p []byte) (n int, err error) { - h.g.Add(4) + h.g.Add(6) go func() { if _, err := h.sha256h.Write(p); err != nil { panic(err) @@ -81,6 +86,18 @@ func (h *MultiHasher) Write(p []byte) (n int, err error) { } h.g.Done() }() + go func() { + if _, err := h.shake128h.Write(p); err != nil { + panic(err) + } + h.g.Done() + }() + go func() { + if _, err := h.shake256h.Write(p); err != nil { + panic(err) + } + h.g.Done() + }() h.g.Wait() return len(p), nil } @@ -107,6 +124,14 @@ func main() { if err != nil { log.Fatalln(err) } + shake128 := make([]byte, 32) + if _, err = io.ReadFull(h.shake128h, shake128); err != nil { + panic(err) + } + shake256 := make([]byte, 64) + if _, err = io.ReadFull(h.shake256h, shake256); err != nil { + panic(err) + } f := meta4ra.File{ Name: path.Base(*fn), Description: *desc, @@ -117,6 +142,8 @@ func main() { {Type: meta4ra.HashSHA512, Hash: hex.EncodeToString(h.sha512h.Sum(nil))}, {Type: meta4ra.HashStreebog256, Hash: hex.EncodeToString(h.streebog256h.Sum(nil))}, {Type: meta4ra.HashStreebog512, Hash: hex.EncodeToString(h.streebog512h.Sum(nil))}, + {Type: meta4ra.HashSHAKE128, Hash: hex.EncodeToString(shake128)}, + {Type: meta4ra.HashSHAKE256, Hash: hex.EncodeToString(shake256)}, }, } if *sig != "" { diff --git a/common.go b/common.go index 3eed481..f8d8a45 100644 --- a/common.go +++ b/common.go @@ -30,6 +30,8 @@ const ( HashSHA512 = "sha-512" HashStreebog256 = "streebog-256" HashStreebog512 = "streebog-512" + HashSHAKE128 = "shake128" + HashSHAKE256 = "shake256" ) type Metalink struct { diff --git a/go.mod b/go.mod index e57add0..19e71d8 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,9 @@ module go.stargrave.org/meta4ra go 1.20 -require go.cypherpunks.ru/gogost/v5 v5.10.0 +require ( + go.cypherpunks.ru/gogost/v5 v5.10.0 + golang.org/x/crypto v0.8.0 +) + +require golang.org/x/sys v0.7.0 // indirect diff --git a/go.sum b/go.sum index 31d7bc6..960d8db 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,6 @@ go.cypherpunks.ru/gogost/v5 v5.10.0 h1:2y0Xu17euJiSNsAwmm7/RQhm3R9oRuS5UeTth0uBt/w= go.cypherpunks.ru/gogost/v5 v5.10.0/go.mod h1:lq0ROvdwQiQGh44ZqcUDTkzRnkeaJFkd8qdJoJIkcKg= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= +golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -- 2.44.0