gitee.com/lh-her-team/common@v1.5.1/opencrypto/gmssl/sm3/sm3.go (about) 1 package sm3 2 3 import ( 4 "hash" 5 6 "gitee.com/lh-her-team/common/opencrypto/gmssl/gmssl" 7 ) 8 9 type digest struct { 10 ctx *gmssl.DigestContext 11 } 12 13 func New() hash.Hash { 14 d := new(digest) 15 ctx, err := gmssl.NewDigestContext("SM3") 16 if err != nil { 17 return nil 18 } 19 d.ctx = ctx 20 return d 21 } 22 23 func (d *digest) BlockSize() int { 24 ret, err := gmssl.GetDigestBlockSize("SM3") 25 if err != nil { 26 return 0 27 } 28 return ret 29 } 30 31 func (d *digest) Size() int { 32 ret, err := gmssl.GetDigestLength("SM3") 33 if err != nil { 34 return 0 35 } 36 return ret 37 } 38 39 func (d *digest) Reset() { 40 _ = d.ctx.Reset() 41 } 42 43 func (d *digest) Write(p []byte) (int, error) { 44 err := d.ctx.Update(p) 45 return len(p), err 46 } 47 48 func (d *digest) Sum(in []byte) []byte { 49 if err := d.ctx.Update(in); err != nil { 50 return nil 51 } 52 ret, err := d.ctx.Final() 53 if err != nil { 54 return nil 55 } 56 return ret 57 }