forked from TrueCloudLab/frostfs-sdk-go
[#170] checksum: Do not use pointers
Do not return pointers from getters. Do not pass pointers to the methods that does not modify the checksum. Add `Empty` method. Signed-off-by: Pavel Karpy <carpawell@nspcc.ru>
This commit is contained in:
parent
fd13e61266
commit
caa055236b
7 changed files with 53 additions and 35 deletions
|
@ -8,7 +8,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// Checksum returns random checksum.Checksum.
|
// Checksum returns random checksum.Checksum.
|
||||||
func Checksum() *checksum.Checksum {
|
func Checksum() checksum.Checksum {
|
||||||
var cs [sha256.Size]byte
|
var cs [sha256.Size]byte
|
||||||
|
|
||||||
rand.Read(cs[:])
|
rand.Read(cs[:])
|
||||||
|
@ -17,5 +17,5 @@ func Checksum() *checksum.Checksum {
|
||||||
|
|
||||||
x.SetSHA256(cs)
|
x.SetSHA256(cs)
|
||||||
|
|
||||||
return &x
|
return x
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,7 +137,7 @@ func (r *Record) AddObjectPayloadLengthFilter(m Match, size uint64) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddObjectPayloadHashFilter adds filter by object payload hash value.
|
// AddObjectPayloadHashFilter adds filter by object payload hash value.
|
||||||
func (r *Record) AddObjectPayloadHashFilter(m Match, h *checksum.Checksum) {
|
func (r *Record) AddObjectPayloadHashFilter(m Match, h checksum.Checksum) {
|
||||||
r.addObjectReservedFilter(m, fKeyObjPayloadHash, h)
|
r.addObjectReservedFilter(m, fKeyObjPayloadHash, h)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -147,7 +147,7 @@ func (r *Record) AddObjectTypeFilter(m Match, t object.Type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddObjectHomomorphicHashFilter adds filter by object payload homomorphic hash value.
|
// AddObjectHomomorphicHashFilter adds filter by object payload homomorphic hash value.
|
||||||
func (r *Record) AddObjectHomomorphicHashFilter(m Match, h *checksum.Checksum) {
|
func (r *Record) AddObjectHomomorphicHashFilter(m Match, h checksum.Checksum) {
|
||||||
r.addObjectReservedFilter(m, fKeyObjHomomorphicHash, h)
|
r.addObjectReservedFilter(m, fKeyObjHomomorphicHash, h)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,11 +20,11 @@ var errIncorrectID = errors.New("incorrect object identifier")
|
||||||
|
|
||||||
// CalculatePayloadChecksum calculates and returns checksum of
|
// CalculatePayloadChecksum calculates and returns checksum of
|
||||||
// object payload bytes.
|
// object payload bytes.
|
||||||
func CalculatePayloadChecksum(payload []byte) *checksum.Checksum {
|
func CalculatePayloadChecksum(payload []byte) checksum.Checksum {
|
||||||
var res checksum.Checksum
|
var res checksum.Checksum
|
||||||
checksum.Calculate(&res, checksum.SHA256, payload)
|
checksum.Calculate(&res, checksum.SHA256, payload)
|
||||||
|
|
||||||
return &res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
// CalculateAndSetPayloadChecksum calculates checksum of current
|
// CalculateAndSetPayloadChecksum calculates checksum of current
|
||||||
|
|
|
@ -200,19 +200,26 @@ func (o *Object) SetCreationEpoch(v uint64) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// PayloadChecksum returns checksum of the object payload.
|
// PayloadChecksum returns checksum of the object payload.
|
||||||
func (o *Object) PayloadChecksum() *checksum.Checksum {
|
//
|
||||||
|
// Zero Object has zero checksum.
|
||||||
|
//
|
||||||
|
// See also SetPayloadChecksum.
|
||||||
|
func (o *Object) PayloadChecksum() checksum.Checksum {
|
||||||
var v checksum.Checksum
|
var v checksum.Checksum
|
||||||
v.ReadFromV2(
|
v2 := (*object.Object)(o)
|
||||||
*(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetPayloadHash(),
|
|
||||||
)
|
|
||||||
|
|
||||||
return &v
|
if hash := v2.GetHeader().GetPayloadHash(); hash != nil {
|
||||||
|
v.ReadFromV2(*hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPayloadChecksum sets checksum of the object payload.
|
// SetPayloadChecksum sets checksum of the object payload.
|
||||||
func (o *Object) SetPayloadChecksum(v *checksum.Checksum) {
|
// Checksum must not be nil.
|
||||||
|
//
|
||||||
|
// See also PayloadChecksum.
|
||||||
|
func (o *Object) SetPayloadChecksum(v checksum.Checksum) {
|
||||||
var v2 refs.Checksum
|
var v2 refs.Checksum
|
||||||
v.WriteToV2(&v2)
|
v.WriteToV2(&v2)
|
||||||
|
|
||||||
|
@ -222,19 +229,26 @@ func (o *Object) SetPayloadChecksum(v *checksum.Checksum) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// PayloadHomomorphicHash returns homomorphic hash of the object payload.
|
// PayloadHomomorphicHash returns homomorphic hash of the object payload.
|
||||||
func (o *Object) PayloadHomomorphicHash() *checksum.Checksum {
|
//
|
||||||
|
// Zero Object has zero checksum.
|
||||||
|
//
|
||||||
|
// See also SetPayloadHomomorphicHash.
|
||||||
|
func (o *Object) PayloadHomomorphicHash() checksum.Checksum {
|
||||||
var v checksum.Checksum
|
var v checksum.Checksum
|
||||||
v.ReadFromV2(
|
v2 := (*object.Object)(o)
|
||||||
*(*object.Object)(o).
|
|
||||||
GetHeader().
|
|
||||||
GetHomomorphicHash(),
|
|
||||||
)
|
|
||||||
|
|
||||||
return &v
|
if hash := v2.GetHeader().GetHomomorphicHash(); hash != nil {
|
||||||
|
v.ReadFromV2(*hash)
|
||||||
|
}
|
||||||
|
|
||||||
|
return v
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPayloadHomomorphicHash sets homomorphic hash of the object payload.
|
// SetPayloadHomomorphicHash sets homomorphic hash of the object payload.
|
||||||
func (o *Object) SetPayloadHomomorphicHash(v *checksum.Checksum) {
|
// Checksum must not be nil.
|
||||||
|
//
|
||||||
|
// See also PayloadHomomorphicHash.
|
||||||
|
func (o *Object) SetPayloadHomomorphicHash(v checksum.Checksum) {
|
||||||
var v2 refs.Checksum
|
var v2 refs.Checksum
|
||||||
v.WriteToV2(&v2)
|
v.WriteToV2(&v2)
|
||||||
|
|
||||||
|
|
|
@ -125,9 +125,9 @@ func TestObject_SetPayloadChecksum(t *testing.T) {
|
||||||
var cs checksum.Checksum
|
var cs checksum.Checksum
|
||||||
cs.SetSHA256(randSHA256Checksum(t))
|
cs.SetSHA256(randSHA256Checksum(t))
|
||||||
|
|
||||||
obj.SetPayloadChecksum(&cs)
|
obj.SetPayloadChecksum(cs)
|
||||||
|
|
||||||
require.Equal(t, &cs, obj.PayloadChecksum())
|
require.Equal(t, cs, obj.PayloadChecksum())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestObject_SetPayloadHomomorphicHash(t *testing.T) {
|
func TestObject_SetPayloadHomomorphicHash(t *testing.T) {
|
||||||
|
@ -136,9 +136,9 @@ func TestObject_SetPayloadHomomorphicHash(t *testing.T) {
|
||||||
var cs checksum.Checksum
|
var cs checksum.Checksum
|
||||||
cs.SetTillichZemor(randTZChecksum(t))
|
cs.SetTillichZemor(randTZChecksum(t))
|
||||||
|
|
||||||
obj.SetPayloadHomomorphicHash(&cs)
|
obj.SetPayloadHomomorphicHash(cs)
|
||||||
|
|
||||||
require.Equal(t, &cs, obj.PayloadHomomorphicHash())
|
require.Equal(t, cs, obj.PayloadHomomorphicHash())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestObject_SetAttributes(t *testing.T) {
|
func TestObject_SetAttributes(t *testing.T) {
|
||||||
|
|
|
@ -42,20 +42,24 @@ func (sg *StorageGroup) SetValidationDataSize(epoch uint64) {
|
||||||
|
|
||||||
// ValidationDataHash returns homomorphic hash from the
|
// ValidationDataHash returns homomorphic hash from the
|
||||||
// concatenation of the payloads of the storage group members.
|
// concatenation of the payloads of the storage group members.
|
||||||
func (sg *StorageGroup) ValidationDataHash() *checksum.Checksum {
|
//
|
||||||
if v2 := (*storagegroup.StorageGroup)(sg).GetValidationHash(); v2 != nil {
|
// Zero StorageGroup has zero checksum.
|
||||||
var v checksum.Checksum
|
//
|
||||||
v.ReadFromV2(*v2)
|
// See also SetValidationDataHash.
|
||||||
|
func (sg StorageGroup) ValidationDataHash() (v checksum.Checksum) {
|
||||||
return &v
|
v2 := (storagegroup.StorageGroup)(sg)
|
||||||
|
if checksumV2 := v2.GetValidationHash(); checksumV2 != nil {
|
||||||
|
v.ReadFromV2(*checksumV2)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetValidationDataHash sets homomorphic hash from the
|
// SetValidationDataHash sets homomorphic hash from the
|
||||||
// concatenation of the payloads of the storage group members.
|
// concatenation of the payloads of the storage group members.
|
||||||
func (sg *StorageGroup) SetValidationDataHash(hash *checksum.Checksum) {
|
//
|
||||||
|
// See also ValidationDataHash.
|
||||||
|
func (sg *StorageGroup) SetValidationDataHash(hash checksum.Checksum) {
|
||||||
var v2 refs.Checksum
|
var v2 refs.Checksum
|
||||||
hash.WriteToV2(&v2)
|
hash.WriteToV2(&v2)
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ func TestNew(t *testing.T) {
|
||||||
|
|
||||||
// check initial values
|
// check initial values
|
||||||
require.Nil(t, sg.Members())
|
require.Nil(t, sg.Members())
|
||||||
require.Nil(t, sg.ValidationDataHash())
|
require.True(t, sg.ValidationDataHash().Empty())
|
||||||
require.Zero(t, sg.ExpirationEpoch())
|
require.Zero(t, sg.ExpirationEpoch())
|
||||||
require.Zero(t, sg.ValidationDataSize())
|
require.Zero(t, sg.ValidationDataSize())
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue