forked from TrueCloudLab/frostfs-api-go
object: implement signing payload methods on DeleteRequest message
This commit is contained in:
parent
68f83f5470
commit
fc0da3c8fc
2 changed files with 60 additions and 33 deletions
|
@ -4,27 +4,23 @@ import (
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
// SignedData returns marshaled payload of the Put request.
|
// SignedData returns payload bytes of the request.
|
||||||
//
|
//
|
||||||
// If payload is nil, ErrHeaderNotFound returns.
|
// If payload is nil, ErrHeaderNotFound returns.
|
||||||
func (m PutRequest) SignedData() ([]byte, error) {
|
func (m PutRequest) SignedData() ([]byte, error) {
|
||||||
r := m.GetR()
|
sz := m.SignedDataSize()
|
||||||
if r == nil {
|
if sz < 0 {
|
||||||
return nil, ErrHeaderNotFound
|
return nil, ErrHeaderNotFound
|
||||||
}
|
}
|
||||||
|
|
||||||
data := make([]byte, r.Size())
|
data := make([]byte, sz)
|
||||||
|
|
||||||
if _, err := r.MarshalTo(data); err != nil {
|
return data, m.ReadSignedData(data)
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return data, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadSignedData copies marshaled payload of the Put request to passed buffer.
|
// ReadSignedData copies payload bytes to passed buffer.
|
||||||
//
|
//
|
||||||
// If payload is nil, ErrHeaderNotFound returns.
|
// If the buffer size is insufficient, io.ErrUnexpectedEOF returns.
|
||||||
func (m PutRequest) ReadSignedData(p []byte) error {
|
func (m PutRequest) ReadSignedData(p []byte) error {
|
||||||
r := m.GetR()
|
r := m.GetR()
|
||||||
if r == nil {
|
if r == nil {
|
||||||
|
@ -48,16 +44,14 @@ func (m PutRequest) SignedDataSize() int {
|
||||||
return r.Size()
|
return r.Size()
|
||||||
}
|
}
|
||||||
|
|
||||||
// SignedData returns marshaled Address field.
|
// SignedData returns payload bytes of the request.
|
||||||
//
|
|
||||||
// Resulting error is always nil.
|
|
||||||
func (m GetRequest) SignedData() ([]byte, error) {
|
func (m GetRequest) SignedData() ([]byte, error) {
|
||||||
addr := m.GetAddress()
|
data := make([]byte, m.SignedDataSize())
|
||||||
|
|
||||||
return addressBytes(addr), nil
|
return data, m.ReadSignedData(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadSignedData copies marshaled Address field to passed buffer.
|
// ReadSignedData copies payload bytes to passed buffer.
|
||||||
//
|
//
|
||||||
// If the buffer size is insufficient, io.ErrUnexpectedEOF returns.
|
// If the buffer size is insufficient, io.ErrUnexpectedEOF returns.
|
||||||
func (m GetRequest) ReadSignedData(p []byte) error {
|
func (m GetRequest) ReadSignedData(p []byte) error {
|
||||||
|
@ -74,29 +68,19 @@ func (m GetRequest) ReadSignedData(p []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SignedDataSize returns the size of object address.
|
// SignedDataSize returns payload size of the request.
|
||||||
func (m GetRequest) SignedDataSize() int {
|
func (m GetRequest) SignedDataSize() int {
|
||||||
return addressSize(m.GetAddress())
|
return addressSize(m.GetAddress())
|
||||||
}
|
}
|
||||||
|
|
||||||
// SignedData returns marshaled Address field.
|
// SignedData returns payload bytes of the request.
|
||||||
//
|
|
||||||
// Resulting error is always nil.
|
|
||||||
func (m HeadRequest) SignedData() ([]byte, error) {
|
func (m HeadRequest) SignedData() ([]byte, error) {
|
||||||
sz := addressSize(m.Address)
|
data := make([]byte, m.SignedDataSize())
|
||||||
|
|
||||||
data := make([]byte, sz+1)
|
return data, m.ReadSignedData(data)
|
||||||
|
|
||||||
if m.GetFullHeaders() {
|
|
||||||
data[0] = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
copy(data[1:], addressBytes(m.Address))
|
|
||||||
|
|
||||||
return data, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ReadSignedData copies marshaled Address field to passed buffer.
|
// ReadSignedData copies payload bytes to passed buffer.
|
||||||
//
|
//
|
||||||
// If the buffer size is insufficient, io.ErrUnexpectedEOF returns.
|
// If the buffer size is insufficient, io.ErrUnexpectedEOF returns.
|
||||||
func (m HeadRequest) ReadSignedData(p []byte) error {
|
func (m HeadRequest) ReadSignedData(p []byte) error {
|
||||||
|
@ -115,11 +99,38 @@ func (m HeadRequest) ReadSignedData(p []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SignedDataSize returns the size of object address.
|
// SignedDataSize returns payload size of the request.
|
||||||
func (m HeadRequest) SignedDataSize() int {
|
func (m HeadRequest) SignedDataSize() int {
|
||||||
return addressSize(m.Address) + 1
|
return addressSize(m.Address) + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SignedData returns payload bytes of the request.
|
||||||
|
func (m DeleteRequest) SignedData() ([]byte, error) {
|
||||||
|
data := make([]byte, m.SignedDataSize())
|
||||||
|
|
||||||
|
return data, m.ReadSignedData(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadSignedData copies payload bytes to passed buffer.
|
||||||
|
//
|
||||||
|
// If the buffer size is insufficient, io.ErrUnexpectedEOF returns.
|
||||||
|
func (m DeleteRequest) ReadSignedData(p []byte) error {
|
||||||
|
if len(p) < m.SignedDataSize() {
|
||||||
|
return io.ErrUnexpectedEOF
|
||||||
|
}
|
||||||
|
|
||||||
|
off := copy(p, m.OwnerID.Bytes())
|
||||||
|
|
||||||
|
copy(p[off:], addressBytes(m.Address))
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SignedDataSize returns payload size of the request.
|
||||||
|
func (m DeleteRequest) SignedDataSize() int {
|
||||||
|
return m.OwnerID.Size() + addressSize(m.Address)
|
||||||
|
}
|
||||||
|
|
||||||
func addressSize(addr Address) int {
|
func addressSize(addr Address) int {
|
||||||
return addr.CID.Size() + addr.ObjectID.Size()
|
return addr.CID.Size() + addr.ObjectID.Size()
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,22 @@ func TestSignVerifyRequests(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{ // DeleteRequest
|
||||||
|
constructor: func() sigType {
|
||||||
|
return new(DeleteRequest)
|
||||||
|
},
|
||||||
|
payloadCorrupt: []func(sigType){
|
||||||
|
func(s sigType) {
|
||||||
|
s.(*DeleteRequest).OwnerID[0]++
|
||||||
|
},
|
||||||
|
func(s sigType) {
|
||||||
|
s.(*DeleteRequest).Address.CID[0]++
|
||||||
|
},
|
||||||
|
func(s sigType) {
|
||||||
|
s.(*DeleteRequest).Address.ObjectID[0]++
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, item := range items {
|
for _, item := range items {
|
||||||
|
|
Loading…
Reference in a new issue