2024-03-10 13:04:26 +08:00
|
|
|
package sm3
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"hash"
|
2026-03-14 15:39:21 +08:00
|
|
|
|
|
|
|
|
gmsm3 "github.com/emmansun/gmsm/sm3"
|
2024-03-10 13:04:26 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type SM3 struct {
|
2026-03-14 15:39:21 +08:00
|
|
|
h hash.Hash
|
2024-03-10 13:04:26 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func New() hash.Hash {
|
2026-03-14 15:39:21 +08:00
|
|
|
s := &SM3{}
|
|
|
|
|
s.Reset()
|
|
|
|
|
return s
|
2024-03-10 13:04:26 +08:00
|
|
|
}
|
|
|
|
|
|
2026-03-14 15:39:21 +08:00
|
|
|
func (sm3 *SM3) BlockSize() int { return gmsm3.BlockSize }
|
2024-03-10 13:04:26 +08:00
|
|
|
|
2026-03-14 15:39:21 +08:00
|
|
|
func (sm3 *SM3) Size() int { return gmsm3.Size }
|
2024-03-10 13:04:26 +08:00
|
|
|
|
|
|
|
|
func (sm3 *SM3) Reset() {
|
2026-03-14 15:39:21 +08:00
|
|
|
sm3.h = gmsm3.New()
|
2024-03-10 13:04:26 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (sm3 *SM3) Write(p []byte) (int, error) {
|
2026-03-14 15:39:21 +08:00
|
|
|
if sm3.h == nil {
|
|
|
|
|
sm3.Reset()
|
|
|
|
|
}
|
|
|
|
|
return sm3.h.Write(p)
|
2024-03-10 13:04:26 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (sm3 *SM3) Sum(in []byte) []byte {
|
2026-03-14 15:39:21 +08:00
|
|
|
if sm3.h == nil {
|
|
|
|
|
sm3.Reset()
|
2024-03-10 13:04:26 +08:00
|
|
|
}
|
2026-03-14 15:39:21 +08:00
|
|
|
return sm3.h.Sum(in)
|
2024-03-10 13:04:26 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Sm3Sum(data []byte) []byte {
|
2026-03-14 15:39:21 +08:00
|
|
|
sum := gmsm3.Sum(data)
|
|
|
|
|
out := make([]byte, len(sum))
|
|
|
|
|
copy(out, sum[:])
|
|
|
|
|
return out
|
2024-03-10 13:04:26 +08:00
|
|
|
}
|