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  }