/*REMOVE THIS AFTER SIGNATURE WILL BE AVAILABLE IN TREE CLIENT FROM FROSTFS NODE*/
package frostfs

import (
	crypto "github.com/TrueCloudLab/frostfs-crypto"
	"google.golang.org/protobuf/proto"
)

func (c *TreeClient) signData(buf []byte, f func(key, sign []byte)) error {
	// crypto package should not be used outside of API libraries (see neofs-node#491).
	// For now tree service does not include into SDK Client nor SDK Pool, so there is no choice.
	// When SDK library adopts Tree service client, this should be dropped.
	sign, err := crypto.Sign(&c.key.PrivateKey, buf)
	if err != nil {
		return err
	}

	f(c.key.PublicKey().Bytes(), sign)
	return nil
}

func (c *TreeClient) signRequest(requestBody proto.Message, f func(key, sign []byte)) error {
	buf, err := proto.Marshal(requestBody)
	if err != nil {
		return err
	}

	return c.signData(buf, f)
}