Documentation ¶
Index ¶
- Constants
- Variables
- func MessageFixture(t *testing.T, codec network.Codec, protocol Protocol, content interface{}) (*Message, *Event, *flow.Identity)
- func MessageFixtures(t *testing.T, codec network.Codec, protocol Protocol, count int) ([]*Message, []*Event, flow.IdentityList)
- func ProtocolStr(p Protocol) string
- func RegisterCorruptibleConduitFactoryServer(s *grpc.Server, srv CorruptibleConduitFactoryServer)
- type AttackNetwork
- type AttackOrchestrator
- type ConduitController
- type CorruptedNodeConnection
- type CorruptedNodeConnector
- type CorruptibleConduitFactoryClient
- type CorruptibleConduitFactoryServer
- type CorruptibleConduitFactory_ConnectAttackerClient
- type CorruptibleConduitFactory_ConnectAttackerServer
- type CorruptibleConduitFactory_ProcessAttackerMessageClient
- type CorruptibleConduitFactory_ProcessAttackerMessageServer
- type Event
- type Message
- func (*Message) Descriptor() ([]byte, []int)
- func (m *Message) GetChannelID() string
- func (m *Message) GetOriginID() []byte
- func (m *Message) GetPayload() []byte
- func (m *Message) GetProtocol() Protocol
- func (m *Message) GetTargetIDs() [][]byte
- func (m *Message) GetTargetNum() uint32
- func (*Message) ProtoMessage()
- func (m *Message) Reset()
- func (m *Message) String() string
- func (m *Message) XXX_DiscardUnknown()
- func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Message) XXX_Merge(src proto.Message)
- func (m *Message) XXX_Size() int
- func (m *Message) XXX_Unmarshal(b []byte) error
- type Protocol
- type UnimplementedCorruptibleConduitFactoryServer
Constants ¶
const ( ProtocolUnicast = "protocol-unicast" ProtocolMulticast = "protocol-multicast" ProtocolPublish = "protocol-publish" ProtocolUnknown = "unknown-protocol" )
Variables ¶
var Protocol_name = map[int32]string{
0: "UNKNOWN",
1: "UNICAST",
2: "MULTICAST",
3: "PUBLISH",
}
var Protocol_value = map[string]int32{
"UNKNOWN": 0,
"UNICAST": 1,
"MULTICAST": 2,
"PUBLISH": 3,
}
Functions ¶
func MessageFixture ¶ added in v0.26.0
func MessageFixture(t *testing.T, codec network.Codec, protocol Protocol, content interface{}) (*Message, *Event, *flow.Identity)
MessageFixture creates and returns a randomly generated gRPC message that is sent between a corruptible conduit and the attack network. It also generates and returns the corresponding application-layer event of that message, which is sent between the attack network and the orchestrator.
func MessageFixtures ¶ added in v0.26.0
func MessageFixtures(t *testing.T, codec network.Codec, protocol Protocol, count int) ([]*Message, []*Event, flow.IdentityList)
MessageFixtures creates and returns randomly generated gRCP messages and their corresponding protocol-level events. The messages are sent between a corruptible conduit and the attack network. The events are the corresponding protocol-level representation of messages.
func ProtocolStr ¶ added in v0.26.0
func RegisterCorruptibleConduitFactoryServer ¶
func RegisterCorruptibleConduitFactoryServer(s *grpc.Server, srv CorruptibleConduitFactoryServer)
Types ¶
type AttackNetwork ¶
type AttackNetwork interface { component.Component // Send enforces dissemination of given event via its encapsulated corrupted node networking layer through the Flow network. Send(*Event) error // Observe is the inbound message handler of the attack network. // Instead of dispatching their messages to the networking layer of Flow, the conduits of corrupted nodes // dispatch the outgoing message to the attack network through a remote call to this method. Observe(*Message) }
AttackNetwork represents the networking interface that is available to the attacker for sending messages "through" corrupted nodes "to" the rest of the network.
type AttackOrchestrator ¶
type AttackOrchestrator interface { // HandleEventFromCorruptedNode implements logic of processing the events received from a corrupted node. // // In Corruptible Conduit Framework for BFT testing, corrupted nodes relay their outgoing events to // the attacker instead of dispatching them to the network. // // Note: as a design assumption, this method is invoked sequentially by the AttackNetwork to pass the // events of corrupted nodes. Hence, no extra concurrency-safe consideration is needed. HandleEventFromCorruptedNode(*Event) error WithAttackNetwork(AttackNetwork) }
AttackOrchestrator represents the stateful interface that implements a certain type of attack, e.g., wintermute attack.
type ConduitController ¶ added in v0.25.2
type ConduitController interface { // HandleIncomingEvent sends an incoming event to the conduit factory to process. HandleIncomingEvent(interface{}, channels.Channel, Protocol, uint32, ...flow.Identifier) error // EngineClosingChannel informs the conduit factory that the corresponding engine of the given channel is not going to // use it anymore, hence the channel can be closed. EngineClosingChannel(channels.Channel) error }
ConduitController defines part of the behavior of a corruptible conduit factory that controls the conduits it creates.
type CorruptedNodeConnection ¶ added in v0.25.2
type CorruptedNodeConnection interface { // SendMessage sends the message from orchestrator to the corrupted conduit factory. SendMessage(*Message) error // CloseConnection closes the connection to the corrupted conduit factory. CloseConnection() error }
CorruptedNodeConnection abstracts connection from orchestrator to a corrupted conduit factory through the attack network.
type CorruptedNodeConnector ¶ added in v0.25.2
type CorruptedNodeConnector interface { // Connect creates a connection the corruptible conduit factory of the given corrupted identity. Connect(irrecoverable.SignalerContext, flow.Identifier) (CorruptedNodeConnection, error) // WithIncomingMessageHandler sets the handler for the incoming messages from remote corrupted nodes. WithIncomingMessageHandler(func(*Message)) }
CorruptedNodeConnector establishes a connection to a remote corrupted node.
type CorruptibleConduitFactoryClient ¶
type CorruptibleConduitFactoryClient interface { ConnectAttacker(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (CorruptibleConduitFactory_ConnectAttackerClient, error) ProcessAttackerMessage(ctx context.Context, opts ...grpc.CallOption) (CorruptibleConduitFactory_ProcessAttackerMessageClient, error) }
CorruptibleConduitFactoryClient is the client API for CorruptibleConduitFactory service.
For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.
func NewCorruptibleConduitFactoryClient ¶
func NewCorruptibleConduitFactoryClient(cc *grpc.ClientConn) CorruptibleConduitFactoryClient
type CorruptibleConduitFactoryServer ¶
type CorruptibleConduitFactoryServer interface { ConnectAttacker(*empty.Empty, CorruptibleConduitFactory_ConnectAttackerServer) error ProcessAttackerMessage(CorruptibleConduitFactory_ProcessAttackerMessageServer) error }
CorruptibleConduitFactoryServer is the server API for CorruptibleConduitFactory service.
type CorruptibleConduitFactory_ConnectAttackerClient ¶ added in v0.27.0
type CorruptibleConduitFactory_ConnectAttackerClient interface { Recv() (*Message, error) grpc.ClientStream }
type CorruptibleConduitFactory_ConnectAttackerServer ¶ added in v0.27.0
type CorruptibleConduitFactory_ConnectAttackerServer interface { Send(*Message) error grpc.ServerStream }
type Event ¶ added in v0.25.2
type Event struct { CorruptedNodeId flow.Identifier // identifier of corrupted flow node that this corruptible conduit belongs to Channel channels.Channel // channel of the event on the corrupted conduit Protocol Protocol // networking-layer protocol that this event was meant to send on. TargetNum uint32 // number of randomly chosen targets (used in multicast protocol). // set of target identifiers (can be any subset of nodes, either honest or corrupted). TargetIds flow.IdentifierList // the protocol-level event that the corrupted node is relaying to // the attacker. The event is originated by the corrupted node, and is // sent to attacker to decide on its content before dispatching it to the // Flow network. FlowProtocolEvent interface{} }
Event represents the data model that is exchanged between the attacker and the attack orchestrator. An event is the protocol-level representation of an outgoing message of a corruptible conduit. The corruptible conduit relays the message to the attacker instead of dispatching it through the Flow network. The attacker decodes the message into an event and relays it to the orchestrator. Each corrupted conduit is uniquely identified by 1) corrupted node ID and 2) channel
type Message ¶
type Message struct { ChannelID string `protobuf:"bytes,1,opt,name=ChannelID,proto3" json:"ChannelID,omitempty"` OriginID []byte `protobuf:"bytes,2,opt,name=OriginID,proto3" json:"OriginID,omitempty"` TargetNum uint32 `protobuf:"varint,3,opt,name=TargetNum,proto3" json:"TargetNum,omitempty"` TargetIDs [][]byte `protobuf:"bytes,4,rep,name=TargetIDs,proto3" json:"TargetIDs,omitempty"` Payload []byte `protobuf:"bytes,5,opt,name=Payload,proto3" json:"Payload,omitempty"` Protocol Protocol `protobuf:"varint,6,opt,name=protocol,proto3,enum=corruptible.Protocol" json:"protocol,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` }
Message is represents the message exchanged between the CorruptibleConduitFactory and Attacker services.
func (*Message) Descriptor ¶
func (*Message) GetChannelID ¶
func (*Message) GetOriginID ¶
func (*Message) GetPayload ¶
func (*Message) GetProtocol ¶
func (*Message) GetTargetIDs ¶
func (*Message) GetTargetNum ¶ added in v0.25.2
func (*Message) ProtoMessage ¶
func (*Message) ProtoMessage()
func (*Message) XXX_DiscardUnknown ¶
func (m *Message) XXX_DiscardUnknown()
func (*Message) XXX_Marshal ¶
func (*Message) XXX_Unmarshal ¶
type UnimplementedCorruptibleConduitFactoryServer ¶
type UnimplementedCorruptibleConduitFactoryServer struct { }
UnimplementedCorruptibleConduitFactoryServer can be embedded to have forward compatible implementations.
func (*UnimplementedCorruptibleConduitFactoryServer) ConnectAttacker ¶ added in v0.27.0
func (*UnimplementedCorruptibleConduitFactoryServer) ConnectAttacker(req *empty.Empty, srv CorruptibleConduitFactory_ConnectAttackerServer) error
func (*UnimplementedCorruptibleConduitFactoryServer) ProcessAttackerMessage ¶
func (*UnimplementedCorruptibleConduitFactoryServer) ProcessAttackerMessage(srv CorruptibleConduitFactory_ProcessAttackerMessageServer) error