frostfs-sdk-go/pool/tree/pool_signature.go

37 lines
929 B
Go
Raw Permalink Normal View History

package tree
import (
frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa"
tree "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool/tree/service"
)
type message interface {
SignedDataSize() int
ReadSignedData([]byte) ([]byte, error)
GetSignature() *tree.Signature
SetSignature(*tree.Signature) error
}
// signMessage uses the pool key and signs any protobuf
// message that was generated for the TreeService by the
// protoc-gen-go-frostfs generator. Returns any errors directly.
func (p *Pool) signRequest(m message) error {
binBody, err := m.ReadSignedData(nil)
if err != nil {
return err
}
keySDK := frostfsecdsa.Signer(p.key.PrivateKey)
data, err := keySDK.Sign(binBody)
if err != nil {
return err
}
rawPub := make([]byte, keySDK.Public().MaxEncodedSize())
rawPub = rawPub[:keySDK.Public().Encode(rawPub)]
return m.SetSignature(&tree.Signature{
Key: rawPub,
Sign: data,
})
}