go-peer/pkg/crypto/hashing/hashing.go
2026-01-01 17:45:30 +07:00

48 lines
709 B
Go

package hashing
import (
"crypto/sha512"
"sync"
"github.com/number571/go-peer/pkg/encoding"
)
var (
_ IHasher = &sSHA512Hasher{}
)
const (
CHasherSize = sha512.Size384
)
type sSHA512Hasher struct {
fOnce sync.Once
fHash []byte
fHashStr string
}
func NewHasher(pData interface{}) IHasher {
var d []byte
switch x := pData.(type) {
case []byte:
d = x
case string:
d = []byte(x)
default:
panic("invalid type of data")
}
s := sha512.Sum384(d)
return &sSHA512Hasher{fHash: s[:]}
}
func (p *sSHA512Hasher) ToString() string {
p.fOnce.Do(func() {
p.fHashStr = encoding.HexEncode(p.ToBytes())
})
return p.fHashStr
}
func (p *sSHA512Hasher) ToBytes() []byte {
return p.fHash
}