-
Notifications
You must be signed in to change notification settings - Fork 1
/
protocol.go
33 lines (27 loc) · 1.04 KB
/
protocol.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Package v1 provides a wrapper around the [DKLs18](https://eprint.iacr.org/2018/499.pdf) sign and dkg and provides
// serialization, serialization, and versioning for the serialized data.
package v1
import (
"github.com/coinbase/kryptology/pkg/core/protocol"
)
// Basic protocol interface implementation that calls the next step func in a pre-defined list
type protoStepper struct {
steps []func(input *protocol.Message) (*protocol.Message, error)
step int
}
// Next runs the next step in the protocol and reports errors or increments the step index
func (p *protoStepper) Next(input *protocol.Message) (*protocol.Message, error) {
if p.complete() {
return nil, protocol.ErrProtocolFinished
}
// Run the current protocol step and report any errors
output, err := p.steps[p.step](input)
if err != nil {
return nil, err
}
// Increment the step index and report success
p.step++
return output, nil
}
// Reports true if the step index exceeds the number of steps
func (p *protoStepper) complete() bool { return p.step >= len(p.steps) /**/ }