forked from TrueCloudLab/frostfs-api-go
object: implement signing payload methods on SearchRequest message
This commit is contained in:
parent
84671cd4aa
commit
4aac4d093d
2 changed files with 54 additions and 10 deletions
|
@ -181,9 +181,9 @@ func (m GetRangeHashRequest) ReadSignedData(p []byte) error {
|
||||||
|
|
||||||
off += copy(p[off:], addressBytes(m.GetAddress()))
|
off += copy(p[off:], addressBytes(m.GetAddress()))
|
||||||
|
|
||||||
off += copy(p[off:], sliceBytes(m.GetSalt()))
|
off += copy(p[off:], rangeSetBytes(m.GetRanges()))
|
||||||
|
|
||||||
copy(p[off:], rangeSetBytes(m.GetRanges()))
|
off += copy(p[off:], m.GetSalt())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -196,23 +196,49 @@ func (m GetRangeHashRequest) SignedDataSize() int {
|
||||||
|
|
||||||
sz += rangeSetSize(m.GetRanges())
|
sz += rangeSetSize(m.GetRanges())
|
||||||
|
|
||||||
sz += sliceSize(m.GetSalt())
|
sz += len(m.GetSalt())
|
||||||
|
|
||||||
return sz
|
return sz
|
||||||
}
|
}
|
||||||
|
|
||||||
func sliceSize(v []byte) int {
|
// SignedData returns payload bytes of the request.
|
||||||
return 4 + len(v)
|
func (m SearchRequest) SignedData() ([]byte, error) {
|
||||||
|
data := make([]byte, m.SignedDataSize())
|
||||||
|
|
||||||
|
return data, m.ReadSignedData(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func sliceBytes(v []byte) []byte {
|
// ReadSignedData copies payload bytes to passed buffer.
|
||||||
data := make([]byte, sliceSize(v))
|
//
|
||||||
|
// If the buffer size is insufficient, io.ErrUnexpectedEOF returns.
|
||||||
|
func (m SearchRequest) ReadSignedData(p []byte) error {
|
||||||
|
if len(p) < m.SignedDataSize() {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
|
||||||
binary.BigEndian.PutUint32(data, uint32(len(v)))
|
var off int
|
||||||
|
|
||||||
copy(data[4:], v)
|
off += copy(p[off:], m.CID().Bytes())
|
||||||
|
|
||||||
return data
|
binary.BigEndian.PutUint32(p[off:], m.GetQueryVersion())
|
||||||
|
off += 4
|
||||||
|
|
||||||
|
copy(p[off:], m.GetQuery())
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SignedDataSize returns payload size of the request.
|
||||||
|
func (m SearchRequest) SignedDataSize() int {
|
||||||
|
var sz int
|
||||||
|
|
||||||
|
sz += m.CID().Size()
|
||||||
|
|
||||||
|
sz += 4 // uint32 Version
|
||||||
|
|
||||||
|
sz += len(m.GetQuery())
|
||||||
|
|
||||||
|
return sz
|
||||||
}
|
}
|
||||||
|
|
||||||
func rangeSetSize(rs []Range) int {
|
func rangeSetSize(rs []Range) int {
|
||||||
|
|
|
@ -136,6 +136,24 @@ func TestSignVerifyRequests(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{ // GetRangeHashRequest
|
||||||
|
constructor: func() sigType {
|
||||||
|
return &SearchRequest{
|
||||||
|
Query: []byte{1, 2, 3},
|
||||||
|
}
|
||||||
|
},
|
||||||
|
payloadCorrupt: []func(sigType){
|
||||||
|
func(s sigType) {
|
||||||
|
s.(*SearchRequest).ContainerID[0]++
|
||||||
|
},
|
||||||
|
func(s sigType) {
|
||||||
|
s.(*SearchRequest).Query[0]++
|
||||||
|
},
|
||||||
|
func(s sigType) {
|
||||||
|
s.(*SearchRequest).QueryVersion++
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
|
|
Loading…
Reference in a new issue