-
Notifications
You must be signed in to change notification settings - Fork 0
/
group.go
46 lines (36 loc) · 888 Bytes
/
group.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
34
35
36
37
38
39
40
41
42
43
44
45
46
package core
import (
"crypto/ed25519"
"errors"
"github.com/fox-one/mtg/pkg/mtg"
"github.com/gofrs/uuid"
)
type Member struct {
ClientID string
Name string
VerifyKey ed25519.PublicKey
}
func DecodeTransactionAction(privateKey ed25519.PrivateKey, message []byte) ([]byte, error) {
return mtg.Decrypt(message, privateKey)
}
func DecodeMemberAction(message []byte, members []*Member) (*Member, []byte, error) {
body, sig, err := mtg.Unpack(message)
if err != nil {
return nil, nil, err
}
var id uuid.UUID
content, err := mtg.Scan(body, &id)
if err != nil {
return nil, nil, err
}
for _, member := range members {
if member.ClientID != id.String() {
continue
}
if !mtg.Verify(body, sig, member.VerifyKey) {
return nil, nil, errors.New("verify sig failed")
}
return member, content, nil
}
return nil, nil, errors.New("member not found")
}