git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/pool/tree/pool_signature.go (about) 1 package tree 2 3 import ( 4 frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa" 5 tree "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool/tree/service" 6 ) 7 8 type message interface { 9 SignedDataSize() int 10 ReadSignedData([]byte) ([]byte, error) 11 GetSignature() *tree.Signature 12 SetSignature(*tree.Signature) 13 } 14 15 // signMessage uses the pool key and signs any protobuf 16 // message that was generated for the TreeService by the 17 // protoc-gen-go-frostfs generator. Returns any errors directly. 18 func (p *Pool) signRequest(m message) error { 19 binBody, err := m.ReadSignedData(nil) 20 if err != nil { 21 return err 22 } 23 24 keySDK := frostfsecdsa.Signer(p.key.PrivateKey) 25 data, err := keySDK.Sign(binBody) 26 if err != nil { 27 return err 28 } 29 30 rawPub := make([]byte, keySDK.Public().MaxEncodedSize()) 31 rawPub = rawPub[:keySDK.Public().Encode(rawPub)] 32 m.SetSignature(&tree.Signature{ 33 Key: rawPub, 34 Sign: data, 35 }) 36 37 return nil 38 }