-type MultiHasher struct {
- sha256h hash.Hash
- sha512h hash.Hash
- streebog256h hash.Hash
- streebog512h hash.Hash
- g sync.WaitGroup
-}
-
-func NewMultiHasher() *MultiHasher {
- return &MultiHasher{
- sha256h: sha256.New(),
- sha512h: sha512.New(),
- streebog256h: gost34112012256.New(),
- streebog512h: gost34112012512.New(),
- }
-}
-
-func (h *MultiHasher) Write(p []byte) (n int, err error) {
- h.g.Add(4)
- go func() {
- if _, err := h.sha256h.Write(p); err != nil {
- panic(err)
- }
- h.g.Done()
- }()
- go func() {
- if _, err := h.sha512h.Write(p); err != nil {
- panic(err)
- }
- h.g.Done()
- }()
- go func() {
- if _, err := h.streebog256h.Write(p); err != nil {
- panic(err)
- }
- h.g.Done()
- }()
- go func() {
- if _, err := h.streebog512h.Write(p); err != nil {
- panic(err)
- }
- h.g.Done()
- }()
- h.g.Wait()
- return len(p), nil
-}
-