-
Notifications
You must be signed in to change notification settings - Fork 376
/
crypto.go
147 lines (124 loc) · 3.67 KB
/
crypto.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package iface
import (
"context"
"time"
"github.com/libp2p/go-libp2p-core/crypto"
)
type SigChainEntryType int8
const (
SigChainEntryTypeUndefined SigChainEntryType = 0
SigChainEntryTypeInitChain SigChainEntryType = 1
SigChainEntryTypeAddKey SigChainEntryType = 2
SigChainEntryTypeRemoveKey SigChainEntryType = 3
)
type SigChainEntry interface {
// Parent item
GetSigChain() SigChain
// Getters
GetEntryType() SigChainEntryType
GetEntryHash() []byte
GetParentEntryHash() []byte
GetCreatedAt() time.Time
GetExpiringAt() time.Time
GetSignedBy() (crypto.PubKey, error)
GetSignature() []byte
GetSubject() (crypto.PubKey, error)
// Serialization
Unmarshal([]byte) error
Marshal() ([]byte, error)
// Actions
Check() error
Sign(key crypto.PrivKey) error
}
type SigChain interface {
// Getters
GetID() []byte
GetInitialEntry() SigChainEntry
GetLastEntry() SigChainEntry
ListEntries() []SigChainEntry
ListCurrentPubKeys() []crypto.PubKey
// Serialization
Unmarshal([]byte) error
Marshal() ([]byte, error)
// Actions
Init(crypto.PrivKey) (SigChainEntry, error)
AddEntry(crypto.PrivKey, crypto.PubKey) (SigChainEntry, error)
RemoveEntry(crypto.PrivKey, crypto.PubKey) (SigChainEntry, error)
Check() error
}
type CryptoEvent interface {
// New Contact
// New Contact Device
}
type Crypto interface {
// Getters
GetDevicePublicKey() crypto.PubKey
GetPublicRendezvousSeed(ctx context.Context) ([]byte, error)
GetSigChain() SigChain
GetAccountPublicKey() (crypto.PubKey, error)
GetSigChainForAccount(accountID []byte) (SigChain, error)
// Actions
Sign([]byte) ([]byte, error)
AddDeviceToOwnSigChain(ctx context.Context, key crypto.PubKey) error
SaveContactSigChain(ctx context.Context, chain SigChain) error
ResetPublicRendezvousSeed(ctx context.Context) ([]byte, error)
SetDerivationStatusForGroupMember(ctx context.Context, member CryptoGroupMember, derivationStatus []byte, counter uint64) error
// Subscriptions
RegisterEventHandler(ctx context.Context) (chan<- CryptoEvent, error)
Close() error
}
type HandshakeSession interface {
// Getters/Setters
SetOtherKeys(sign crypto.PubKey, box []byte) error
GetPublicKeys() (sign crypto.PubKey, box []byte)
// Actions
ProveOtherKey() ([]byte, error)
CheckOwnKeyProof(sig []byte) error
ProveOwnDeviceKey() ([]byte, error)
CheckOtherKeyProof(sig []byte, chain SigChain, deviceKey crypto.PubKey) error
ProveOtherKnownAccount() ([]byte, error)
CheckOwnKnownAccountProof(attemptedDeviceKey crypto.PubKey, proof []byte) error
// Utils
Encrypt(data []byte) ([]byte, error)
Decrypt(data []byte) ([]byte, error)
Close() error
}
//type CryptoEnvelope interface {
// // Getters
// GetGroupID() []byte
// GetSenderID() []byte
// GetCounter() []byte
// GetEvent() []byte
// GetTimestamp() time.Time
// GetSignature() []byte
//}
type CryptoGroupMember interface {
// GetID() []byte
//
// GetGroup() CryptoGroup
// GetPublicKey() (crypto.PubKey, error)
// GetAccountPublicKey() (crypto.PubKey, error)
// GetSigChain() (SigChain, error)
// GetGroupSecret() []byte
// GetDerivationState() []byte
// GetDerivationCounter() uint64
//
// // Secrets
// GetCounterValue() []byte
// GetCounterValueAt(value uint64) []byte
// DeriveKey(ctx context.Context, salt []byte) error
// GetNextSymmetricKey() ([]byte, error)
}
//type CryptoGroup interface {
// GetID() []byte
//
// GetRendezvousSeed() []byte
// GetCreatorPubKey() (crypto.PubKey, error)
//
// GetMembers() []CryptoGroupMember
//
// SealMessage(ctx context.Context, payload []byte) (envelope CryptoEnvelope, symKey []byte, err error)
// OpenMessage(env CryptoEnvelope) (payload []byte, symKey []byte, err error)
//
// AddMembers([]CryptoGroupMember) ([]CryptoGroupMember, error)
//}