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  }