Files
GmSSL/go/gmssl/sm3/sm3.go
2018-08-04 21:33:00 +08:00

58 lines
803 B
Go

package sm3
import (
"gmssl"
"hash"
)
type digest struct {
ctx *gmssl.DigestContext
}
func New() hash.Hash {
d := new(digest)
ctx, err := gmssl.NewDigestContext("SM3", nil)
if err != nil {
return nil
}
d.ctx = ctx
return d
}
func (d *digest) BlockSize() int {
ret, err := gmssl.GetDigestBlockSize("SM3")
if err != nil {
return 0
}
return ret
}
func (d *digest) Size() int {
ret, err := gmssl.GetDigestLength("SM3")
if err != nil {
return 0
}
return ret
}
func (d *digest) Reset() {
err := d.ctx.Reset()
if err != nil {
// do something?
}
}
func (d *digest) Write(p []byte) (int, error) {
err := d.ctx.Update(p)
return len(p), err
}
func (d *digest) Sum(in []byte) []byte {
d.ctx.Update(in)
ret, err := d.ctx.Final()
if err != nil {
return nil
}
return ret
}