"go.cypherpunks.ru/gogost/v5/gost34112012256"
"go.cypherpunks.ru/gogost/v5/gost34112012512"
"go.stargrave.org/meta4ra"
+ "golang.org/x/crypto/sha3"
)
type MultiHasher struct {
sha512h hash.Hash
streebog256h hash.Hash
streebog512h hash.Hash
+ shake128h sha3.ShakeHash
+ shake256h sha3.ShakeHash
g sync.WaitGroup
}
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)
}
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
}
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,
{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 != "" {
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=