frostfs-node/pkg/innerring/processors/container/common.go

43 lines
937 B
Go
Raw Normal View History

package container
import (
"crypto/ecdsa"
"fmt"
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
"github.com/nspcc-dev/neofs-api-go/pkg/owner"
)
type ownerIDSource interface {
OwnerID() *owner.ID
}
func (cp *Processor) checkKeyOwnership(ownerIDSrc ownerIDSource, key *keys.PublicKey) error {
// TODO: need more convenient way to do this
w, err := owner.NEO3WalletFromPublicKey(&ecdsa.PublicKey{
X: key.X,
Y: key.Y,
})
if err != nil {
return err
}
// TODO: need Equal method on owner.ID
if ownerIDSrc.OwnerID().String() == owner.NewIDFromNeo3Wallet(w).String() {
return nil
}
ownerKeys, err := cp.idClient.AccountKeys(ownerIDSrc.OwnerID())
if err != nil {
return fmt.Errorf("could not received owner keys %s: %w", ownerIDSrc.OwnerID(), err)
}
for _, ownerKey := range ownerKeys {
if ownerKey.Equal(key) {
return nil
}
}
return fmt.Errorf("key %s is not tied to the owner of the container", key)
}