serialization

package
v0.0.0-...-05bc493 Latest Latest
Warning

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

Go to latest
Published: Sep 20, 2023 License: MIT Imports: 30 Imported by: 0

Documentation

Index

Constants

View Source
const (
	NoContext = FieldContext(iota)
	ContextMembershipAnnouncement
	ContextNeighbourAnnouncement
)
View Source
const (
	FlagHasPulsePacket = Flag(0)
	FlagSelfIntro1     = Flag(1)
	FlagSelfIntro2     = Flag(2)
	FlagHasJoinerExt   = Flag(3)
)
View Source
const (
	ProtocolTypePulsar           = ProtocolType(0)
	ProtocolTypeGlobulaConsensus = ProtocolType(1)
)

Variables

View Source
var (
	ErrNilBody         = errors.New("body is nil")
	ErrInvalidProtocol = errors.New("invalid protocol")
)

Functions

func ErrMalformedHeader

func ErrMalformedHeader(err error) error

func ErrMalformedPacketBody

func ErrMalformedPacketBody(err error) error

func ErrMalformedPacketSignature

func ErrMalformedPacketSignature(err error) error

func ErrMalformedPulseNumber

func ErrMalformedPulseNumber(err error) error

func ErrPayloadLengthMismatch

func ErrPayloadLengthMismatch(expected, actual int64) error

Types

type ClaimHeader

type ClaimHeader struct {
	TypeAndLength uint16 `insolar-transport:"header;[0-9]=length;[10-15]=header:ClaimType;group=Claims"` // [00-09] ByteLength [10-15] ClaimClass

}

func (*ClaimHeader) ClaimType

func (ch *ClaimHeader) ClaimType() ClaimType

func (*ClaimHeader) DeserializeFrom

func (ch *ClaimHeader) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*ClaimHeader) Length

func (ch *ClaimHeader) Length() int

Length returns claim length without header

func (*ClaimHeader) SerializeTo

func (ch *ClaimHeader) SerializeTo(ctx SerializeContext, writer io.Writer) error

type ClaimList

type ClaimList struct {
	// ByteSize>=2
	Claims      []GenericClaim
	EndOfClaims EmptyClaim // ByteSize=2 - indicates end of claims
}

func NewClaimList

func NewClaimList() ClaimList

func (*ClaimList) DeserializeFrom

func (cl *ClaimList) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*ClaimList) Push

func (cl *ClaimList) Push(claim GenericClaim)

func (*ClaimList) SerializeTo

func (cl *ClaimList) SerializeTo(ctx SerializeContext, writer io.Writer) error

type ClaimType

type ClaimType uint8

type CloudIntro

type CloudIntro struct {
	CloudIdentity      longbits.Bits512 // ByteSize=64
	LastCloudStateHash longbits.Bits512
}

func (*CloudIntro) DeserializeFrom

func (ci *CloudIntro) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*CloudIntro) SerializeTo

func (ci *CloudIntro) SerializeTo(ctx SerializeContext, writer io.Writer) error

type CloudIntroductionReader

type CloudIntroductionReader struct {
	MemberPacketReader
}

func (*CloudIntroductionReader) GetCloudIdentity

func (r *CloudIntroductionReader) GetCloudIdentity() cryptkit.DigestHolder

func (*CloudIntroductionReader) GetJoinerSecret

func (r *CloudIntroductionReader) GetJoinerSecret() cryptkit.DigestHolder

func (*CloudIntroductionReader) GetLastCloudStateHash

func (r *CloudIntroductionReader) GetLastCloudStateHash() cryptkit.DigestHolder

func (*CloudIntroductionReader) GetPulseNumber

func (p *CloudIntroductionReader) GetPulseNumber() pulse.Number

type CompactGlobulaNodeState

type CompactGlobulaNodeState struct {
	NodeStateHash          longbits.Bits512 // ByteSize=64
	NodeStateHashSignature longbits.Bits512 // ByteSize=64, :=Sign(NodePK, Merkle512(NodeStateHash, (LastCloudStateHash.FoldTo224() << 32 | Rank)))
}

func (*CompactGlobulaNodeState) DeserializeFrom

func (gns *CompactGlobulaNodeState) DeserializeFrom(_ DeserializeContext, reader io.Reader) error

func (*CompactGlobulaNodeState) SerializeTo

func (gns *CompactGlobulaNodeState) SerializeTo(_ SerializeContext, writer io.Writer) error

type ContextDeserializerFrom

type ContextDeserializerFrom interface {
	DeserializeFrom(ctx DeserializeContext, reader io.Reader) error
}

type ContextSerializerTo

type ContextSerializerTo interface {
	SerializeTo(ctx SerializeContext, writer io.Writer) error
}

type DeserializeContext

type DeserializeContext interface {
	PacketContext
}

type DeserializerFrom

type DeserializerFrom interface {
	DeserializeFrom(ctx context.Context, reader io.Reader) (int64, error)
}

type EmbeddedPulsarData

type EmbeddedPulsarData struct {
	Size uint16
	Data []byte

	PulsarPacketBody `insolar-transport:"ignore=send"` // ByteSize>=108

}

TODO: HACK!

func (*EmbeddedPulsarData) DeserializeFrom

func (pd *EmbeddedPulsarData) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*EmbeddedPulsarData) SerializeTo

func (pd *EmbeddedPulsarData) SerializeTo(ctx SerializeContext, writer io.Writer) error

type EmbeddedPulseReader

type EmbeddedPulseReader struct {
	MemberPacketReader
}

func (*EmbeddedPulseReader) GetEmbeddedPulsePacket

func (r *EmbeddedPulseReader) GetEmbeddedPulsePacket() transport.PulsePacketReader

func (*EmbeddedPulseReader) GetPulseNumber

func (p *EmbeddedPulseReader) GetPulseNumber() pulse.Number

func (*EmbeddedPulseReader) HasPulseData

func (r *EmbeddedPulseReader) HasPulseData() bool

type EmptyClaim

type EmptyClaim struct {
	// ByteSize=2
	ClaimHeader `insolar-transport:"delimiter;ClaimType=0;length=header"`
}

type ExtendedIntroReader

type ExtendedIntroReader struct {
	MemberPacketReader
}

func (*ExtendedIntroReader) GetCloudIntroduction

func (r *ExtendedIntroReader) GetCloudIntroduction() transport.CloudIntroductionReader

func (*ExtendedIntroReader) GetFullIntroduction

func (r *ExtendedIntroReader) GetFullIntroduction() transport.FullIntroductionReader

func (*ExtendedIntroReader) GetJoinerSecret

func (r *ExtendedIntroReader) GetJoinerSecret() cryptkit.DigestHolder

func (*ExtendedIntroReader) GetPulseNumber

func (p *ExtendedIntroReader) GetPulseNumber() pulse.Number

func (*ExtendedIntroReader) HasCloudIntro

func (r *ExtendedIntroReader) HasCloudIntro() bool

func (*ExtendedIntroReader) HasFullIntro

func (r *ExtendedIntroReader) HasFullIntro() bool

func (*ExtendedIntroReader) HasJoinerSecret

func (r *ExtendedIntroReader) HasJoinerSecret() bool

type FieldContext

type FieldContext uint

type Flag

type Flag uint8

type FullIntroductionReader

type FullIntroductionReader struct {
	MemberPacketReader
	// contains filtered or unexported fields
}

func (*FullIntroductionReader) GetBriefIntroSignedDigest

func (r *FullIntroductionReader) GetBriefIntroSignedDigest() cryptkit.SignedDigestHolder

func (*FullIntroductionReader) GetDefaultEndpoint

func (r *FullIntroductionReader) GetDefaultEndpoint() endpoints.Outbound

func (*FullIntroductionReader) GetExtraEndpoints

func (r *FullIntroductionReader) GetExtraEndpoints() []endpoints.Outbound

func (*FullIntroductionReader) GetIssuedAtPulse

func (r *FullIntroductionReader) GetIssuedAtPulse() pulse.Number

func (*FullIntroductionReader) GetIssuedAtTime

func (r *FullIntroductionReader) GetIssuedAtTime() time.Time

func (*FullIntroductionReader) GetIssuerID

func (r *FullIntroductionReader) GetIssuerID() node.ShortNodeID

func (*FullIntroductionReader) GetIssuerSignature

func (r *FullIntroductionReader) GetIssuerSignature() cryptkit.SignatureHolder

func (*FullIntroductionReader) GetNodePublicKey

func (r *FullIntroductionReader) GetNodePublicKey() cryptkit.SigningKeyHolder

func (*FullIntroductionReader) GetPowerLevels

func (r *FullIntroductionReader) GetPowerLevels() member.PowerSet

func (*FullIntroductionReader) GetPrimaryRole

func (r *FullIntroductionReader) GetPrimaryRole() member.PrimaryRole

func (*FullIntroductionReader) GetPulseNumber

func (p *FullIntroductionReader) GetPulseNumber() pulse.Number

func (*FullIntroductionReader) GetReference

func (r *FullIntroductionReader) GetReference() reference.Global

func (*FullIntroductionReader) GetSpecialRoles

func (r *FullIntroductionReader) GetSpecialRoles() member.SpecialRole

func (*FullIntroductionReader) GetStartPower

func (r *FullIntroductionReader) GetStartPower() member.Power

func (*FullIntroductionReader) GetStaticNodeID

func (r *FullIntroductionReader) GetStaticNodeID() node.ShortNodeID

type GenericClaim

type GenericClaim struct {
	// ByteSize>=2
	ClaimHeader
	Payload []byte
}

func NewGenericClaim

func NewGenericClaim(payload []byte) GenericClaim

func (*GenericClaim) SerializeTo

func (c *GenericClaim) SerializeTo(ctx SerializeContext, writer io.Writer) error

type GlobulaConsensusPacketBody

type GlobulaConsensusPacketBody struct {

	// Phases 0-2
	// - Phase0 is not sent to joiners and suspects, and PulsarPacket field must not be sent by joiners
	CurrentRank  member.Rank            `insolar-transport:"Packet=0"`                           // ByteSize=4
	PulsarPacket EmbeddedPulsarData     `insolar-transport:"Packet=0,1;optional=PacketFlags[0]"` // ByteSize>=124
	Announcement MembershipAnnouncement `insolar-transport:"Packet=1,2"`                         // ByteSize= (JOINER) 5, (MEMBER) 201, 205 (MEMBER+JOINER) 196, 198, 208

	// This field can be included by sender who has introduced a joiner to facilitate joining process, and contains full intro data of the joiner
	// This field  is not mandatory and can be omitted, e.g. when network is stable or some space is required for claims
	JoinerExt NodeExtendedIntro `insolar-transport:"Packet=1;optional=PacketFlags[3]"`

	/*
		FullSelfIntro MUST be included when any of the following are true
			1. sender or receiver is a joiner
			2. sender or receiver is suspect and the other node was joined after this node became suspect
	*/
	BriefSelfIntro NodeBriefIntro   `insolar-transport:"Packet=  2;optional=PacketFlags[1:2]=1"`   // ByteSize= 135, 137, 147
	FullSelfIntro  NodeFullIntro    `insolar-transport:"Packet=1,2;optional=PacketFlags[1:2]=2,3"` // ByteSize>= 221, 223, 233
	CloudIntro     CloudIntro       `insolar-transport:"Packet=1,2;optional=PacketFlags[1:2]=2,3"` // ByteSize= 128
	JoinerSecret   longbits.Bits512 `insolar-transport:"Packet=1,2;optional=PacketFlags[1:2]=3"`   // ByteSize= 64

	Neighbourhood Neighbourhood `insolar-transport:"Packet=2"` // ByteSize= 1 + N * (205 .. 220)
	Vectors       NodeVectors   `insolar-transport:"Packet=3"` // ByteSize=133..599

	Claims ClaimList `insolar-transport:"Packet=1,3"` // ByteSize= 1 + ...
}

func (*GlobulaConsensusPacketBody) DeserializeFrom

func (b *GlobulaConsensusPacketBody) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*GlobulaConsensusPacketBody) SerializeTo

func (b *GlobulaConsensusPacketBody) SerializeTo(ctx SerializeContext, writer io.Writer) error

func (*GlobulaConsensusPacketBody) String

type GlobulaStateVector

type GlobulaStateVector struct {
	// ByteSize=132
	ExpectedRank           member.Rank      // ByteSize=4
	VectorHash             longbits.Bits512 // ByteSize=64
	SignedGlobulaStateHash longbits.Bits512 // ByteSize=64
}

func (*GlobulaStateVector) DeserializeFrom

func (gsv *GlobulaStateVector) DeserializeFrom(_ DeserializeContext, reader io.Reader) error

func (*GlobulaStateVector) SerializeTo

func (gsv *GlobulaStateVector) SerializeTo(_ SerializeContext, writer io.Writer) error

func (GlobulaStateVector) String

func (gsv GlobulaStateVector) String() string
type Header struct {
	/*
		Functions of TargetID, SourceID and RelayId depends on ProtocolType
	*/
	ReceiverID uint32 // NB! MUST for Signature calculation must be considered as 0, actual value can be different

	ProtocolAndPacketType  uint8  `insolar-transport:"[0:3]=header:Packet;[4:7]=header:Protocol"` // [00-03]PacketType [04-07]ProtocolType
	PacketFlags            uint8  `insolar-transport:"[0]=IsRelayRestricted;[1]=IsBodyEncrypted;[2:]=flags:PacketFlags"`
	HeaderAndPayloadLength uint16 // [00-13] ByteLength of Payload, [14-15] reserved = 0
	SourceID               uint32 // may differ from actual sender when relay is in use, MUST NOT =0
	TargetID               uint32 // indicates final destination, if =0 then there is no relay allowed by sender and receiver MUST decline a packet if actual sender != source
}

ByteSize=16

func (*Header) ClearFlag

func (h *Header) ClearFlag(f Flag)

func (*Header) DeserializeFrom

func (h *Header) DeserializeFrom(_ DeserializeContext, reader io.Reader) error

func (*Header) GetFlagRangeInt

func (h *Header) GetFlagRangeInt(from, to uint8) uint8

func (*Header) GetPacketType

func (h *Header) GetPacketType() phases.PacketType

func (*Header) GetProtocolType

func (h *Header) GetProtocolType() ProtocolType

func (*Header) GetSourceID

func (h *Header) GetSourceID() node.ShortNodeID

func (*Header) HasFlag

func (h *Header) HasFlag(f Flag) bool

func (*Header) IsBodyEncrypted

func (h *Header) IsBodyEncrypted() bool

func (*Header) IsRelayRestricted

func (h *Header) IsRelayRestricted() bool

func (*Header) SerializeTo

func (h *Header) SerializeTo(_ SerializeContext, writer io.Writer) error

func (*Header) SetFlag

func (h *Header) SetFlag(f Flag)

type JoinAnnouncement

type JoinAnnouncement struct {
	// ByteSize= 135, 137, 147
	NodeBriefIntro
}

type JoinerAnnouncementReader

type JoinerAnnouncementReader struct {
	MemberPacketReader
	// contains filtered or unexported fields
}

func (*JoinerAnnouncementReader) GetBriefIntroduction

func (*JoinerAnnouncementReader) GetFullIntroduction

func (*JoinerAnnouncementReader) GetJoinerIntroducedByID

func (r *JoinerAnnouncementReader) GetJoinerIntroducedByID() node.ShortNodeID

func (*JoinerAnnouncementReader) GetPulseNumber

func (p *JoinerAnnouncementReader) GetPulseNumber() pulse.Number

func (*JoinerAnnouncementReader) HasFullIntro

func (r *JoinerAnnouncementReader) HasFullIntro() bool

type LeaveAnnouncement

type LeaveAnnouncement struct {
	// ByteSize = 4
	LeaveReason uint32
}

func (*LeaveAnnouncement) DeserializeFrom

func (la *LeaveAnnouncement) DeserializeFrom(_ DeserializeContext, reader io.Reader) error

func (*LeaveAnnouncement) SerializeTo

func (la *LeaveAnnouncement) SerializeTo(_ SerializeContext, writer io.Writer) error

type MemberPacketReader

type MemberPacketReader struct {
	PacketParser
	// contains filtered or unexported fields
}

func (*MemberPacketReader) AsPhase0Packet

func (r *MemberPacketReader) AsPhase0Packet() transport.Phase0PacketReader

func (*MemberPacketReader) AsPhase1Packet

func (r *MemberPacketReader) AsPhase1Packet() transport.Phase1PacketReader

func (*MemberPacketReader) AsPhase2Packet

func (r *MemberPacketReader) AsPhase2Packet() transport.Phase2PacketReader

func (*MemberPacketReader) AsPhase3Packet

func (r *MemberPacketReader) AsPhase3Packet() transport.Phase3PacketReader

func (*MemberPacketReader) GetPulseNumber

func (p *MemberPacketReader) GetPulseNumber() pulse.Number

type MembershipAnnouncement

type MembershipAnnouncement struct {

	/*
		This field MUST be excluded from the packet, but considered for signature calculation.
		Value of this field equals SourceID
	*/
	ShortID node.ShortNodeID `insolar-transport:"ignore=send"` // ByteSize = 0

	CurrentRank    member.Rank  // ByteSize=4
	RequestedPower member.Power // ByteSize=1

	/* For non-joiner ONLY */
	Member            NodeAnnouncement `insolar-transport:"optional=CurrentRank!=0"` // ByteSize = 132, 136, 267, 269, 279
	AnnounceSignature longbits.Bits512 `insolar-transport:"optional=CurrentRank!=0"` // ByteSize = 64

}

func (*MembershipAnnouncement) DeserializeFrom

func (ma *MembershipAnnouncement) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*MembershipAnnouncement) SerializeTo

func (ma *MembershipAnnouncement) SerializeTo(ctx SerializeContext, writer io.Writer) error

func (MembershipAnnouncement) String

func (ma MembershipAnnouncement) String() string

type MembershipAnnouncementReader

type MembershipAnnouncementReader struct {
	MemberPacketReader
}

func (*MembershipAnnouncementReader) GetAnnouncementSignature

func (r *MembershipAnnouncementReader) GetAnnouncementSignature() proofs.MemberAnnouncementSignature

func (*MembershipAnnouncementReader) GetJoinerAnnouncement

func (*MembershipAnnouncementReader) GetJoinerID

func (*MembershipAnnouncementReader) GetLeaveReason

func (r *MembershipAnnouncementReader) GetLeaveReason() uint32

func (*MembershipAnnouncementReader) GetNodeID

func (*MembershipAnnouncementReader) GetNodeRank

func (r *MembershipAnnouncementReader) GetNodeRank() member.Rank

func (*MembershipAnnouncementReader) GetNodeStateHashEvidence

func (r *MembershipAnnouncementReader) GetNodeStateHashEvidence() proofs.NodeStateHashEvidence

func (*MembershipAnnouncementReader) GetPulseNumber

func (p *MembershipAnnouncementReader) GetPulseNumber() pulse.Number

func (*MembershipAnnouncementReader) GetRequestedPower

func (r *MembershipAnnouncementReader) GetRequestedPower() member.Power

func (*MembershipAnnouncementReader) IsLeaving

func (r *MembershipAnnouncementReader) IsLeaving() bool

type NeighbourAnnouncement

type NeighbourAnnouncement struct {
	// ByteSize(JOINER) = 73 + (135, 137, 147) = 208, 210, 220
	// ByteSize(MEMBER) = 73 + (132, 136) = 205, 209
	NeighbourNodeID node.ShortNodeID // ByteSize=4 // !=0

	CurrentRank    member.Rank  // ByteSize=4
	RequestedPower member.Power // ByteSize=1

	/*
		As joiner has no state before joining, its announcement and relevant signature are considered equal to
		NodeBriefIntro and related signature, and CurrentRank of joiner will always be ZERO, as joiner has no index/nodeCount/power.

		Fields "Joiner" and "JoinerIntroducedBy" MUST BE OMITTED when this joiner is introduced by the sending node
	*/
	// TODO merge "Joiner" and "JoinerIntroducedBy" fields into NeighbourJoinerAnnouncement
	Joiner             JoinAnnouncement `insolar-transport:"optional=CurrentRank==0"` // ByteSize = 135, 137, 147
	JoinerIntroducedBy node.ShortNodeID `insolar-transport:"optional=CurrentRank==0"`

	/* For non-joiner */
	Member NodeAnnouncement `insolar-transport:"optional=CurrentRank!=0"` // ByteSize = 132, 136

	/* AnnounceSignature is copied from the original Phase1 */
	AnnounceSignature longbits.Bits512 // ByteSize = 64
}

func (*NeighbourAnnouncement) DeserializeFrom

func (na *NeighbourAnnouncement) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*NeighbourAnnouncement) SerializeTo

func (na *NeighbourAnnouncement) SerializeTo(ctx SerializeContext, writer io.Writer) error

func (NeighbourAnnouncement) String

func (na NeighbourAnnouncement) String() string

type NeighbourAnnouncementReader

type NeighbourAnnouncementReader struct {
	MemberPacketReader
	// contains filtered or unexported fields
}

func (*NeighbourAnnouncementReader) GetAnnouncementSignature

func (r *NeighbourAnnouncementReader) GetAnnouncementSignature() proofs.MemberAnnouncementSignature

func (*NeighbourAnnouncementReader) GetJoinerAnnouncement

func (*NeighbourAnnouncementReader) GetJoinerID

func (r *NeighbourAnnouncementReader) GetJoinerID() node.ShortNodeID

func (*NeighbourAnnouncementReader) GetLeaveReason

func (r *NeighbourAnnouncementReader) GetLeaveReason() uint32

func (*NeighbourAnnouncementReader) GetNodeID

func (*NeighbourAnnouncementReader) GetNodeRank

func (r *NeighbourAnnouncementReader) GetNodeRank() member.Rank

func (*NeighbourAnnouncementReader) GetNodeStateHashEvidence

func (r *NeighbourAnnouncementReader) GetNodeStateHashEvidence() proofs.NodeStateHashEvidence

func (*NeighbourAnnouncementReader) GetPulseNumber

func (p *NeighbourAnnouncementReader) GetPulseNumber() pulse.Number

func (*NeighbourAnnouncementReader) GetRequestedPower

func (r *NeighbourAnnouncementReader) GetRequestedPower() member.Power

func (*NeighbourAnnouncementReader) IsLeaving

func (r *NeighbourAnnouncementReader) IsLeaving() bool

type Neighbourhood

type Neighbourhood struct {
	// ByteSize= 1 + N * (205 .. 220)
	NeighbourCount uint8
	FraudFlags     []uint8
	Neighbours     []NeighbourAnnouncement
}

func (*Neighbourhood) DeserializeFrom

func (n *Neighbourhood) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*Neighbourhood) SerializeTo

func (n *Neighbourhood) SerializeTo(ctx SerializeContext, writer io.Writer) error

func (Neighbourhood) String

func (n Neighbourhood) String() string

type NodeAnnouncement

type NodeAnnouncement struct {
	NodeState  CompactGlobulaNodeState // ByteSize=128
	AnnounceID node.ShortNodeID        // ByteSize=4 // =0 - no announcement, =self - is leaver, else has joiner
	/*
		1. When is in MembershipAnnouncement
			"Leaver" is present when AnnounceID = Header.SourceID (sender is leaving)
		2. When is in NeighbourAnnouncement
			"Leaver" is present when AnnounceID = NeighbourNodeID (neighbour is leaving)
	*/
	Leaver LeaveAnnouncement `insolar-transport:"optional"` // ByteSize = 4
	/*
		1. "Joiner" is NEVER present when "Leaver" is present
		2. when AnnounceID != 0 (sender/neighbour has introduced a joiner with AnnounceID)
			a. "Joiner" is present when is in MembershipAnnouncement
			b. "Joiner" is NEVER present when is in NeighbourAnnouncement
	*/
	Joiner JoinAnnouncement `insolar-transport:"optional"` // ByteSize = 135, 137, 147
}

func (*NodeAnnouncement) DeserializeFrom

func (na *NodeAnnouncement) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*NodeAnnouncement) SerializeTo

func (na *NodeAnnouncement) SerializeTo(ctx SerializeContext, writer io.Writer) error

func (NodeAnnouncement) String

func (na NodeAnnouncement) String() string

type NodeAppearanceBitset

type NodeAppearanceBitset struct {
	// ByteSize=1..335
	FlagsAndLoLength uint8 // [00-05] LoByteLength, [06] Compressed, [07] HasHiLength (to be compatible with Protobuf VarInt)
	HiLength         uint8 // [00-06] HiByteLength, [07] MUST = 0 (to be compatible with Protobuf VarInt)
	Bytes            []byte
}

func (*NodeAppearanceBitset) DeserializeFrom

func (nab *NodeAppearanceBitset) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*NodeAppearanceBitset) GetBitset

func (nab *NodeAppearanceBitset) GetBitset() member.StateBitset

func (*NodeAppearanceBitset) SerializeTo

func (nab *NodeAppearanceBitset) SerializeTo(ctx SerializeContext, writer io.Writer) error

func (*NodeAppearanceBitset) SetBitset

func (nab *NodeAppearanceBitset) SetBitset(bitset member.StateBitset)

type NodeBriefIntro

type NodeBriefIntro struct {

	/*
		This field MUST be excluded from the packet, but considered for signature calculation.
		Value of this field equals SourceID or AnnounceID.
	*/
	ShortID node.ShortNodeID `insolar-transport:"ignore=send"` // ByteSize = 0

	PrimaryRoleAndFlags uint8 `insolar-transport:"[0:5]=header:PrimaryRole;[6:7]=header:AddrMode"` // AddrMode =0 reserved, =1 Relay, =2 IPv4 =3 IPv6
	SpecialRoles        member.SpecialRole
	StartPower          member.Power

	// 4 | 6 | 18 bytes
	// InboundRelayID common.ShortNodeID `insolar-transport:"AddrMode=2"`
	// BasePort    uint16 `insolar-transport:"AddrMode=0,1"`
	// PrimaryIPv4 uint32 `insolar-transport:"AddrMode=0"`
	// PrimaryIPv6    [4]uint32          `insolar-transport:"AddrMode=1"`
	Endpoint [18]byte

	// 128 bytes
	NodePK longbits.Bits512 // works as a unique node identity

	JoinerData      []byte           `insolar-transport:"ignore=send"` // ByteSize = 0
	JoinerSignature longbits.Bits512 // ByteSize=64
}

func (*NodeBriefIntro) DeserializeFrom

func (bi *NodeBriefIntro) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*NodeBriefIntro) GetAddrMode

func (bi *NodeBriefIntro) GetAddrMode() endpoints.NodeEndpointType

func (*NodeBriefIntro) GetPrimaryRole

func (bi *NodeBriefIntro) GetPrimaryRole() member.PrimaryRole

func (*NodeBriefIntro) SerializeTo

func (bi *NodeBriefIntro) SerializeTo(ctx SerializeContext, writer io.Writer) error

func (*NodeBriefIntro) SetAddrMode

func (bi *NodeBriefIntro) SetAddrMode(addrMode endpoints.NodeEndpointType)

func (*NodeBriefIntro) SetPrimaryRole

func (bi *NodeBriefIntro) SetPrimaryRole(primaryRole member.PrimaryRole)

type NodeExtendedIntro

type NodeExtendedIntro struct {
	// ByteSize>=86
	IssuedAtPulse pulse.Number // =0 when a node was connected during zeronet
	IssuedAtTime  uint64

	PowerLevels member.PowerSet // ByteSize=4

	EndpointLen    uint8
	ExtraEndpoints []uint16

	ProofLen     uint8
	NodeRefProof []longbits.Bits512

	DiscoveryIssuerNodeID node.ShortNodeID
	IssuerSignature       longbits.Bits512
}

func (*NodeExtendedIntro) DeserializeFrom

func (ei *NodeExtendedIntro) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*NodeExtendedIntro) SerializeTo

func (ei *NodeExtendedIntro) SerializeTo(ctx SerializeContext, writer io.Writer) error

type NodeFullIntro

type NodeFullIntro struct {
	NodeBriefIntro    // ByteSize= 135, 137, 147
	NodeExtendedIntro // ByteSize>=86
}

func (*NodeFullIntro) DeserializeFrom

func (fi *NodeFullIntro) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*NodeFullIntro) SerializeTo

func (fi *NodeFullIntro) SerializeTo(ctx SerializeContext, writer io.Writer) error

type NodeVectors

type NodeVectors struct {
	// ByteSize=133..599
	/*
		GlobulaNodeBitset is a 5-state bitset, each node has a state at the same index as it was given in the current rank.
		Node have following states:
		0 - z-value (same as missing value) Trusted node
		1 - Doubted node
		2 -
		3 - Fraud node
		4 - Missing node
	*/
	StateVectorMask        NodeAppearanceBitset // ByteSize=1..335
	MainStateVector        GlobulaStateVector   // ByteSize=132
	AdditionalStateVectors []GlobulaStateVector `insolar-transport:"count=PacketFlags[1:2]"` // ByteSize=count * 132
}

func (*NodeVectors) DeserializeFrom

func (nv *NodeVectors) DeserializeFrom(ctx DeserializeContext, reader io.Reader) error

func (*NodeVectors) SerializeTo

func (nv *NodeVectors) SerializeTo(ctx SerializeContext, writer io.Writer) error

func (NodeVectors) String

func (nv NodeVectors) String() string

type Packet

type Packet struct {
	Header      Header       `insolar-transport:"Protocol=0x01;Packet=0-4"` // ByteSize=16
	PulseNumber pulse.Number `insolar-transport:"[30-31]=0"`                // [30-31] MUST ==0, ByteSize=4

	EncryptableBody PacketBody
	EncryptionData  []byte

	PacketSignature longbits.Bits512 `insolar-transport:"generate=signature"` // ByteSize=64
}

func BuildPulsarPacket

func BuildPulsarPacket(ctc context.Context, pd pulse.Data) *Packet

func (*Packet) DeserializeFrom

func (p *Packet) DeserializeFrom(ctx context.Context, reader io.Reader) (int64, error)

func (*Packet) SerializeTo

func (p *Packet) SerializeTo(ctx context.Context, writer io.Writer, digester cryptkit.DataDigester, signer cryptkit.DigestSigner) (int64, error)

func (Packet) String

func (p Packet) String() string

type PacketBody

type PacketBody interface {
	ContextSerializerTo
	ContextDeserializerFrom

	String(ctx PacketContext) string
}

type PacketBuilder

type PacketBuilder struct {
	// contains filtered or unexported fields
}

func (*PacketBuilder) GetNeighbourhoodSize

func (pb *PacketBuilder) GetNeighbourhoodSize() transport.NeighbourhoodSizes

func (*PacketBuilder) PreparePhase0Packet

func (*PacketBuilder) PreparePhase3Packet

type PacketContext

type PacketContext interface {
	PacketHeaderAccessor
	context.Context

	InContext(ctx FieldContext) bool
	SetInContext(ctx FieldContext)
	GetNeighbourNodeID() node.ShortNodeID
	SetNeighbourNodeID(nodeID node.ShortNodeID)
	GetAnnouncedJoinerNodeID() node.ShortNodeID
	SetAnnouncedJoinerNodeID(nodeID node.ShortNodeID)
}

type PacketHeaderAccessor

type PacketHeaderAccessor interface {
	GetProtocolType() ProtocolType
	GetPacketType() phases.PacketType
	GetSourceID() node.ShortNodeID
	HasFlag(flag Flag) bool
	GetFlagRangeInt(from, to uint8) uint8
	IsRelayRestricted() bool
	IsBodyEncrypted() bool
}

type PacketHeaderModifier

type PacketHeaderModifier interface {
	SetFlag(flag Flag)
	ClearFlag(flag Flag)
}

type PacketParser

type PacketParser struct {
	// contains filtered or unexported fields
}

func (*PacketParser) GetMemberPacket

func (p *PacketParser) GetMemberPacket() transport.MemberPacketReader

func (*PacketParser) GetPacketSignature

func (p *PacketParser) GetPacketSignature() cryptkit.SignedDigest

func (*PacketParser) GetPacketType

func (p *PacketParser) GetPacketType() phases.PacketType

func (*PacketParser) GetPulseNumber

func (p *PacketParser) GetPulseNumber() pulse.Number

func (*PacketParser) GetPulsePacket

func (p *PacketParser) GetPulsePacket() transport.PulsePacketReader

func (*PacketParser) GetReceiverID

func (p *PacketParser) GetReceiverID() node.ShortNodeID

func (*PacketParser) GetSourceID

func (p *PacketParser) GetSourceID() node.ShortNodeID

func (*PacketParser) GetTargetID

func (p *PacketParser) GetTargetID() node.ShortNodeID

func (*PacketParser) IsRelayForbidden

func (p *PacketParser) IsRelayForbidden() bool

func (*PacketParser) ParsePacketBody

func (p *PacketParser) ParsePacketBody() (transport.PacketParser, error)

func (PacketParser) String

func (p PacketParser) String() string

type PacketParserFactory

type PacketParserFactory struct {
	// contains filtered or unexported fields
}

func NewPacketParserFactory

func NewPacketParserFactory(
	digester cryptkit.DataDigester,
	signMethod cryptkit.SigningMethod,
	keyProcessor cryptography.KeyProcessor,
) *PacketParserFactory

func (*PacketParserFactory) ParsePacket

func (f *PacketParserFactory) ParsePacket(ctx context.Context, reader io.Reader) (transport.PacketParser, error)

type Phase0PacketReader

type Phase0PacketReader struct {
	MemberPacketReader
	EmbeddedPulseReader
}

func (*Phase0PacketReader) GetNodeRank

func (r *Phase0PacketReader) GetNodeRank() member.Rank

func (*Phase0PacketReader) GetPulseNumber

func (p *Phase0PacketReader) GetPulseNumber() pulse.Number

type Phase1PacketReader

type Phase1PacketReader struct {
	MemberPacketReader
	ExtendedIntroReader
	EmbeddedPulseReader
}

func (*Phase1PacketReader) GetAnnouncementReader

func (r *Phase1PacketReader) GetAnnouncementReader() transport.MembershipAnnouncementReader

func (*Phase1PacketReader) GetPulseNumber

func (p *Phase1PacketReader) GetPulseNumber() pulse.Number

type Phase2PacketReader

type Phase2PacketReader struct {
	MemberPacketReader
	ExtendedIntroReader
}

func (*Phase2PacketReader) GetAnnouncementReader

func (r *Phase2PacketReader) GetAnnouncementReader() transport.MembershipAnnouncementReader

func (*Phase2PacketReader) GetBriefIntroduction

func (r *Phase2PacketReader) GetBriefIntroduction() transport.BriefIntroductionReader

func (*Phase2PacketReader) GetNeighbourhood

func (*Phase2PacketReader) GetPulseNumber

func (p *Phase2PacketReader) GetPulseNumber() pulse.Number

type Phase3PacketReader

type Phase3PacketReader struct {
	MemberPacketReader
}

func (*Phase3PacketReader) GetBitset

func (r *Phase3PacketReader) GetBitset() member.StateBitset

func (*Phase3PacketReader) GetDoubtedExpectedRank

func (r *Phase3PacketReader) GetDoubtedExpectedRank() member.Rank

func (*Phase3PacketReader) GetDoubtedGlobulaAnnouncementHash

func (r *Phase3PacketReader) GetDoubtedGlobulaAnnouncementHash() proofs.GlobulaAnnouncementHash

func (*Phase3PacketReader) GetDoubtedGlobulaStateSignature

func (r *Phase3PacketReader) GetDoubtedGlobulaStateSignature() proofs.GlobulaStateSignature

func (*Phase3PacketReader) GetPulseNumber

func (p *Phase3PacketReader) GetPulseNumber() pulse.Number

func (*Phase3PacketReader) GetTrustedExpectedRank

func (r *Phase3PacketReader) GetTrustedExpectedRank() member.Rank

func (*Phase3PacketReader) GetTrustedGlobulaAnnouncementHash

func (r *Phase3PacketReader) GetTrustedGlobulaAnnouncementHash() proofs.GlobulaAnnouncementHash

func (*Phase3PacketReader) GetTrustedGlobulaStateSignature

func (r *Phase3PacketReader) GetTrustedGlobulaStateSignature() proofs.GlobulaStateSignature

type PreparedPacketSender

type PreparedPacketSender struct {
	// contains filtered or unexported fields
}

func (*PreparedPacketSender) Copy

func (*PreparedPacketSender) SendTo

func (*PreparedPacketSender) SendToMany

func (p *PreparedPacketSender) SendToMany(
	ctx context.Context,
	targetCount int,
	sender transport.PacketSender,
	filter transport.ProfileFilter,
)

type ProtocolType

type ProtocolType uint8

func (ProtocolType) NewBody

func (pt ProtocolType) NewBody() PacketBody

type PulsarPacketBody

type PulsarPacketBody struct {
	// ByteSize>=108
	PulseNumber           pulse.Number  `insolar-transport:"ignore=send"`
	PulseDataExt          pulse.DataExt // ByteSize=44
	PulsarConsensusProofs []byte        // variable lengths >=0
}

func (*PulsarPacketBody) DeserializeFrom

func (b *PulsarPacketBody) DeserializeFrom(_ DeserializeContext, reader io.Reader) error

func (*PulsarPacketBody) SerializeTo

func (b *PulsarPacketBody) SerializeTo(_ SerializeContext, writer io.Writer) error

func (*PulsarPacketBody) String

func (b *PulsarPacketBody) String(ctx PacketContext) string

type SerializeContext

type SerializeContext interface {
	PacketHeaderModifier
	PacketContext
}

type SerializerTo

type SerializerTo interface {
	SerializeTo(ctx context.Context, writer io.Writer, digester cryptkit.DataDigester, signer cryptkit.DigestSigner) (int64, error)
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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