git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/object/transformer/hasher.go (about)

     1  package transformer
     2  
     3  import (
     4  	"crypto/sha256"
     5  	"hash"
     6  
     7  	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum"
     8  	objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
     9  	"git.frostfs.info/TrueCloudLab/tzhash/tz"
    10  )
    11  
    12  type payloadChecksumHasher struct {
    13  	hasher hash.Hash
    14  	typ    checksum.Type
    15  }
    16  
    17  func (h payloadChecksumHasher) writeChecksum(obj *objectSDK.Object) {
    18  	switch h.typ {
    19  	case checksum.SHA256:
    20  		csSHA := [sha256.Size]byte{}
    21  		h.hasher.Sum(csSHA[:0])
    22  
    23  		var cs checksum.Checksum
    24  		cs.SetSHA256(csSHA)
    25  
    26  		obj.SetPayloadChecksum(cs)
    27  	case checksum.TZ:
    28  		csTZ := [tz.Size]byte{}
    29  		h.hasher.Sum(csTZ[:0])
    30  
    31  		var cs checksum.Checksum
    32  		cs.SetTillichZemor(csTZ)
    33  
    34  		obj.SetPayloadHomomorphicHash(cs)
    35  	default:
    36  		panic("unreachable")
    37  	}
    38  }