4661f65975
There is a need to check if public key in the RPC response matches the public key of the related storage node declared in network map. Define `ErrWrongPublicKey` error. Implement RPC response handler's constructor `AssertKeyResponseCallback` which checks public key. Construct handler and pass it to client's option `WithResponseInfoHandler`. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
19 lines
527 B
Go
19 lines
527 B
Go
package internal
|
|
|
|
import (
|
|
"bytes"
|
|
|
|
"github.com/nspcc-dev/neofs-api-go/v2/session"
|
|
"github.com/nspcc-dev/neofs-node/pkg/core/client"
|
|
)
|
|
|
|
// VerifyResponseKeyV2 checks if response is signed with expected key. Returns client.ErrWrongPublicKey if not.
|
|
func VerifyResponseKeyV2(expectedKey []byte, resp interface {
|
|
GetVerificationHeader() *session.ResponseVerificationHeader
|
|
}) error {
|
|
if !bytes.Equal(resp.GetVerificationHeader().GetBodySignature().GetKey(), expectedKey) {
|
|
return client.ErrWrongPublicKey
|
|
}
|
|
|
|
return nil
|
|
}
|