2020-07-22 09:44:30 -07:00
|
|
|
package dkg
|
|
|
|
|
|
|
|
import (
|
|
|
|
"go.dedis.ch/kyber/v3"
|
|
|
|
)
|
|
|
|
|
|
|
|
type PK2Participant struct {
|
|
|
|
Participant string
|
|
|
|
PK kyber.Point
|
|
|
|
}
|
|
|
|
|
|
|
|
type PKStore []*PK2Participant
|
|
|
|
|
|
|
|
func (s *PKStore) Add(newPk *PK2Participant) bool {
|
|
|
|
for _, pk := range *s {
|
|
|
|
if pk.Participant == newPk.Participant && pk.PK.Equal(newPk.PK) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
*s = append(*s, newPk)
|
|
|
|
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s PKStore) Len() int { return len(s) }
|
|
|
|
func (s PKStore) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
|
|
|
|
func (s PKStore) Less(i, j int) bool { return s[i].Participant < s[j].Participant }
|
|
|
|
func (s PKStore) GetPKs() []kyber.Point {
|
|
|
|
var out = make([]kyber.Point, len(s))
|
|
|
|
for idx, val := range s {
|
|
|
|
out[idx] = val.PK
|
|
|
|
}
|
|
|
|
return out
|
|
|
|
}
|
2020-07-23 08:39:56 -07:00
|
|
|
|
|
|
|
type messageStore struct {
|
|
|
|
// Common number of messages of the same type from peers
|
|
|
|
messagesCount int
|
|
|
|
|
|
|
|
// Max number of messages of the same type from one peer per round
|
|
|
|
maxMessagesFromPeer int
|
|
|
|
|
|
|
|
// Map which stores messages. Key is a peer's address, value is data
|
|
|
|
addrToData map[string][]interface{}
|
|
|
|
|
|
|
|
// Map which stores messages (same as addrToData). Key is a peer's index, value is data.
|
|
|
|
indexToData map[int][]interface{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func newMessageStore(n int) *messageStore {
|
|
|
|
return &messageStore{
|
|
|
|
maxMessagesFromPeer: n,
|
|
|
|
addrToData: make(map[string][]interface{}),
|
|
|
|
indexToData: make(map[int][]interface{}),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ms *messageStore) add(addr string, index int, val interface{}) {
|
|
|
|
data := ms.addrToData[addr]
|
|
|
|
if len(data) == ms.maxMessagesFromPeer {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
data = append(data, val)
|
|
|
|
ms.addrToData[addr] = data
|
|
|
|
|
|
|
|
data = ms.indexToData[index]
|
|
|
|
data = append(data, val)
|
|
|
|
ms.indexToData[index] = data
|
|
|
|
|
|
|
|
ms.messagesCount++
|
|
|
|
}
|