Remove go-threads
This commit is contained in:
parent
20df88bbde
commit
d5a801cff5
3
go.mod
3
go.mod
@ -12,7 +12,6 @@ require (
|
||||
github.com/multiformats/go-multihash v0.0.15
|
||||
github.com/prometheus/common v0.18.0
|
||||
github.com/stretchr/testify v1.7.0
|
||||
github.com/textileio/go-threads v1.0.2-0.20210304072541-d0f91da84404
|
||||
go.uber.org/zap v1.21.0
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
@ -40,5 +39,3 @@ require (
|
||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect
|
||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect
|
||||
)
|
||||
|
||||
replace github.com/textileio/go-threads => github.com/anytypeio/go-threads v1.1.0-rc1.0.20220223104843-a67245cee80e
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
package account
|
||||
|
||||
import "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
)
|
||||
|
||||
type AccountData struct { // TODO: create a convenient constructor for this
|
||||
Identity string // TODO: this is essentially the same as sign key
|
||||
SignKey keys.SigningPrivKey
|
||||
EncKey keys.EncryptionPrivKey
|
||||
Decoder keys.SigningPubKeyDecoder
|
||||
SignKey signingkey.SigningPrivKey
|
||||
EncKey encryptionkey.EncryptionPrivKey
|
||||
Decoder signingkey.SigningPubKeyDecoder
|
||||
}
|
||||
|
||||
@ -5,8 +5,9 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/pb"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"github.com/textileio/go-threads/crypto/symmetric"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/symmetric"
|
||||
"hash/fnv"
|
||||
)
|
||||
|
||||
@ -21,15 +22,15 @@ type ACLState struct {
|
||||
userReadKeys map[uint64]*symmetric.Key
|
||||
userStates map[string]*pb.ACLChangeUserState
|
||||
userInvites map[string]*pb.ACLChangeUserInvite
|
||||
signingPubKeyDecoder keys.SigningPubKeyDecoder
|
||||
encryptionKey keys.EncryptionPrivKey
|
||||
signingPubKeyDecoder signingkey.SigningPubKeyDecoder
|
||||
encryptionKey encryptionkey.EncryptionPrivKey
|
||||
identity string
|
||||
}
|
||||
|
||||
func newACLState(
|
||||
identity string,
|
||||
encryptionKey keys.EncryptionPrivKey,
|
||||
signingPubKeyDecoder keys.SigningPubKeyDecoder) *ACLState {
|
||||
encryptionKey encryptionkey.EncryptionPrivKey,
|
||||
signingPubKeyDecoder signingkey.SigningPubKeyDecoder) *ACLState {
|
||||
return &ACLState{
|
||||
identity: identity,
|
||||
encryptionKey: encryptionKey,
|
||||
@ -43,8 +44,8 @@ func newACLState(
|
||||
func newACLStateFromSnapshotChange(
|
||||
snapshotChange *pb.ACLChange,
|
||||
identity string,
|
||||
encryptionKey keys.EncryptionPrivKey,
|
||||
signingPubKeyDecoder keys.SigningPubKeyDecoder) (*ACLState, error) {
|
||||
encryptionKey encryptionkey.EncryptionPrivKey,
|
||||
signingPubKeyDecoder signingkey.SigningPubKeyDecoder) (*ACLState, error) {
|
||||
st := &ACLState{
|
||||
identity: identity,
|
||||
encryptionKey: encryptionKey,
|
||||
|
||||
@ -4,15 +4,15 @@ import (
|
||||
"fmt"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/pb"
|
||||
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
)
|
||||
|
||||
type aclStateBuilder struct {
|
||||
tree *Tree
|
||||
identity string
|
||||
key keys.EncryptionPrivKey
|
||||
decoder keys.SigningPubKeyDecoder
|
||||
key encryptionkey.EncryptionPrivKey
|
||||
decoder signingkey.SigningPubKeyDecoder
|
||||
}
|
||||
|
||||
type decreasedPermissionsParameters struct {
|
||||
@ -20,7 +20,7 @@ type decreasedPermissionsParameters struct {
|
||||
startChange string
|
||||
}
|
||||
|
||||
func newACLStateBuilder(decoder keys.SigningPubKeyDecoder, accountData *account.AccountData) *aclStateBuilder {
|
||||
func newACLStateBuilder(decoder signingkey.SigningPubKeyDecoder, accountData *account.AccountData) *aclStateBuilder {
|
||||
return &aclStateBuilder{
|
||||
decoder: decoder,
|
||||
identity: accountData.Identity,
|
||||
|
||||
@ -4,7 +4,7 @@ import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/pb"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/testutils/treestoragebuilder"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
@ -26,7 +26,7 @@ func TestACLTree_UserJoinBuild(t *testing.T) {
|
||||
Identity: keychain.GetIdentity("A"),
|
||||
SignKey: keychain.SigningKeys["A"],
|
||||
EncKey: keychain.EncryptionKeys["A"],
|
||||
Decoder: keys.NewEd25519Decoder(),
|
||||
Decoder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
listener := &mockListener{}
|
||||
tree, err := BuildACLTree(thr, accountData, listener)
|
||||
@ -61,7 +61,7 @@ func TestACLTree_UserJoinUpdate_Append(t *testing.T) {
|
||||
Identity: keychain.GetIdentity("A"),
|
||||
SignKey: keychain.SigningKeys["A"],
|
||||
EncKey: keychain.EncryptionKeys["A"],
|
||||
Decoder: keys.NewEd25519Decoder(),
|
||||
Decoder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
listener := &mockListener{}
|
||||
tree, err := BuildACLTree(thr, accountData, listener)
|
||||
@ -111,7 +111,7 @@ func TestACLTree_UserJoinUpdate_Rebuild(t *testing.T) {
|
||||
Identity: keychain.GetIdentity("A"),
|
||||
SignKey: keychain.SigningKeys["A"],
|
||||
EncKey: keychain.EncryptionKeys["A"],
|
||||
Decoder: keys.NewEd25519Decoder(),
|
||||
Decoder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
listener := &mockListener{}
|
||||
tree, err := BuildACLTree(thr, accountData, listener)
|
||||
@ -162,7 +162,7 @@ func TestACLTree_UserRemoveBuild(t *testing.T) {
|
||||
Identity: keychain.GetIdentity("A"),
|
||||
SignKey: keychain.SigningKeys["A"],
|
||||
EncKey: keychain.EncryptionKeys["A"],
|
||||
Decoder: keys.NewEd25519Decoder(),
|
||||
Decoder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
listener := &mockListener{}
|
||||
tree, err := BuildACLTree(thr, accountData, listener)
|
||||
@ -193,7 +193,7 @@ func TestACLTree_UserRemoveBeforeBuild(t *testing.T) {
|
||||
Identity: keychain.GetIdentity("A"),
|
||||
SignKey: keychain.SigningKeys["A"],
|
||||
EncKey: keychain.EncryptionKeys["A"],
|
||||
Decoder: keys.NewEd25519Decoder(),
|
||||
Decoder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
listener := &mockListener{}
|
||||
tree, err := BuildACLTree(thr, accountData, listener)
|
||||
@ -225,7 +225,7 @@ func TestACLTree_InvalidSnapshotBuild(t *testing.T) {
|
||||
Identity: keychain.GetIdentity("A"),
|
||||
SignKey: keychain.SigningKeys["A"],
|
||||
EncKey: keychain.EncryptionKeys["A"],
|
||||
Decoder: keys.NewEd25519Decoder(),
|
||||
Decoder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
listener := &mockListener{}
|
||||
tree, err := BuildACLTree(thr, accountData, listener)
|
||||
@ -256,7 +256,7 @@ func TestACLTree_ValidSnapshotBuild(t *testing.T) {
|
||||
Identity: keychain.GetIdentity("A"),
|
||||
SignKey: keychain.SigningKeys["A"],
|
||||
EncKey: keychain.EncryptionKeys["A"],
|
||||
Decoder: keys.NewEd25519Decoder(),
|
||||
Decoder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
listener := &mockListener{}
|
||||
tree, err := BuildACLTree(thr, accountData, listener)
|
||||
|
||||
@ -3,22 +3,22 @@ package acltree
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/slice"
|
||||
)
|
||||
|
||||
type aclTreeBuilder struct {
|
||||
cache map[string]*Change
|
||||
identityKeys map[string]keys.SigningPubKey
|
||||
signingPubKeyDecoder keys.SigningPubKeyDecoder
|
||||
identityKeys map[string]signingkey.SigningPubKey
|
||||
signingPubKeyDecoder signingkey.SigningPubKeyDecoder
|
||||
tree *Tree
|
||||
treeStorage treestorage.TreeStorage
|
||||
|
||||
*changeLoader
|
||||
}
|
||||
|
||||
func newACLTreeBuilder(t treestorage.TreeStorage, decoder keys.SigningPubKeyDecoder) *aclTreeBuilder {
|
||||
func newACLTreeBuilder(t treestorage.TreeStorage, decoder signingkey.SigningPubKeyDecoder) *aclTreeBuilder {
|
||||
return &aclTreeBuilder{
|
||||
signingPubKeyDecoder: decoder,
|
||||
treeStorage: t,
|
||||
@ -31,7 +31,7 @@ func newACLTreeBuilder(t treestorage.TreeStorage, decoder keys.SigningPubKeyDeco
|
||||
|
||||
func (tb *aclTreeBuilder) Init() {
|
||||
tb.cache = make(map[string]*Change)
|
||||
tb.identityKeys = make(map[string]keys.SigningPubKey)
|
||||
tb.identityKeys = make(map[string]signingkey.SigningPubKey)
|
||||
tb.tree = &Tree{}
|
||||
tb.changeLoader.Init(tb.cache, tb.identityKeys)
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@ package acltree
|
||||
import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
)
|
||||
|
||||
func BuildTreeStorageWithACL(
|
||||
@ -12,7 +12,7 @@ func BuildTreeStorageWithACL(
|
||||
create func(change *treestorage.RawChange) (treestorage.TreeStorage, error)) (treestorage.TreeStorage, error) {
|
||||
bld := newChangeBuilder()
|
||||
bld.Init(
|
||||
newACLState(acc.Identity, acc.EncKey, keys.NewEd25519Decoder()),
|
||||
newACLState(acc.Identity, acc.EncKey, signingkey.NewEd25519Decoder()),
|
||||
&Tree{},
|
||||
acc)
|
||||
err := build(bld)
|
||||
|
||||
@ -6,7 +6,7 @@ import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
|
||||
"github.com/gogo/protobuf/proto"
|
||||
|
||||
"github.com/textileio/go-threads/crypto/symmetric"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/symmetric"
|
||||
)
|
||||
|
||||
type ChangeContent struct {
|
||||
|
||||
@ -4,9 +4,9 @@ import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/pb"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/cid"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/symmetric"
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"github.com/textileio/go-threads/crypto/symmetric"
|
||||
"hash/fnv"
|
||||
"time"
|
||||
)
|
||||
@ -14,7 +14,7 @@ import (
|
||||
type MarshalledChange = []byte
|
||||
|
||||
type ACLChangeBuilder interface {
|
||||
UserAdd(identity string, encryptionKey keys.EncryptionPubKey, permissions pb.ACLChangeUserPermissions) error
|
||||
UserAdd(identity string, encryptionKey encryptionkey.EncryptionPubKey, permissions pb.ACLChangeUserPermissions) error
|
||||
AddId(id string) // TODO: this is only for testing
|
||||
SetMakeSnapshot(bool) // TODO: who should decide this? probably ACLTree so we can delete it
|
||||
}
|
||||
@ -68,7 +68,7 @@ func (c *changeBuilder) SetMakeSnapshot(b bool) {
|
||||
c.makeSnapshot = b
|
||||
}
|
||||
|
||||
func (c *changeBuilder) UserAdd(identity string, encryptionKey keys.EncryptionPubKey, permissions pb.ACLChangeUserPermissions) error {
|
||||
func (c *changeBuilder) UserAdd(identity string, encryptionKey encryptionkey.EncryptionPubKey, permissions pb.ACLChangeUserPermissions) error {
|
||||
var allKeys []*symmetric.Key
|
||||
if c.aclState.currentReadKeyHash != 0 {
|
||||
for _, key := range c.aclState.userReadKeys {
|
||||
|
||||
@ -5,23 +5,23 @@ import (
|
||||
"fmt"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/pb"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
"time"
|
||||
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"github.com/gogo/protobuf/proto"
|
||||
)
|
||||
|
||||
type changeLoader struct {
|
||||
cache map[string]*Change
|
||||
identityKeys map[string]keys.SigningPubKey
|
||||
signingPubKeyDecoder keys.SigningPubKeyDecoder
|
||||
identityKeys map[string]signingkey.SigningPubKey
|
||||
signingPubKeyDecoder signingkey.SigningPubKeyDecoder
|
||||
treeStorage treestorage.TreeStorage
|
||||
changeCreator func(id string, ch *pb.ACLChange) *Change
|
||||
}
|
||||
|
||||
func newChangeLoader(
|
||||
treeStorage treestorage.TreeStorage,
|
||||
signingPubKeyDecoder keys.SigningPubKeyDecoder,
|
||||
signingPubKeyDecoder signingkey.SigningPubKeyDecoder,
|
||||
changeCreator func(id string, ch *pb.ACLChange) *Change) *changeLoader {
|
||||
return &changeLoader{
|
||||
signingPubKeyDecoder: signingPubKeyDecoder,
|
||||
@ -31,7 +31,7 @@ func newChangeLoader(
|
||||
}
|
||||
|
||||
func (c *changeLoader) Init(cache map[string]*Change,
|
||||
identityKeys map[string]keys.SigningPubKey) {
|
||||
identityKeys map[string]signingkey.SigningPubKey) {
|
||||
c.cache = cache
|
||||
c.identityKeys = identityKeys
|
||||
}
|
||||
|
||||
@ -3,20 +3,20 @@ package acltree
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
|
||||
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
)
|
||||
|
||||
type snapshotValidator struct {
|
||||
aclTree *Tree
|
||||
identity string
|
||||
key keys.EncryptionPrivKey
|
||||
decoder keys.SigningPubKeyDecoder
|
||||
key encryptionkey.EncryptionPrivKey
|
||||
decoder signingkey.SigningPubKeyDecoder
|
||||
stateBuilder *aclStateBuilder
|
||||
}
|
||||
|
||||
func newSnapshotValidator(
|
||||
decoder keys.SigningPubKeyDecoder,
|
||||
decoder signingkey.SigningPubKeyDecoder,
|
||||
accountData *account.AccountData) *snapshotValidator {
|
||||
return &snapshotValidator{
|
||||
identity: accountData.Identity,
|
||||
|
||||
@ -4,8 +4,8 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
//"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/lib/logging"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/slice"
|
||||
"github.com/prometheus/common/log"
|
||||
@ -18,15 +18,15 @@ var (
|
||||
|
||||
type treeBuilder struct {
|
||||
cache map[string]*Change
|
||||
identityKeys map[string]keys.SigningPubKey
|
||||
signingPubKeyDecoder keys.SigningPubKeyDecoder
|
||||
identityKeys map[string]signingkey.SigningPubKey
|
||||
signingPubKeyDecoder signingkey.SigningPubKeyDecoder
|
||||
tree *Tree
|
||||
treeStorage treestorage.TreeStorage
|
||||
|
||||
*changeLoader
|
||||
}
|
||||
|
||||
func newTreeBuilder(t treestorage.TreeStorage, decoder keys.SigningPubKeyDecoder) *treeBuilder {
|
||||
func newTreeBuilder(t treestorage.TreeStorage, decoder signingkey.SigningPubKeyDecoder) *treeBuilder {
|
||||
return &treeBuilder{
|
||||
signingPubKeyDecoder: decoder,
|
||||
treeStorage: t,
|
||||
@ -39,7 +39,7 @@ func newTreeBuilder(t treestorage.TreeStorage, decoder keys.SigningPubKeyDecoder
|
||||
|
||||
func (tb *treeBuilder) Init() {
|
||||
tb.cache = make(map[string]*Change)
|
||||
tb.identityKeys = make(map[string]keys.SigningPubKey)
|
||||
tb.identityKeys = make(map[string]signingkey.SigningPubKey)
|
||||
tb.tree = &Tree{}
|
||||
tb.changeLoader.Init(tb.cache, tb.identityKeys)
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@ import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/testutils/treestoragebuilder"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
@ -17,7 +17,7 @@ func TestDocument_NewPlainTextDocument(t *testing.T) {
|
||||
Identity: keychain.GetIdentity("A"),
|
||||
SignKey: keychain.SigningKeys["A"],
|
||||
EncKey: keychain.EncryptionKeys["A"],
|
||||
Decoder: keys.NewEd25519Decoder(),
|
||||
Decoder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
|
||||
doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text")
|
||||
@ -35,7 +35,7 @@ func TestDocument_PlainTextDocument_AddText(t *testing.T) {
|
||||
Identity: keychain.GetIdentity("A"),
|
||||
SignKey: keychain.SigningKeys["A"],
|
||||
EncKey: keychain.EncryptionKeys["A"],
|
||||
Decoder: keys.NewEd25519Decoder(),
|
||||
Decoder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
|
||||
doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text")
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
package treestoragebuilder
|
||||
|
||||
import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
"hash/fnv"
|
||||
"strings"
|
||||
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
|
||||
"github.com/textileio/go-threads/crypto/symmetric"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/symmetric"
|
||||
)
|
||||
|
||||
type SymKey struct {
|
||||
@ -15,24 +15,24 @@ type SymKey struct {
|
||||
}
|
||||
|
||||
type Keychain struct {
|
||||
SigningKeys map[string]keys.SigningPrivKey
|
||||
SigningKeysByIdentity map[string]keys.SigningPrivKey
|
||||
EncryptionKeys map[string]keys.EncryptionPrivKey
|
||||
SigningKeys map[string]signingkey.SigningPrivKey
|
||||
SigningKeysByIdentity map[string]signingkey.SigningPrivKey
|
||||
EncryptionKeys map[string]encryptionkey.EncryptionPrivKey
|
||||
ReadKeys map[string]*SymKey
|
||||
ReadKeysByHash map[uint64]*SymKey
|
||||
GeneratedIdentities map[string]string
|
||||
coder keys.SigningPubKeyDecoder
|
||||
coder signingkey.SigningPubKeyDecoder
|
||||
}
|
||||
|
||||
func NewKeychain() *Keychain {
|
||||
return &Keychain{
|
||||
SigningKeys: map[string]keys.SigningPrivKey{},
|
||||
SigningKeysByIdentity: map[string]keys.SigningPrivKey{},
|
||||
EncryptionKeys: map[string]keys.EncryptionPrivKey{},
|
||||
SigningKeys: map[string]signingkey.SigningPrivKey{},
|
||||
SigningKeysByIdentity: map[string]signingkey.SigningPrivKey{},
|
||||
EncryptionKeys: map[string]encryptionkey.EncryptionPrivKey{},
|
||||
GeneratedIdentities: map[string]string{},
|
||||
ReadKeys: map[string]*SymKey{},
|
||||
ReadKeysByHash: map[uint64]*SymKey{},
|
||||
coder: keys.NewEd25519Decoder(),
|
||||
coder: signingkey.NewEd25519Decoder(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,7 +54,7 @@ func (k *Keychain) AddEncryptionKey(name string) {
|
||||
if _, exists := k.EncryptionKeys[name]; exists {
|
||||
return
|
||||
}
|
||||
newPrivKey, _, err := keys.GenerateRandomRSAKeyPair(2048)
|
||||
newPrivKey, _, err := encryptionkey.GenerateRandomRSAKeyPair(2048)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -66,7 +66,7 @@ func (k *Keychain) AddSigningKey(name string) {
|
||||
if _, exists := k.SigningKeys[name]; exists {
|
||||
return
|
||||
}
|
||||
newPrivKey, pubKey, err := keys.GenerateRandomEd25519KeyPair()
|
||||
newPrivKey, pubKey, err := signingkey.GenerateRandomEd25519KeyPair()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@ -9,14 +9,14 @@ import (
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/testutils/yamltests"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
|
||||
storagepb "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage/pb"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/slice"
|
||||
"io/ioutil"
|
||||
"path"
|
||||
|
||||
"github.com/gogo/protobuf/proto"
|
||||
"gopkg.in/yaml.v3"
|
||||
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
)
|
||||
|
||||
const plainTextDocType uint16 = 1
|
||||
@ -25,7 +25,7 @@ type treeChange struct {
|
||||
*pb.ACLChange
|
||||
id string
|
||||
readKey *SymKey
|
||||
signKey keys.SigningPrivKey
|
||||
signKey signingkey.SigningPrivKey
|
||||
|
||||
changesDataDecrypted []byte
|
||||
}
|
||||
@ -297,7 +297,7 @@ func (t *TreeStorageBuilder) parseACLSnapshot(s *ACLSnapshot) *pb.ACLChangeACLSn
|
||||
aclUserState.Identity = t.keychain.GetIdentity(state.Identity)
|
||||
|
||||
encKey := t.keychain.
|
||||
GetKey(state.EncryptionKey).(keys.EncryptionPrivKey)
|
||||
GetKey(state.EncryptionKey).(encryptionkey.EncryptionPrivKey)
|
||||
rawKey, _ := encKey.GetPublic().Raw()
|
||||
aclUserState.EncryptionKey = rawKey
|
||||
|
||||
@ -334,7 +334,7 @@ func (t *TreeStorageBuilder) parseACLChange(ch *ACLChange) (convCh *pb.ACLChange
|
||||
add := ch.UserAdd
|
||||
|
||||
encKey := t.keychain.
|
||||
GetKey(add.EncryptionKey).(keys.EncryptionPrivKey)
|
||||
GetKey(add.EncryptionKey).(encryptionkey.EncryptionPrivKey)
|
||||
rawKey, _ := encKey.GetPublic().Raw()
|
||||
|
||||
convCh = &pb.ACLChangeACLContentValue{
|
||||
@ -351,11 +351,11 @@ func (t *TreeStorageBuilder) parseACLChange(ch *ACLChange) (convCh *pb.ACLChange
|
||||
join := ch.UserJoin
|
||||
|
||||
encKey := t.keychain.
|
||||
GetKey(join.EncryptionKey).(keys.EncryptionPrivKey)
|
||||
GetKey(join.EncryptionKey).(encryptionkey.EncryptionPrivKey)
|
||||
rawKey, _ := encKey.GetPublic().Raw()
|
||||
|
||||
idKey, _ := t.keychain.SigningKeys[join.Identity].GetPublic().Raw()
|
||||
signKey := t.keychain.GetKey(join.AcceptSignature).(keys.SigningPrivKey)
|
||||
signKey := t.keychain.GetKey(join.AcceptSignature).(signingkey.SigningPrivKey)
|
||||
signature, err := signKey.Sign(idKey)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@ -374,9 +374,9 @@ func (t *TreeStorageBuilder) parseACLChange(ch *ACLChange) (convCh *pb.ACLChange
|
||||
}
|
||||
case ch.UserInvite != nil:
|
||||
invite := ch.UserInvite
|
||||
rawAcceptKey, _ := t.keychain.GetKey(invite.AcceptKey).(keys.SigningPrivKey).GetPublic().Raw()
|
||||
rawAcceptKey, _ := t.keychain.GetKey(invite.AcceptKey).(signingkey.SigningPrivKey).GetPublic().Raw()
|
||||
encKey := t.keychain.
|
||||
GetKey(invite.EncryptionKey).(keys.EncryptionPrivKey)
|
||||
GetKey(invite.EncryptionKey).(encryptionkey.EncryptionPrivKey)
|
||||
rawEncKey, _ := encKey.GetPublic().Raw()
|
||||
|
||||
convCh = &pb.ACLChangeACLContentValue{
|
||||
@ -449,7 +449,7 @@ func (t *TreeStorageBuilder) parseACLChange(ch *ACLChange) (convCh *pb.ACLChange
|
||||
return convCh
|
||||
}
|
||||
|
||||
func (t *TreeStorageBuilder) encryptReadKeys(keys []string, encKey keys.EncryptionPrivKey) (enc [][]byte) {
|
||||
func (t *TreeStorageBuilder) encryptReadKeys(keys []string, encKey encryptionkey.EncryptionPrivKey) (enc [][]byte) {
|
||||
for _, k := range keys {
|
||||
realKey := t.keychain.GetKey(k).(*SymKey).Key.Bytes()
|
||||
res, err := encKey.GetPublic().Encrypt(realKey)
|
||||
|
||||
@ -1,14 +1,16 @@
|
||||
package keys
|
||||
package encryptionkey
|
||||
|
||||
import "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
|
||||
type EncryptionPrivKey interface {
|
||||
Key
|
||||
keys.Key
|
||||
|
||||
Decrypt([]byte) ([]byte, error)
|
||||
GetPublic() EncryptionPubKey
|
||||
}
|
||||
|
||||
type EncryptionPubKey interface {
|
||||
Key
|
||||
keys.Key
|
||||
|
||||
Encrypt(data []byte) ([]byte, error)
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package keys
|
||||
package encryptionkey
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"crypto/subtle"
|
||||
"crypto/x509"
|
||||
"errors"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"io"
|
||||
)
|
||||
|
||||
@ -22,7 +23,7 @@ type EncryptionRsaPubKey struct {
|
||||
pubKey rsa.PublicKey
|
||||
}
|
||||
|
||||
func (e *EncryptionRsaPubKey) Equals(key Key) bool {
|
||||
func (e *EncryptionRsaPubKey) Equals(key keys.Key) bool {
|
||||
other, ok := (key).(*EncryptionRsaPubKey)
|
||||
if !ok {
|
||||
return keyEquals(e, key)
|
||||
@ -40,7 +41,7 @@ func (e *EncryptionRsaPubKey) Encrypt(data []byte) ([]byte, error) {
|
||||
return rsa.EncryptOAEP(hash, rand.Reader, &e.pubKey, data, nil)
|
||||
}
|
||||
|
||||
func (e *EncryptionRsaPrivKey) Equals(key Key) bool {
|
||||
func (e *EncryptionRsaPrivKey) Equals(key keys.Key) bool {
|
||||
other, ok := (key).(*EncryptionRsaPrivKey)
|
||||
if !ok {
|
||||
return keyEquals(e, key)
|
||||
@ -106,7 +107,7 @@ func NewEncryptionRsaPubKeyFromBytes(bytes []byte) (EncryptionPubKey, error) {
|
||||
return &EncryptionRsaPubKey{pubKey: *pk}, nil
|
||||
}
|
||||
|
||||
func keyEquals(k1, k2 Key) bool {
|
||||
func keyEquals(k1, k2 keys.Key) bool {
|
||||
a, err := k1.Raw()
|
||||
if err != nil {
|
||||
return false
|
||||
@ -1,4 +1,4 @@
|
||||
package keys
|
||||
package signingkey
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"crypto/subtle"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
"io"
|
||||
|
||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/strkey"
|
||||
@ -63,10 +64,10 @@ func (k *Ed25519PrivateKey) pubKeyBytes() []byte {
|
||||
}
|
||||
|
||||
// Equals compares two ed25519 private keys.
|
||||
func (k *Ed25519PrivateKey) Equals(o Key) bool {
|
||||
func (k *Ed25519PrivateKey) Equals(o keys.Key) bool {
|
||||
edk, ok := o.(*Ed25519PrivateKey)
|
||||
if !ok {
|
||||
return keyEquals(k, o)
|
||||
return keys.KeyEquals(k, o)
|
||||
}
|
||||
|
||||
return subtle.ConstantTimeCompare(k.k, edk.k) == 1
|
||||
@ -88,10 +89,10 @@ func (k *Ed25519PublicKey) Raw() ([]byte, error) {
|
||||
}
|
||||
|
||||
// Equals compares two ed25519 public keys.
|
||||
func (k *Ed25519PublicKey) Equals(o Key) bool {
|
||||
func (k *Ed25519PublicKey) Equals(o keys.Key) bool {
|
||||
edk, ok := o.(*Ed25519PublicKey)
|
||||
if !ok {
|
||||
return keyEquals(k, o)
|
||||
return keys.KeyEquals(k, o)
|
||||
}
|
||||
|
||||
return bytes.Equal(k.k, edk.k)
|
||||
@ -1,7 +1,9 @@
|
||||
package keys
|
||||
package signingkey
|
||||
|
||||
import "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
|
||||
|
||||
type SigningPrivKey interface {
|
||||
Key
|
||||
keys.Key
|
||||
|
||||
Sign([]byte) ([]byte, error)
|
||||
|
||||
@ -9,7 +11,7 @@ type SigningPrivKey interface {
|
||||
}
|
||||
|
||||
type SigningPubKey interface {
|
||||
Key
|
||||
keys.Key
|
||||
|
||||
Verify(data []byte, sig []byte) (bool, error)
|
||||
}
|
||||
@ -1,7 +1,21 @@
|
||||
package keys
|
||||
|
||||
import "crypto/subtle"
|
||||
|
||||
type Key interface {
|
||||
Equals(Key) bool
|
||||
|
||||
Raw() ([]byte, error)
|
||||
}
|
||||
|
||||
func KeyEquals(k1, k2 Key) bool {
|
||||
a, err := k1.Raw()
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
b, err := k2.Raw()
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return subtle.ConstantTimeCompare(a, b) == 1
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package keys
|
||||
package symmetric
|
||||
|
||||
import (
|
||||
"crypto/aes"
|
||||
@ -17,17 +17,11 @@ const (
|
||||
KeyBytes = 32
|
||||
)
|
||||
|
||||
// Key is a wrapper for a symmetric key.
|
||||
type key struct {
|
||||
type Key struct {
|
||||
raw []byte
|
||||
}
|
||||
|
||||
func (k *key) Equals(k2 Key) bool {
|
||||
otherKey, ok := k2.(*key)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
|
||||
func (k *Key) Equals(otherKey *Key) bool {
|
||||
otherRaw := otherKey.raw
|
||||
keyRaw := k.raw
|
||||
|
||||
@ -43,21 +37,21 @@ func (k *key) Equals(k2 Key) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (k *key) Raw() ([]byte, error) {
|
||||
func (k *Key) Raw() ([]byte, error) {
|
||||
return k.raw, nil
|
||||
}
|
||||
|
||||
// NewRandom returns a random key.
|
||||
func NewRandom() (Key, error) {
|
||||
func NewRandom() (*Key, error) {
|
||||
raw := make([]byte, KeyBytes)
|
||||
if _, err := rand.Read(raw); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &key{raw: raw}, nil
|
||||
return &Key{raw: raw}, nil
|
||||
}
|
||||
|
||||
// New returns Key if err is nil and panics otherwise.
|
||||
func New() Key {
|
||||
func New() *Key {
|
||||
k, err := NewRandom()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
@ -66,15 +60,15 @@ func New() Key {
|
||||
}
|
||||
|
||||
// FromBytes returns a key by decoding bytes.
|
||||
func FromBytes(k []byte) (Key, error) {
|
||||
func FromBytes(k []byte) (*Key, error) {
|
||||
if len(k) != KeyBytes {
|
||||
return nil, fmt.Errorf("invalid key")
|
||||
}
|
||||
return &key{raw: k}, nil
|
||||
return &Key{raw: k}, nil
|
||||
}
|
||||
|
||||
// FromString returns a key by decoding a base32-encoded string.
|
||||
func FromString(k string) (Key, error) {
|
||||
func FromString(k string) (*Key, error) {
|
||||
_, b, err := mbase.Decode(k)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -83,17 +77,17 @@ func FromString(k string) (Key, error) {
|
||||
}
|
||||
|
||||
// Bytes returns raw key bytes.
|
||||
func (k *key) Bytes() []byte {
|
||||
func (k *Key) Bytes() []byte {
|
||||
return k.raw
|
||||
}
|
||||
|
||||
// MarshalBinary implements BinaryMarshaler.
|
||||
func (k *key) MarshalBinary() ([]byte, error) {
|
||||
func (k *Key) MarshalBinary() ([]byte, error) {
|
||||
return k.raw, nil
|
||||
}
|
||||
|
||||
// String returns the base32-encoded string representation of raw key bytes.
|
||||
func (k *key) String() string {
|
||||
func (k *Key) String() string {
|
||||
str, err := mbase.Encode(mbase.Base32, k.raw)
|
||||
if err != nil {
|
||||
panic("should not error with hardcoded mbase: " + err.Error())
|
||||
@ -102,7 +96,7 @@ func (k *key) String() string {
|
||||
}
|
||||
|
||||
// Encrypt performs AES-256 GCM encryption on plaintext.
|
||||
func (k *key) Encrypt(plaintext []byte) ([]byte, error) {
|
||||
func (k *Key) Encrypt(plaintext []byte) ([]byte, error) {
|
||||
block, err := aes.NewCipher(k.raw[:KeyBytes])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -121,7 +115,7 @@ func (k *key) Encrypt(plaintext []byte) ([]byte, error) {
|
||||
}
|
||||
|
||||
// Decrypt uses key to perform AES-256 GCM decryption on ciphertext.
|
||||
func (k *key) Decrypt(ciphertext []byte) ([]byte, error) {
|
||||
func (k *Key) Decrypt(ciphertext []byte) ([]byte, error) {
|
||||
block, err := aes.NewCipher(k.raw[:KeyBytes])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
Loading…
x
Reference in New Issue
Block a user