1c7dd03cf5
Allow `SignOption` to set 2 parameters: 1. Default signature scheme, which is used in case scheme is unspecified. 2. Restrict scheme option which also checks that scheme is either unspecified or equal to the restricted scheme. This is only used for verification and is necessary because some of the signatures are used in smart-contracts. Also provide signature struct to sign/verify functions in helpers. The constant names differ a bit from those in API because of linter complaints. Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
91 lines
2.1 KiB
Go
91 lines
2.1 KiB
Go
package signature
|
|
|
|
import (
|
|
"github.com/nspcc-dev/neofs-api-go/v2/refs"
|
|
)
|
|
|
|
// Signature represents v2-compatible signature.
|
|
type Signature refs.Signature
|
|
|
|
// Scheme represents signature scheme.
|
|
type Scheme uint32
|
|
|
|
// Supported signature schemes.
|
|
const (
|
|
Unspecified Scheme = iota
|
|
ECDSAWithSHA512
|
|
RFC6979WithSHA256
|
|
)
|
|
|
|
// NewFromV2 wraps v2 Signature message to Signature.
|
|
//
|
|
// Nil refs.Signature converts to nil.
|
|
func NewFromV2(sV2 *refs.Signature) *Signature {
|
|
return (*Signature)(sV2)
|
|
}
|
|
|
|
// New creates and initializes blank Signature.
|
|
//
|
|
// Defaults:
|
|
// - key: nil;
|
|
// - signature: nil.
|
|
func New() *Signature {
|
|
return NewFromV2(new(refs.Signature))
|
|
}
|
|
|
|
// Key sets binary public key.
|
|
func (s *Signature) Key() []byte {
|
|
return (*refs.Signature)(s).GetKey()
|
|
}
|
|
|
|
// SetKey returns binary public key.
|
|
func (s *Signature) SetKey(v []byte) {
|
|
(*refs.Signature)(s).SetKey(v)
|
|
}
|
|
|
|
// Sign return signature value.
|
|
func (s *Signature) Sign() []byte {
|
|
return (*refs.Signature)(s).GetSign()
|
|
}
|
|
|
|
// SetSign sets signature value.
|
|
func (s *Signature) SetSign(v []byte) {
|
|
(*refs.Signature)(s).SetSign(v)
|
|
}
|
|
|
|
// Scheme returns signature scheme.
|
|
func (s *Signature) Scheme() Scheme {
|
|
return Scheme((*refs.Signature)(s).GetScheme())
|
|
}
|
|
|
|
// SetScheme sets signature scheme.
|
|
func (s *Signature) SetScheme(v Scheme) {
|
|
(*refs.Signature)(s).SetScheme(refs.SignatureScheme(v))
|
|
}
|
|
|
|
// ToV2 converts Signature to v2 Signature message.
|
|
//
|
|
// Nil Signature converts to nil.
|
|
func (s *Signature) ToV2() *refs.Signature {
|
|
return (*refs.Signature)(s)
|
|
}
|
|
|
|
// Marshal marshals Signature into a protobuf binary form.
|
|
func (s *Signature) Marshal() ([]byte, error) {
|
|
return (*refs.Signature)(s).StableMarshal(nil)
|
|
}
|
|
|
|
// Unmarshal unmarshals protobuf binary representation of Signature.
|
|
func (s *Signature) Unmarshal(data []byte) error {
|
|
return (*refs.Signature)(s).Unmarshal(data)
|
|
}
|
|
|
|
// MarshalJSON encodes Signature to protobuf JSON format.
|
|
func (s *Signature) MarshalJSON() ([]byte, error) {
|
|
return (*refs.Signature)(s).MarshalJSON()
|
|
}
|
|
|
|
// UnmarshalJSON decodes Signature from protobuf JSON format.
|
|
func (s *Signature) UnmarshalJSON(data []byte) error {
|
|
return (*refs.Signature)(s).UnmarshalJSON(data)
|
|
}
|