service

package
v0.4.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 16, 2020 License: GPL-3.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// ZeroTTL is empty ttl, should produce ErrZeroTTL.
	ZeroTTL = iota

	// NonForwardingTTL is a ttl that allows direct connections only.
	NonForwardingTTL

	// SingleForwardingTTL is a ttl that allows connections through another node.
	SingleForwardingTTL
)
View Source
const (
	// ErrZeroTTL is raised when zero ttl is passed.
	ErrZeroTTL = internal.Error("zero ttl")

	// ErrIncorrectTTL is raised when NonForwardingTTL is passed and NodeRole != InnerRingNode.
	ErrIncorrectTTL = internal.Error("incorrect ttl")
)
View Source
const (
	// ErrCannotLoadPublicKey is raised when cannot unmarshal public key from RequestVerificationHeader_Sign.
	ErrCannotLoadPublicKey = internal.Error("cannot load public key")

	// ErrCannotFindOwner is raised when signatures empty in GetOwner.
	ErrCannotFindOwner = internal.Error("cannot find owner public key")

	// ErrWrongOwner is raised when passed OwnerID not equal to present PublicKey
	ErrWrongOwner = internal.Error("wrong owner")
)

Variables

View Source
var (
	ErrInvalidLengthMeta        = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowMeta          = fmt.Errorf("proto: integer overflow")
	ErrUnexpectedEndOfGroupMeta = fmt.Errorf("proto: unexpected end of group")
)
View Source
var (
	ErrInvalidLengthVerify        = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowVerify          = fmt.Errorf("proto: integer overflow")
	ErrUnexpectedEndOfGroupVerify = fmt.Errorf("proto: unexpected end of group")
)
View Source
var (
	ErrInvalidLengthVerifyTest        = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowVerifyTest          = fmt.Errorf("proto: integer overflow")
	ErrUnexpectedEndOfGroupVerifyTest = fmt.Errorf("proto: unexpected end of group")
)

Functions

func ProcessRequestTTL

func ProcessRequestTTL(req MetaHeader, cond ...TTLCondition) error

ProcessRequestTTL validates and update ttl requests.

func SignRequestHeader

func SignRequestHeader(key *ecdsa.PrivateKey, msg VerifiableRequest) error

SignRequestHeader receives private key and request with RequestVerificationHeader, tries to marshal and sign request with passed PrivateKey, after that adds new signature to headers. If something went wrong, returns error.

func VerifyRequestHeader

func VerifyRequestHeader(msg VerifiableRequest) error

VerifyRequestHeader receives request with RequestVerificationHeader, tries to marshal and verify each signature from request. If something went wrong, returns error.

Types

type EpochHeader

type EpochHeader interface {
	GetEpoch() uint64
	SetEpoch(v uint64)
}

EpochHeader interface gives possibility to get or set epoch in RPC Requests.

type MaintainableRequest

type MaintainableRequest interface {
	GetOwner() (*ecdsa.PublicKey, error)
	SetOwner(*ecdsa.PublicKey, []byte)
	GetLastPeer() (*ecdsa.PublicKey, error)
}

MaintainableRequest adds possibility to set and get (+validate) owner (client) public key from RequestVerificationHeader.

type MetaHeader

type MetaHeader interface {
	ResetMeta() RequestMetaHeader
	RestoreMeta(RequestMetaHeader)

	// TTLRequest to verify and update ttl requests.
	GetTTL() uint32
	SetTTL(uint32)

	// EpochHeader gives possibility to get or set epoch in RPC Requests.
	EpochHeader

	// VersionHeader allows get or set version of protocol request
	VersionHeader
}

MetaHeader contains meta information of request. It provides methods to get or set meta information meta header. Also contains methods to reset and restore meta header. Also contains methods to get or set request protocol version

type NodeRole

type NodeRole int32

NodeRole to identify in Bootstrap service.

const (

	// InnerRingNode that work like IR node.
	InnerRingNode NodeRole
	// StorageNode that work like a storage node.
	StorageNode
)

func (NodeRole) String

func (nt NodeRole) String() string

String is method, that represent NodeRole as string.

type RequestMetaHeader

type RequestMetaHeader struct {
	// TTL must be larger than zero, it decreased in every NeoFS Node
	TTL uint32 `protobuf:"varint,1,opt,name=TTL,proto3" json:"TTL,omitempty"`
	// Epoch for user can be empty, because node sets epoch to the actual value
	Epoch uint64 `protobuf:"varint,2,opt,name=Epoch,proto3" json:"Epoch,omitempty"`
	// Version defines protocol version
	// TODO: not used for now, should be implemented in future
	Version              uint32   `protobuf:"varint,3,opt,name=Version,proto3" json:"Version,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

RequestMetaHeader contains information about request meta headers (should be embedded into message)

func (*RequestMetaHeader) Descriptor

func (*RequestMetaHeader) Descriptor() ([]byte, []int)

func (*RequestMetaHeader) GetEpoch

func (m *RequestMetaHeader) GetEpoch() uint64

func (*RequestMetaHeader) GetTTL

func (m *RequestMetaHeader) GetTTL() uint32

func (*RequestMetaHeader) GetVersion

func (m *RequestMetaHeader) GetVersion() uint32

func (*RequestMetaHeader) Marshal

func (m *RequestMetaHeader) Marshal() (dAtA []byte, err error)

func (*RequestMetaHeader) MarshalTo

func (m *RequestMetaHeader) MarshalTo(dAtA []byte) (int, error)

func (*RequestMetaHeader) MarshalToSizedBuffer

func (m *RequestMetaHeader) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*RequestMetaHeader) ProtoMessage

func (*RequestMetaHeader) ProtoMessage()

func (*RequestMetaHeader) Reset

func (m *RequestMetaHeader) Reset()

func (*RequestMetaHeader) ResetMeta

func (m *RequestMetaHeader) ResetMeta() RequestMetaHeader

ResetMeta returns current value and sets RequestMetaHeader to empty value.

func (*RequestMetaHeader) RestoreMeta

func (m *RequestMetaHeader) RestoreMeta(v RequestMetaHeader)

RestoreMeta sets current RequestMetaHeader to passed value.

func (*RequestMetaHeader) SetEpoch

func (m *RequestMetaHeader) SetEpoch(v uint64)

SetEpoch sets Epoch to RequestMetaHeader.

func (*RequestMetaHeader) SetTTL

func (m *RequestMetaHeader) SetTTL(v uint32)

SetTTL sets TTL to RequestMetaHeader.

func (*RequestMetaHeader) SetVersion

func (m *RequestMetaHeader) SetVersion(v uint32)

SetVersion sets protocol version to RequestMetaHeader.

func (*RequestMetaHeader) Size

func (m *RequestMetaHeader) Size() (n int)

func (*RequestMetaHeader) String

func (m *RequestMetaHeader) String() string

func (*RequestMetaHeader) Unmarshal

func (m *RequestMetaHeader) Unmarshal(dAtA []byte) error

func (*RequestMetaHeader) XXX_DiscardUnknown

func (m *RequestMetaHeader) XXX_DiscardUnknown()

func (*RequestMetaHeader) XXX_Marshal

func (m *RequestMetaHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*RequestMetaHeader) XXX_Merge

func (m *RequestMetaHeader) XXX_Merge(src proto.Message)

func (*RequestMetaHeader) XXX_Size

func (m *RequestMetaHeader) XXX_Size() int

func (*RequestMetaHeader) XXX_Unmarshal

func (m *RequestMetaHeader) XXX_Unmarshal(b []byte) error

type RequestVerificationHeader

type RequestVerificationHeader struct {
	// Signatures is a set of signatures of every passed NeoFS Node
	Signatures           []*RequestVerificationHeader_Signature `protobuf:"bytes,1,rep,name=Signatures,proto3" json:"Signatures,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                               `json:"-"`
	XXX_unrecognized     []byte                                 `json:"-"`
	XXX_sizecache        int32                                  `json:"-"`
}

RequestVerificationHeader is a set of signatures of every NeoFS Node that processed request (should be embedded into message).

func (*RequestVerificationHeader) AddSignature

AddSignature adds new Signature into RequestVerificationHeader.

func (*RequestVerificationHeader) CheckOwner

func (m *RequestVerificationHeader) CheckOwner(owner refs.OwnerID) error

CheckOwner validates, that passed OwnerID is equal to present PublicKey of owner.

func (*RequestVerificationHeader) Descriptor

func (*RequestVerificationHeader) Descriptor() ([]byte, []int)

func (*RequestVerificationHeader) GetLastPeer

func (m *RequestVerificationHeader) GetLastPeer() (*ecdsa.PublicKey, error)

GetLastPeer tries to get last peer public key from signatures. If signatures has zero length, returns ErrCannotFindOwner. If signatures has length equal to one, uses GetOwner. Otherwise tries to unmarshal last peer public key.

func (*RequestVerificationHeader) GetOwner

func (m *RequestVerificationHeader) GetOwner() (*ecdsa.PublicKey, error)

GetOwner tries to get owner (client) public key from signatures. If signatures contains not empty Origin, we should try to validate, that session key was signed by owner (client), otherwise return error.

func (*RequestVerificationHeader) GetSignatures

func (*RequestVerificationHeader) Marshal

func (m *RequestVerificationHeader) Marshal() (dAtA []byte, err error)

func (*RequestVerificationHeader) MarshalTo

func (m *RequestVerificationHeader) MarshalTo(dAtA []byte) (int, error)

func (*RequestVerificationHeader) MarshalToSizedBuffer

func (m *RequestVerificationHeader) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*RequestVerificationHeader) ProtoMessage

func (*RequestVerificationHeader) ProtoMessage()

func (*RequestVerificationHeader) Reset

func (m *RequestVerificationHeader) Reset()

func (*RequestVerificationHeader) SetOwner

func (m *RequestVerificationHeader) SetOwner(pub *ecdsa.PublicKey, sign []byte)

SetOwner adds origin (sign and public key) of owner (client) into first signature.

func (*RequestVerificationHeader) SetSignatures

func (m *RequestVerificationHeader) SetSignatures(signatures []*RequestVerificationHeader_Signature)

SetSignatures replaces signatures stored in RequestVerificationHeader.

func (*RequestVerificationHeader) Size

func (m *RequestVerificationHeader) Size() (n int)

func (*RequestVerificationHeader) String

func (m *RequestVerificationHeader) String() string

func (*RequestVerificationHeader) Unmarshal

func (m *RequestVerificationHeader) Unmarshal(dAtA []byte) error

func (*RequestVerificationHeader) XXX_DiscardUnknown

func (m *RequestVerificationHeader) XXX_DiscardUnknown()

func (*RequestVerificationHeader) XXX_Marshal

func (m *RequestVerificationHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*RequestVerificationHeader) XXX_Merge

func (m *RequestVerificationHeader) XXX_Merge(src proto.Message)

func (*RequestVerificationHeader) XXX_Size

func (m *RequestVerificationHeader) XXX_Size() int

func (*RequestVerificationHeader) XXX_Unmarshal

func (m *RequestVerificationHeader) XXX_Unmarshal(b []byte) error

type RequestVerificationHeader_Sign

type RequestVerificationHeader_Sign struct {
	// Sign is signature of the request or session key.
	Sign []byte `protobuf:"bytes,1,opt,name=Sign,proto3" json:"Sign,omitempty"`
	// Peer is compressed public key used for signature.
	Peer                 []byte   `protobuf:"bytes,2,opt,name=Peer,proto3" json:"Peer,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (*RequestVerificationHeader_Sign) Descriptor

func (*RequestVerificationHeader_Sign) Descriptor() ([]byte, []int)

func (*RequestVerificationHeader_Sign) GetPeer

func (m *RequestVerificationHeader_Sign) GetPeer() []byte

func (*RequestVerificationHeader_Sign) GetSign

func (m *RequestVerificationHeader_Sign) GetSign() []byte

func (*RequestVerificationHeader_Sign) Marshal

func (m *RequestVerificationHeader_Sign) Marshal() (dAtA []byte, err error)

func (*RequestVerificationHeader_Sign) MarshalTo

func (m *RequestVerificationHeader_Sign) MarshalTo(dAtA []byte) (int, error)

func (*RequestVerificationHeader_Sign) MarshalToSizedBuffer

func (m *RequestVerificationHeader_Sign) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*RequestVerificationHeader_Sign) ProtoMessage

func (*RequestVerificationHeader_Sign) ProtoMessage()

func (*RequestVerificationHeader_Sign) Reset

func (m *RequestVerificationHeader_Sign) Reset()

func (*RequestVerificationHeader_Sign) Size

func (m *RequestVerificationHeader_Sign) Size() (n int)

func (*RequestVerificationHeader_Sign) String

func (*RequestVerificationHeader_Sign) Unmarshal

func (m *RequestVerificationHeader_Sign) Unmarshal(dAtA []byte) error

func (*RequestVerificationHeader_Sign) XXX_DiscardUnknown

func (m *RequestVerificationHeader_Sign) XXX_DiscardUnknown()

func (*RequestVerificationHeader_Sign) XXX_Marshal

func (m *RequestVerificationHeader_Sign) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*RequestVerificationHeader_Sign) XXX_Merge

func (m *RequestVerificationHeader_Sign) XXX_Merge(src proto.Message)

func (*RequestVerificationHeader_Sign) XXX_Size

func (m *RequestVerificationHeader_Sign) XXX_Size() int

func (*RequestVerificationHeader_Sign) XXX_Unmarshal

func (m *RequestVerificationHeader_Sign) XXX_Unmarshal(b []byte) error

type RequestVerificationHeader_Signature

type RequestVerificationHeader_Signature struct {
	// Sign is a signature and public key of the request.
	RequestVerificationHeader_Sign `protobuf:"bytes,1,opt,name=Sign,proto3,embedded=Sign" json:"Sign"`
	// Origin used for requests, when trusted node changes it and re-sign with session key.
	// If session key used for signature request, then Origin should contain
	// public key of user and signed session key.
	Origin               *RequestVerificationHeader_Sign `protobuf:"bytes,2,opt,name=Origin,proto3" json:"Origin,omitempty"`
	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
	XXX_unrecognized     []byte                          `json:"-"`
	XXX_sizecache        int32                           `json:"-"`
}

func (*RequestVerificationHeader_Signature) Descriptor

func (*RequestVerificationHeader_Signature) Descriptor() ([]byte, []int)

func (*RequestVerificationHeader_Signature) GetOrigin

func (*RequestVerificationHeader_Signature) Marshal

func (m *RequestVerificationHeader_Signature) Marshal() (dAtA []byte, err error)

func (*RequestVerificationHeader_Signature) MarshalTo

func (m *RequestVerificationHeader_Signature) MarshalTo(dAtA []byte) (int, error)

func (*RequestVerificationHeader_Signature) MarshalToSizedBuffer

func (m *RequestVerificationHeader_Signature) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*RequestVerificationHeader_Signature) ProtoMessage

func (*RequestVerificationHeader_Signature) ProtoMessage()

func (*RequestVerificationHeader_Signature) Reset

func (*RequestVerificationHeader_Signature) Size

func (*RequestVerificationHeader_Signature) String

func (*RequestVerificationHeader_Signature) Unmarshal

func (m *RequestVerificationHeader_Signature) Unmarshal(dAtA []byte) error

func (*RequestVerificationHeader_Signature) XXX_DiscardUnknown

func (m *RequestVerificationHeader_Signature) XXX_DiscardUnknown()

func (*RequestVerificationHeader_Signature) XXX_Marshal

func (m *RequestVerificationHeader_Signature) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*RequestVerificationHeader_Signature) XXX_Merge

func (*RequestVerificationHeader_Signature) XXX_Size

func (*RequestVerificationHeader_Signature) XXX_Unmarshal

func (m *RequestVerificationHeader_Signature) XXX_Unmarshal(b []byte) error

type ResponseMetaHeader added in v0.4.0

type ResponseMetaHeader struct {
	// Current NeoFS epoch on server
	Epoch uint64 `protobuf:"varint,1,opt,name=Epoch,proto3" json:"Epoch,omitempty"`
	// Version defines protocol version
	// TODO: not used for now, should be implemented in future
	Version              uint32   `protobuf:"varint,2,opt,name=Version,proto3" json:"Version,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

ResponseMetaHeader contains meta information based on request processing by server (should be embedded into message)

func (*ResponseMetaHeader) Descriptor added in v0.4.0

func (*ResponseMetaHeader) Descriptor() ([]byte, []int)

func (*ResponseMetaHeader) GetEpoch added in v0.4.0

func (m *ResponseMetaHeader) GetEpoch() uint64

func (*ResponseMetaHeader) GetVersion added in v0.4.0

func (m *ResponseMetaHeader) GetVersion() uint32

func (*ResponseMetaHeader) Marshal added in v0.4.0

func (m *ResponseMetaHeader) Marshal() (dAtA []byte, err error)

func (*ResponseMetaHeader) MarshalTo added in v0.4.0

func (m *ResponseMetaHeader) MarshalTo(dAtA []byte) (int, error)

func (*ResponseMetaHeader) MarshalToSizedBuffer added in v0.4.0

func (m *ResponseMetaHeader) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*ResponseMetaHeader) ProtoMessage added in v0.4.0

func (*ResponseMetaHeader) ProtoMessage()

func (*ResponseMetaHeader) Reset added in v0.4.0

func (m *ResponseMetaHeader) Reset()

func (*ResponseMetaHeader) SetEpoch added in v0.4.0

func (m *ResponseMetaHeader) SetEpoch(v uint64)

SetEpoch sets Epoch to ResponseMetaHeader.

func (*ResponseMetaHeader) SetVersion added in v0.4.0

func (m *ResponseMetaHeader) SetVersion(v uint32)

SetVersion sets protocol version to ResponseMetaHeader.

func (*ResponseMetaHeader) Size added in v0.4.0

func (m *ResponseMetaHeader) Size() (n int)

func (*ResponseMetaHeader) String added in v0.4.0

func (m *ResponseMetaHeader) String() string

func (*ResponseMetaHeader) Unmarshal added in v0.4.0

func (m *ResponseMetaHeader) Unmarshal(dAtA []byte) error

func (*ResponseMetaHeader) XXX_DiscardUnknown added in v0.4.0

func (m *ResponseMetaHeader) XXX_DiscardUnknown()

func (*ResponseMetaHeader) XXX_Marshal added in v0.4.0

func (m *ResponseMetaHeader) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*ResponseMetaHeader) XXX_Merge added in v0.4.0

func (m *ResponseMetaHeader) XXX_Merge(src proto.Message)

func (*ResponseMetaHeader) XXX_Size added in v0.4.0

func (m *ResponseMetaHeader) XXX_Size() int

func (*ResponseMetaHeader) XXX_Unmarshal added in v0.4.0

func (m *ResponseMetaHeader) XXX_Unmarshal(b []byte) error

type TTLCondition

type TTLCondition func(ttl uint32) error

TTLCondition is closure, that allows to validate request with ttl.

func IRNonForwarding

func IRNonForwarding(role NodeRole) TTLCondition

IRNonForwarding condition that allows NonForwardingTTL only for IR

type TestRequest

type TestRequest struct {
	IntField                  int32            `protobuf:"varint,1,opt,name=IntField,proto3" json:"IntField,omitempty"`
	StringField               string           `protobuf:"bytes,2,opt,name=StringField,proto3" json:"StringField,omitempty"`
	BytesField                []byte           `protobuf:"bytes,3,opt,name=BytesField,proto3" json:"BytesField,omitempty"`
	CustomField               *testCustomField `protobuf:"bytes,4,opt,name=CustomField,proto3,customtype=testCustomField" json:"CustomField,omitempty"`
	RequestMetaHeader         `protobuf:"bytes,98,opt,name=Meta,proto3,embedded=Meta" json:"Meta"`
	RequestVerificationHeader `protobuf:"bytes,99,opt,name=Header,proto3,embedded=Header" json:"Header"`
	XXX_NoUnkeyedLiteral      struct{} `json:"-"`
	XXX_unrecognized          []byte   `json:"-"`
	XXX_sizecache             int32    `json:"-"`
}

func (*TestRequest) Descriptor

func (*TestRequest) Descriptor() ([]byte, []int)

func (*TestRequest) GetBytesField

func (m *TestRequest) GetBytesField() []byte

func (*TestRequest) GetIntField

func (m *TestRequest) GetIntField() int32

func (*TestRequest) GetStringField

func (m *TestRequest) GetStringField() string

func (*TestRequest) Marshal

func (m *TestRequest) Marshal() (dAtA []byte, err error)

func (*TestRequest) MarshalTo

func (m *TestRequest) MarshalTo(dAtA []byte) (int, error)

func (*TestRequest) MarshalToSizedBuffer

func (m *TestRequest) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*TestRequest) ProtoMessage

func (*TestRequest) ProtoMessage()

func (*TestRequest) Reset

func (m *TestRequest) Reset()

func (*TestRequest) Size

func (m *TestRequest) Size() (n int)

func (*TestRequest) String

func (m *TestRequest) String() string

func (*TestRequest) Unmarshal

func (m *TestRequest) Unmarshal(dAtA []byte) error

func (*TestRequest) XXX_DiscardUnknown

func (m *TestRequest) XXX_DiscardUnknown()

func (*TestRequest) XXX_Marshal

func (m *TestRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*TestRequest) XXX_Merge

func (m *TestRequest) XXX_Merge(src proto.Message)

func (*TestRequest) XXX_Size

func (m *TestRequest) XXX_Size() int

func (*TestRequest) XXX_Unmarshal

func (m *TestRequest) XXX_Unmarshal(b []byte) error

type VerifiableRequest

type VerifiableRequest interface {
	Size() int
	MarshalTo([]byte) (int, error)
	AddSignature(*RequestVerificationHeader_Signature)
	GetSignatures() []*RequestVerificationHeader_Signature
	SetSignatures([]*RequestVerificationHeader_Signature)
}

VerifiableRequest adds possibility to sign and verify request header.

type VersionHeader

type VersionHeader interface {
	GetVersion() uint32
	SetVersion(uint32)
}

VersionHeader allows get or set version of protocol request

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL