Documentation ¶
Index ¶
- Variables
- type Abort
- type BroadcastContent
- type BroadcastRound
- type Content
- type Helper
- func (h *Helper) AbortRound(err error, culprits ...party.ID) Session
- func (h *Helper) BroadcastMessage(out chan<- *Message, broadcastContent Content) error
- func (h *Helper) FinalRoundNumber() Number
- func (h *Helper) Group() curve.Curve
- func (h *Helper) Hash() *hash.Hash
- func (h *Helper) HashForID(id party.ID) *hash.Hash
- func (h *Helper) N() int
- func (h *Helper) OtherPartyIDs() party.IDSlice
- func (h *Helper) PartyIDs() party.IDSlice
- func (h *Helper) ProtocolID() string
- func (h *Helper) ResultRound(result interface{}) Session
- func (h *Helper) SSID() []byte
- func (h *Helper) SelfID() party.ID
- func (h *Helper) SendMessage(out chan<- *Message, content Content, to party.ID) error
- func (h *Helper) Threshold() int
- func (h *Helper) UpdateHashState(value hash.WriterToWithDomain)
- type Info
- type Message
- type NormalBroadcastContent
- type Number
- type Output
- type ReliableBroadcastContent
- type Round
- type Session
Constants ¶
This section is empty.
Variables ¶
Functions ¶
This section is empty.
Types ¶
type Abort ¶
Abort is an empty round containing a list of parties who misbehaved.
func (Abort) MessageContent ¶
func (Abort) StoreMessage ¶
func (Abort) VerifyMessage ¶
type BroadcastContent ¶
BroadcastContent wraps a Content, but also indicates whether this content requires reliable broadcast.
type BroadcastRound ¶
type BroadcastRound interface { // StoreBroadcastMessage must be run before Round.VerifyMessage and Round.StoreMessage, // since those may depend on the content from the broadcast. // It changes the round's state to store the message after performing basic validation. StoreBroadcastMessage(msg Message) error // BroadcastContent returns an uninitialized message.Content for this round's broadcast message. // // The first round of a protocol, and rounds which do not expect a broadcast message should return nil. BroadcastContent() BroadcastContent // Round must be implemented by an inherited round which would otherwise function the same way. Round }
BroadcastRound extends Round in that it expects a broadcast message before the p2p message. Due to the way Go struct inheritance works, it is necessary to implement both methods in a separate struct which itself only inherits the base Round. This way, we do not inherit the broadcast methods, and we can identify a broadcast round by type assertion.
type Content ¶
type Content interface {
RoundNumber() Number
}
Content represents the message, either broadcast or P2P returned by a round during finalization.
type Helper ¶
type Helper struct { // Pool allows us to parallelize certain operations Pool *pool.Pool // contains filtered or unexported fields }
Helper implements Session without Round, and can therefore be embedded in the first round of a protocol in order to satisfy the Session interface.
func NewSession ¶
func NewSession(info Info, sessionID []byte, pl *pool.Pool, auxInfo ...hash.WriterToWithDomain) (*Helper, error)
NewSession creates a new *Helper which can be embedded in the first Round, so that the full struct implements Session. `sessionID` is an optional byte slice that can be provided by the user. When used, it should be unique for each execution of the protocol. It could be a simple counter which is incremented after execution, or a common random string. `auxInfo` is a variable list of objects which should be included in the session's hash state.
func (*Helper) AbortRound ¶
AbortRound returns a round that contains only the culprits that were able to be identified during a faulty execution of the protocol. The error returned by Round.Finalize() in this case should still be nil.
func (*Helper) BroadcastMessage ¶
BroadcastMessage constructs a Message from the broadcast Content, and sets the header correctly. An error is returned if the message cannot be sent to the out channel.
func (*Helper) FinalRoundNumber ¶
FinalRoundNumber is the number of rounds before the output round.
func (*Helper) HashForID ¶
HashForID returns a clone of the hash.Hash for this session, initialized with the given id.
func (*Helper) OtherPartyIDs ¶
OtherPartyIDs returns a sorted list of parties that does not contain SelfID.
func (*Helper) ProtocolID ¶
ProtocolID is an identifier for this protocol.
func (*Helper) ResultRound ¶
ResultRound returns a round that contains only the result of the protocol. This indicates to the used that the protocol is finished.
func (*Helper) SendMessage ¶
SendMessage is a convenience method for safely sending content to some party. If the message is intended for all participants (but does not require reliable broadcast), the `to` field may be empty (""). Returns an error if the message failed to send over out channel. `out` is expected to be a buffered channel with enough capacity to store all messages.
func (*Helper) Threshold ¶
Threshold is the maximum number of parties that are assumed to be corrupted during the execution of this protocol.
func (*Helper) UpdateHashState ¶
func (h *Helper) UpdateHashState(value hash.WriterToWithDomain)
UpdateHashState writes additional data to the hash state.
type Info ¶
type Info struct { // ProtocolID is an identifier for this protocol ProtocolID string // FinalRoundNumber is the number of rounds before the output round. FinalRoundNumber Number // SelfID is this party's ID. SelfID party.ID // PartyIDs is a sorted slice of participating parties in this protocol. PartyIDs []party.ID // Threshold is the maximum number of parties that are assumed to be corrupted during the execution of this protocol. Threshold int // Group returns the group used for this protocol execution. Group curve.Curve }
type NormalBroadcastContent ¶
type NormalBroadcastContent struct{}
These structs can be embedded in a broadcast message as a way of 1. implementing BroadcastContent 2. indicate to the handler whether the content should be reliably broadcast When non-unanimous halting is acceptable, we can use the echo broadcast.
func (NormalBroadcastContent) Reliable ¶
func (NormalBroadcastContent) Reliable() bool
type Number ¶
type Number uint16
Number is the index of the current round. 0 indicates the output round, 1 is the first round.
type Output ¶
type Output struct { *Helper Result interface{} }
Output is an empty round containing the output of the protocol.
func (Output) MessageContent ¶
func (Output) StoreMessage ¶
func (Output) VerifyMessage ¶
type ReliableBroadcastContent ¶
type ReliableBroadcastContent struct{}
These structs can be embedded in a broadcast message as a way of 1. implementing BroadcastContent 2. indicate to the handler whether the content should be reliably broadcast When non-unanimous halting is acceptable, we can use the echo broadcast.
func (ReliableBroadcastContent) Reliable ¶
func (ReliableBroadcastContent) Reliable() bool
type Round ¶
type Round interface { // VerifyMessage handles an incoming Message and validates its content with regard to the protocol specification. // The content argument can be cast to the appropriate type for this round without error check. // In the first round, this function returns nil. // This function should not modify any saved state as it may be be running concurrently. VerifyMessage(msg Message) error // StoreMessage should be called after VerifyMessage and should only store the appropriate fields from the // content. StoreMessage(msg Message) error // Finalize is called after all messages from the parties have been processed in the current round. // Messages for the next round are sent out through the out channel. // If a non-critical error occurs (like a failure to sample, hash, or send a message), the current round can be // returned so that the caller may try to finalize again. // // If an abort occurs, the expected behavior is to return // r.AbortRound(err, culprits), nil. // This indicates to the caller that the protocol has aborted due to a "math" error. // // In the last round, Finalize should return // r.ResultRound(result), nil // where result is the output of the protocol. Finalize(out chan<- *Message) (Session, error) // MessageContent returns an uninitialized message.Content for this round. // // The first round of a protocol should return nil. MessageContent() Content // Number returns the current round number. Number() Number }
type Session ¶
type Session interface { // Round is the current round being executed. Round // Group returns the group used for this protocol execution. Group() curve.Curve // Hash returns a cloned hash function with the current hash state. Hash() *hash.Hash // ProtocolID is an identifier for this protocol. ProtocolID() string // FinalRoundNumber is the number of rounds before the output round. FinalRoundNumber() Number // SSID the unique identifier for this protocol execution. SSID() []byte // SelfID is this party's ID. SelfID() party.ID // PartyIDs is a sorted slice of participating parties in this protocol. PartyIDs() party.IDSlice // OtherPartyIDs returns a sorted list of parties that does not contain SelfID. OtherPartyIDs() party.IDSlice // Threshold is the maximum number of parties that are assumed to be corrupted during the execution of this protocol. Threshold() int // N returns the total number of parties participating in the protocol. N() int }
Session represents the current execution of a round-based protocol. It embeds the current round, and provides additional