diff --git a/session/common.go b/session/common.go index 0e432c91..e72a3ff2 100644 --- a/session/common.go +++ b/session/common.go @@ -172,10 +172,7 @@ func (x commonData) signedData(w contextWriter) []byte { return x.fillBody(w).StableMarshal(nil) } -func (x *commonData) sign(signer user.Signer, w contextWriter) error { - x.issuer = signer.UserID() - x.issuerSet = true - +func (x *commonData) sign(signer neofscrypto.Signer, w contextWriter) error { var sig neofscrypto.Signature err := sig.Calculate(signer, x.signedData(w)) diff --git a/session/container.go b/session/container.go index 9ccbbcdb..735d90eb 100644 --- a/session/container.go +++ b/session/container.go @@ -147,6 +147,14 @@ func (x *Container) UnmarshalJSON(data []byte) error { // // See also [Container.VerifySignature], [Container.SignedData]. func (x *Container) Sign(signer user.Signer) error { + x.issuer = signer.UserID() + x.issuerSet = true + return x.SetSignature(signer) +} + +// SetSignature allows to sign Container like [Container.Sign] but without +// issuer setting. +func (x *Container) SetSignature(signer neofscrypto.Signer) error { return x.sign(signer, x.writeContext) } diff --git a/session/container_test.go b/session/container_test.go index dc1a3279..d3937bba 100644 --- a/session/container_test.go +++ b/session/container_test.go @@ -560,6 +560,10 @@ func TestContainer_Issuer(t *testing.T) { func TestContainer_Sign(t *testing.T) { val := sessiontest.Container() + require.NoError(t, val.SetSignature(test.RandomSignerRFC6979(t))) + require.Zero(t, val.Issuer()) + require.True(t, val.VerifySignature()) + require.NoError(t, val.Sign(test.RandomSignerRFC6979(t))) require.True(t, val.VerifySignature()) diff --git a/session/object.go b/session/object.go index fefdbff0..35259267 100644 --- a/session/object.go +++ b/session/object.go @@ -7,6 +7,7 @@ import ( "github.com/nspcc-dev/neofs-api-go/v2/refs" "github.com/nspcc-dev/neofs-api-go/v2/session" cid "github.com/nspcc-dev/neofs-sdk-go/container/id" + neofscrypto "github.com/nspcc-dev/neofs-sdk-go/crypto" oid "github.com/nspcc-dev/neofs-sdk-go/object/id" "github.com/nspcc-dev/neofs-sdk-go/user" ) @@ -181,6 +182,14 @@ func (x *Object) UnmarshalJSON(data []byte) error { // // See also [Object.VerifySignature], [Object.SignedData]. func (x *Object) Sign(signer user.Signer) error { + x.issuer = signer.UserID() + x.issuerSet = true + return x.SetSignature(signer) +} + +// SetSignature allows to sign Object like [Object.Sign] but without issuer +// setting. +func (x *Object) SetSignature(signer neofscrypto.Signer) error { return x.sign(signer, x.writeContext) } diff --git a/session/object_test.go b/session/object_test.go index 8b3c0c49..79c66f5a 100644 --- a/session/object_test.go +++ b/session/object_test.go @@ -623,6 +623,10 @@ func TestObject_Issuer(t *testing.T) { func TestObject_Sign(t *testing.T) { val := sessiontest.Object() + require.NoError(t, val.SetSignature(test.RandomSignerRFC6979(t))) + require.Zero(t, val.Issuer()) + require.True(t, val.VerifySignature()) + require.NoError(t, val.Sign(test.RandomSignerRFC6979(t))) require.True(t, val.VerifySignature())