Remove go-threads

This commit is contained in:
mcrakhman 2022-07-13 22:54:47 +02:00 committed by Mikhail Iudin
parent 20df88bbde
commit d5a801cff5
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
22 changed files with 134 additions and 980 deletions

3
go.mod
View File

@ -12,7 +12,6 @@ require (
github.com/multiformats/go-multihash v0.0.15 github.com/multiformats/go-multihash v0.0.15
github.com/prometheus/common v0.18.0 github.com/prometheus/common v0.18.0
github.com/stretchr/testify v1.7.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 go.uber.org/zap v1.21.0
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
) )
@ -40,5 +39,3 @@ require (
golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect
gopkg.in/alecthomas/kingpin.v2 v2.2.6 // 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

865
go.sum

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,13 @@
package account 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 type AccountData struct { // TODO: create a convenient constructor for this
Identity string // TODO: this is essentially the same as sign key Identity string // TODO: this is essentially the same as sign key
SignKey keys.SigningPrivKey SignKey signingkey.SigningPrivKey
EncKey keys.EncryptionPrivKey EncKey encryptionkey.EncryptionPrivKey
Decoder keys.SigningPubKeyDecoder Decoder signingkey.SigningPubKeyDecoder
} }

View File

@ -5,8 +5,9 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/pb" "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/textileio/go-threads/crypto/symmetric" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/symmetric"
"hash/fnv" "hash/fnv"
) )
@ -21,15 +22,15 @@ type ACLState struct {
userReadKeys map[uint64]*symmetric.Key userReadKeys map[uint64]*symmetric.Key
userStates map[string]*pb.ACLChangeUserState userStates map[string]*pb.ACLChangeUserState
userInvites map[string]*pb.ACLChangeUserInvite userInvites map[string]*pb.ACLChangeUserInvite
signingPubKeyDecoder keys.SigningPubKeyDecoder signingPubKeyDecoder signingkey.SigningPubKeyDecoder
encryptionKey keys.EncryptionPrivKey encryptionKey encryptionkey.EncryptionPrivKey
identity string identity string
} }
func newACLState( func newACLState(
identity string, identity string,
encryptionKey keys.EncryptionPrivKey, encryptionKey encryptionkey.EncryptionPrivKey,
signingPubKeyDecoder keys.SigningPubKeyDecoder) *ACLState { signingPubKeyDecoder signingkey.SigningPubKeyDecoder) *ACLState {
return &ACLState{ return &ACLState{
identity: identity, identity: identity,
encryptionKey: encryptionKey, encryptionKey: encryptionKey,
@ -43,8 +44,8 @@ func newACLState(
func newACLStateFromSnapshotChange( func newACLStateFromSnapshotChange(
snapshotChange *pb.ACLChange, snapshotChange *pb.ACLChange,
identity string, identity string,
encryptionKey keys.EncryptionPrivKey, encryptionKey encryptionkey.EncryptionPrivKey,
signingPubKeyDecoder keys.SigningPubKeyDecoder) (*ACLState, error) { signingPubKeyDecoder signingkey.SigningPubKeyDecoder) (*ACLState, error) {
st := &ACLState{ st := &ACLState{
identity: identity, identity: identity,
encryptionKey: encryptionKey, encryptionKey: encryptionKey,

View File

@ -4,15 +4,15 @@ import (
"fmt" "fmt"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" "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/aclchanges/pb"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
) )
type aclStateBuilder struct { type aclStateBuilder struct {
tree *Tree tree *Tree
identity string identity string
key keys.EncryptionPrivKey key encryptionkey.EncryptionPrivKey
decoder keys.SigningPubKeyDecoder decoder signingkey.SigningPubKeyDecoder
} }
type decreasedPermissionsParameters struct { type decreasedPermissionsParameters struct {
@ -20,7 +20,7 @@ type decreasedPermissionsParameters struct {
startChange string startChange string
} }
func newACLStateBuilder(decoder keys.SigningPubKeyDecoder, accountData *account.AccountData) *aclStateBuilder { func newACLStateBuilder(decoder signingkey.SigningPubKeyDecoder, accountData *account.AccountData) *aclStateBuilder {
return &aclStateBuilder{ return &aclStateBuilder{
decoder: decoder, decoder: decoder,
identity: accountData.Identity, identity: accountData.Identity,

View File

@ -4,7 +4,7 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" "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/aclchanges/pb"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/testutils/treestoragebuilder" "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" "testing"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
@ -26,7 +26,7 @@ func TestACLTree_UserJoinBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(), Decoder: signingkey.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -61,7 +61,7 @@ func TestACLTree_UserJoinUpdate_Append(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(), Decoder: signingkey.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -111,7 +111,7 @@ func TestACLTree_UserJoinUpdate_Rebuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(), Decoder: signingkey.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -162,7 +162,7 @@ func TestACLTree_UserRemoveBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(), Decoder: signingkey.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -193,7 +193,7 @@ func TestACLTree_UserRemoveBeforeBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(), Decoder: signingkey.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -225,7 +225,7 @@ func TestACLTree_InvalidSnapshotBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(), Decoder: signingkey.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)
@ -256,7 +256,7 @@ func TestACLTree_ValidSnapshotBuild(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(), Decoder: signingkey.NewEd25519Decoder(),
} }
listener := &mockListener{} listener := &mockListener{}
tree, err := BuildACLTree(thr, accountData, listener) tree, err := BuildACLTree(thr, accountData, listener)

View File

@ -3,22 +3,22 @@ package acltree
import ( import (
"fmt" "fmt"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage" "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" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/slice"
) )
type aclTreeBuilder struct { type aclTreeBuilder struct {
cache map[string]*Change cache map[string]*Change
identityKeys map[string]keys.SigningPubKey identityKeys map[string]signingkey.SigningPubKey
signingPubKeyDecoder keys.SigningPubKeyDecoder signingPubKeyDecoder signingkey.SigningPubKeyDecoder
tree *Tree tree *Tree
treeStorage treestorage.TreeStorage treeStorage treestorage.TreeStorage
*changeLoader *changeLoader
} }
func newACLTreeBuilder(t treestorage.TreeStorage, decoder keys.SigningPubKeyDecoder) *aclTreeBuilder { func newACLTreeBuilder(t treestorage.TreeStorage, decoder signingkey.SigningPubKeyDecoder) *aclTreeBuilder {
return &aclTreeBuilder{ return &aclTreeBuilder{
signingPubKeyDecoder: decoder, signingPubKeyDecoder: decoder,
treeStorage: t, treeStorage: t,
@ -31,7 +31,7 @@ func newACLTreeBuilder(t treestorage.TreeStorage, decoder keys.SigningPubKeyDeco
func (tb *aclTreeBuilder) Init() { func (tb *aclTreeBuilder) Init() {
tb.cache = make(map[string]*Change) tb.cache = make(map[string]*Change)
tb.identityKeys = make(map[string]keys.SigningPubKey) tb.identityKeys = make(map[string]signingkey.SigningPubKey)
tb.tree = &Tree{} tb.tree = &Tree{}
tb.changeLoader.Init(tb.cache, tb.identityKeys) tb.changeLoader.Init(tb.cache, tb.identityKeys)
} }

View File

@ -3,7 +3,7 @@ package acltree
import ( import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" "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/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( func BuildTreeStorageWithACL(
@ -12,7 +12,7 @@ func BuildTreeStorageWithACL(
create func(change *treestorage.RawChange) (treestorage.TreeStorage, error)) (treestorage.TreeStorage, error) { create func(change *treestorage.RawChange) (treestorage.TreeStorage, error)) (treestorage.TreeStorage, error) {
bld := newChangeBuilder() bld := newChangeBuilder()
bld.Init( bld.Init(
newACLState(acc.Identity, acc.EncKey, keys.NewEd25519Decoder()), newACLState(acc.Identity, acc.EncKey, signingkey.NewEd25519Decoder()),
&Tree{}, &Tree{},
acc) acc)
err := build(bld) err := build(bld)

View File

@ -6,7 +6,7 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
"github.com/gogo/protobuf/proto" "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 { type ChangeContent struct {

View File

@ -4,9 +4,9 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" "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/aclchanges/pb"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/cid" "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/gogo/protobuf/proto"
"github.com/textileio/go-threads/crypto/symmetric"
"hash/fnv" "hash/fnv"
"time" "time"
) )
@ -14,7 +14,7 @@ import (
type MarshalledChange = []byte type MarshalledChange = []byte
type ACLChangeBuilder interface { 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 AddId(id string) // TODO: this is only for testing
SetMakeSnapshot(bool) // TODO: who should decide this? probably ACLTree so we can delete it 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 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 var allKeys []*symmetric.Key
if c.aclState.currentReadKeyHash != 0 { if c.aclState.currentReadKeyHash != 0 {
for _, key := range c.aclState.userReadKeys { for _, key := range c.aclState.userReadKeys {

View File

@ -5,23 +5,23 @@ import (
"fmt" "fmt"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/aclchanges/pb" "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/pkg/acl/treestorage"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
"time" "time"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
) )
type changeLoader struct { type changeLoader struct {
cache map[string]*Change cache map[string]*Change
identityKeys map[string]keys.SigningPubKey identityKeys map[string]signingkey.SigningPubKey
signingPubKeyDecoder keys.SigningPubKeyDecoder signingPubKeyDecoder signingkey.SigningPubKeyDecoder
treeStorage treestorage.TreeStorage treeStorage treestorage.TreeStorage
changeCreator func(id string, ch *pb.ACLChange) *Change changeCreator func(id string, ch *pb.ACLChange) *Change
} }
func newChangeLoader( func newChangeLoader(
treeStorage treestorage.TreeStorage, treeStorage treestorage.TreeStorage,
signingPubKeyDecoder keys.SigningPubKeyDecoder, signingPubKeyDecoder signingkey.SigningPubKeyDecoder,
changeCreator func(id string, ch *pb.ACLChange) *Change) *changeLoader { changeCreator func(id string, ch *pb.ACLChange) *Change) *changeLoader {
return &changeLoader{ return &changeLoader{
signingPubKeyDecoder: signingPubKeyDecoder, signingPubKeyDecoder: signingPubKeyDecoder,
@ -31,7 +31,7 @@ func newChangeLoader(
} }
func (c *changeLoader) Init(cache map[string]*Change, func (c *changeLoader) Init(cache map[string]*Change,
identityKeys map[string]keys.SigningPubKey) { identityKeys map[string]signingkey.SigningPubKey) {
c.cache = cache c.cache = cache
c.identityKeys = identityKeys c.identityKeys = identityKeys
} }

View File

@ -3,20 +3,20 @@ package acltree
import ( import (
"fmt" "fmt"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/encryptionkey"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/asymmetric/signingkey"
) )
type snapshotValidator struct { type snapshotValidator struct {
aclTree *Tree aclTree *Tree
identity string identity string
key keys.EncryptionPrivKey key encryptionkey.EncryptionPrivKey
decoder keys.SigningPubKeyDecoder decoder signingkey.SigningPubKeyDecoder
stateBuilder *aclStateBuilder stateBuilder *aclStateBuilder
} }
func newSnapshotValidator( func newSnapshotValidator(
decoder keys.SigningPubKeyDecoder, decoder signingkey.SigningPubKeyDecoder,
accountData *account.AccountData) *snapshotValidator { accountData *account.AccountData) *snapshotValidator {
return &snapshotValidator{ return &snapshotValidator{
identity: accountData.Identity, identity: accountData.Identity,

View File

@ -4,8 +4,8 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage" "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/pkg/lib/logging"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/slice" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/slice"
"github.com/prometheus/common/log" "github.com/prometheus/common/log"
@ -18,15 +18,15 @@ var (
type treeBuilder struct { type treeBuilder struct {
cache map[string]*Change cache map[string]*Change
identityKeys map[string]keys.SigningPubKey identityKeys map[string]signingkey.SigningPubKey
signingPubKeyDecoder keys.SigningPubKeyDecoder signingPubKeyDecoder signingkey.SigningPubKeyDecoder
tree *Tree tree *Tree
treeStorage treestorage.TreeStorage treeStorage treestorage.TreeStorage
*changeLoader *changeLoader
} }
func newTreeBuilder(t treestorage.TreeStorage, decoder keys.SigningPubKeyDecoder) *treeBuilder { func newTreeBuilder(t treestorage.TreeStorage, decoder signingkey.SigningPubKeyDecoder) *treeBuilder {
return &treeBuilder{ return &treeBuilder{
signingPubKeyDecoder: decoder, signingPubKeyDecoder: decoder,
treeStorage: t, treeStorage: t,
@ -39,7 +39,7 @@ func newTreeBuilder(t treestorage.TreeStorage, decoder keys.SigningPubKeyDecoder
func (tb *treeBuilder) Init() { func (tb *treeBuilder) Init() {
tb.cache = make(map[string]*Change) tb.cache = make(map[string]*Change)
tb.identityKeys = make(map[string]keys.SigningPubKey) tb.identityKeys = make(map[string]signingkey.SigningPubKey)
tb.tree = &Tree{} tb.tree = &Tree{}
tb.changeLoader.Init(tb.cache, tb.identityKeys) tb.changeLoader.Init(tb.cache, tb.identityKeys)
} }

View File

@ -4,7 +4,7 @@ import (
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/account" "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/testutils/treestoragebuilder"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage" "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" "github.com/stretchr/testify/assert"
"testing" "testing"
) )
@ -17,7 +17,7 @@ func TestDocument_NewPlainTextDocument(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(), Decoder: signingkey.NewEd25519Decoder(),
} }
doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text") doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text")
@ -35,7 +35,7 @@ func TestDocument_PlainTextDocument_AddText(t *testing.T) {
Identity: keychain.GetIdentity("A"), Identity: keychain.GetIdentity("A"),
SignKey: keychain.SigningKeys["A"], SignKey: keychain.SigningKeys["A"],
EncKey: keychain.EncryptionKeys["A"], EncKey: keychain.EncryptionKeys["A"],
Decoder: keys.NewEd25519Decoder(), Decoder: signingkey.NewEd25519Decoder(),
} }
doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text") doc, err := NewPlainTextDocument(data, treestorage.NewInMemoryTreeStorage, "Some text")

View File

@ -1,12 +1,12 @@
package treestoragebuilder package treestoragebuilder
import ( 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" "hash/fnv"
"strings" "strings"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys/symmetric"
"github.com/textileio/go-threads/crypto/symmetric"
) )
type SymKey struct { type SymKey struct {
@ -15,24 +15,24 @@ type SymKey struct {
} }
type Keychain struct { type Keychain struct {
SigningKeys map[string]keys.SigningPrivKey SigningKeys map[string]signingkey.SigningPrivKey
SigningKeysByIdentity map[string]keys.SigningPrivKey SigningKeysByIdentity map[string]signingkey.SigningPrivKey
EncryptionKeys map[string]keys.EncryptionPrivKey EncryptionKeys map[string]encryptionkey.EncryptionPrivKey
ReadKeys map[string]*SymKey ReadKeys map[string]*SymKey
ReadKeysByHash map[uint64]*SymKey ReadKeysByHash map[uint64]*SymKey
GeneratedIdentities map[string]string GeneratedIdentities map[string]string
coder keys.SigningPubKeyDecoder coder signingkey.SigningPubKeyDecoder
} }
func NewKeychain() *Keychain { func NewKeychain() *Keychain {
return &Keychain{ return &Keychain{
SigningKeys: map[string]keys.SigningPrivKey{}, SigningKeys: map[string]signingkey.SigningPrivKey{},
SigningKeysByIdentity: map[string]keys.SigningPrivKey{}, SigningKeysByIdentity: map[string]signingkey.SigningPrivKey{},
EncryptionKeys: map[string]keys.EncryptionPrivKey{}, EncryptionKeys: map[string]encryptionkey.EncryptionPrivKey{},
GeneratedIdentities: map[string]string{}, GeneratedIdentities: map[string]string{},
ReadKeys: map[string]*SymKey{}, ReadKeys: map[string]*SymKey{},
ReadKeysByHash: map[uint64]*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 { if _, exists := k.EncryptionKeys[name]; exists {
return return
} }
newPrivKey, _, err := keys.GenerateRandomRSAKeyPair(2048) newPrivKey, _, err := encryptionkey.GenerateRandomRSAKeyPair(2048)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -66,7 +66,7 @@ func (k *Keychain) AddSigningKey(name string) {
if _, exists := k.SigningKeys[name]; exists { if _, exists := k.SigningKeys[name]; exists {
return return
} }
newPrivKey, pubKey, err := keys.GenerateRandomEd25519KeyPair() newPrivKey, pubKey, err := signingkey.GenerateRandomEd25519KeyPair()
if err != nil { if err != nil {
panic(err) panic(err)
} }

View File

@ -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/testutils/yamltests"
"github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage" "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage"
storagepb "github.com/anytypeio/go-anytype-infrastructure-experiments/pkg/acl/treestorage/pb" 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" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/slice"
"io/ioutil" "io/ioutil"
"path" "path"
"github.com/gogo/protobuf/proto" "github.com/gogo/protobuf/proto"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
) )
const plainTextDocType uint16 = 1 const plainTextDocType uint16 = 1
@ -25,7 +25,7 @@ type treeChange struct {
*pb.ACLChange *pb.ACLChange
id string id string
readKey *SymKey readKey *SymKey
signKey keys.SigningPrivKey signKey signingkey.SigningPrivKey
changesDataDecrypted []byte changesDataDecrypted []byte
} }
@ -297,7 +297,7 @@ func (t *TreeStorageBuilder) parseACLSnapshot(s *ACLSnapshot) *pb.ACLChangeACLSn
aclUserState.Identity = t.keychain.GetIdentity(state.Identity) aclUserState.Identity = t.keychain.GetIdentity(state.Identity)
encKey := t.keychain. encKey := t.keychain.
GetKey(state.EncryptionKey).(keys.EncryptionPrivKey) GetKey(state.EncryptionKey).(encryptionkey.EncryptionPrivKey)
rawKey, _ := encKey.GetPublic().Raw() rawKey, _ := encKey.GetPublic().Raw()
aclUserState.EncryptionKey = rawKey aclUserState.EncryptionKey = rawKey
@ -334,7 +334,7 @@ func (t *TreeStorageBuilder) parseACLChange(ch *ACLChange) (convCh *pb.ACLChange
add := ch.UserAdd add := ch.UserAdd
encKey := t.keychain. encKey := t.keychain.
GetKey(add.EncryptionKey).(keys.EncryptionPrivKey) GetKey(add.EncryptionKey).(encryptionkey.EncryptionPrivKey)
rawKey, _ := encKey.GetPublic().Raw() rawKey, _ := encKey.GetPublic().Raw()
convCh = &pb.ACLChangeACLContentValue{ convCh = &pb.ACLChangeACLContentValue{
@ -351,11 +351,11 @@ func (t *TreeStorageBuilder) parseACLChange(ch *ACLChange) (convCh *pb.ACLChange
join := ch.UserJoin join := ch.UserJoin
encKey := t.keychain. encKey := t.keychain.
GetKey(join.EncryptionKey).(keys.EncryptionPrivKey) GetKey(join.EncryptionKey).(encryptionkey.EncryptionPrivKey)
rawKey, _ := encKey.GetPublic().Raw() rawKey, _ := encKey.GetPublic().Raw()
idKey, _ := t.keychain.SigningKeys[join.Identity].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) signature, err := signKey.Sign(idKey)
if err != nil { if err != nil {
panic(err) panic(err)
@ -374,9 +374,9 @@ func (t *TreeStorageBuilder) parseACLChange(ch *ACLChange) (convCh *pb.ACLChange
} }
case ch.UserInvite != nil: case ch.UserInvite != nil:
invite := ch.UserInvite 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. encKey := t.keychain.
GetKey(invite.EncryptionKey).(keys.EncryptionPrivKey) GetKey(invite.EncryptionKey).(encryptionkey.EncryptionPrivKey)
rawEncKey, _ := encKey.GetPublic().Raw() rawEncKey, _ := encKey.GetPublic().Raw()
convCh = &pb.ACLChangeACLContentValue{ convCh = &pb.ACLChangeACLContentValue{
@ -449,7 +449,7 @@ func (t *TreeStorageBuilder) parseACLChange(ch *ACLChange) (convCh *pb.ACLChange
return convCh 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 { for _, k := range keys {
realKey := t.keychain.GetKey(k).(*SymKey).Key.Bytes() realKey := t.keychain.GetKey(k).(*SymKey).Key.Bytes()
res, err := encKey.GetPublic().Encrypt(realKey) res, err := encKey.GetPublic().Encrypt(realKey)

View File

@ -1,14 +1,16 @@
package keys package encryptionkey
import "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
type EncryptionPrivKey interface { type EncryptionPrivKey interface {
Key keys.Key
Decrypt([]byte) ([]byte, error) Decrypt([]byte) ([]byte, error)
GetPublic() EncryptionPubKey GetPublic() EncryptionPubKey
} }
type EncryptionPubKey interface { type EncryptionPubKey interface {
Key keys.Key
Encrypt(data []byte) ([]byte, error) Encrypt(data []byte) ([]byte, error)
} }

View File

@ -1,4 +1,4 @@
package keys package encryptionkey
import ( import (
"crypto/rand" "crypto/rand"
@ -7,6 +7,7 @@ import (
"crypto/subtle" "crypto/subtle"
"crypto/x509" "crypto/x509"
"errors" "errors"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
"io" "io"
) )
@ -22,7 +23,7 @@ type EncryptionRsaPubKey struct {
pubKey rsa.PublicKey pubKey rsa.PublicKey
} }
func (e *EncryptionRsaPubKey) Equals(key Key) bool { func (e *EncryptionRsaPubKey) Equals(key keys.Key) bool {
other, ok := (key).(*EncryptionRsaPubKey) other, ok := (key).(*EncryptionRsaPubKey)
if !ok { if !ok {
return keyEquals(e, key) 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) 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) other, ok := (key).(*EncryptionRsaPrivKey)
if !ok { if !ok {
return keyEquals(e, key) return keyEquals(e, key)
@ -106,7 +107,7 @@ func NewEncryptionRsaPubKeyFromBytes(bytes []byte) (EncryptionPubKey, error) {
return &EncryptionRsaPubKey{pubKey: *pk}, nil return &EncryptionRsaPubKey{pubKey: *pk}, nil
} }
func keyEquals(k1, k2 Key) bool { func keyEquals(k1, k2 keys.Key) bool {
a, err := k1.Raw() a, err := k1.Raw()
if err != nil { if err != nil {
return false return false

View File

@ -1,4 +1,4 @@
package keys package signingkey
import ( import (
"bytes" "bytes"
@ -7,6 +7,7 @@ import (
"crypto/subtle" "crypto/subtle"
"errors" "errors"
"fmt" "fmt"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
"io" "io"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/strkey" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/strkey"
@ -63,10 +64,10 @@ func (k *Ed25519PrivateKey) pubKeyBytes() []byte {
} }
// Equals compares two ed25519 private keys. // 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) edk, ok := o.(*Ed25519PrivateKey)
if !ok { if !ok {
return keyEquals(k, o) return keys.KeyEquals(k, o)
} }
return subtle.ConstantTimeCompare(k.k, edk.k) == 1 return subtle.ConstantTimeCompare(k.k, edk.k) == 1
@ -88,10 +89,10 @@ func (k *Ed25519PublicKey) Raw() ([]byte, error) {
} }
// Equals compares two ed25519 public keys. // 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) edk, ok := o.(*Ed25519PublicKey)
if !ok { if !ok {
return keyEquals(k, o) return keys.KeyEquals(k, o)
} }
return bytes.Equal(k.k, edk.k) return bytes.Equal(k.k, edk.k)

View File

@ -1,7 +1,9 @@
package keys package signingkey
import "github.com/anytypeio/go-anytype-infrastructure-experiments/util/keys"
type SigningPrivKey interface { type SigningPrivKey interface {
Key keys.Key
Sign([]byte) ([]byte, error) Sign([]byte) ([]byte, error)
@ -9,7 +11,7 @@ type SigningPrivKey interface {
} }
type SigningPubKey interface { type SigningPubKey interface {
Key keys.Key
Verify(data []byte, sig []byte) (bool, error) Verify(data []byte, sig []byte) (bool, error)
} }

View File

@ -1,7 +1,21 @@
package keys package keys
import "crypto/subtle"
type Key interface { type Key interface {
Equals(Key) bool Equals(Key) bool
Raw() ([]byte, error) 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
}

View File

@ -1,4 +1,4 @@
package keys package symmetric
import ( import (
"crypto/aes" "crypto/aes"
@ -17,17 +17,11 @@ const (
KeyBytes = 32 KeyBytes = 32
) )
// Key is a wrapper for a symmetric key. type Key struct {
type key struct {
raw []byte raw []byte
} }
func (k *key) Equals(k2 Key) bool { func (k *Key) Equals(otherKey *Key) bool {
otherKey, ok := k2.(*key)
if !ok {
return false
}
otherRaw := otherKey.raw otherRaw := otherKey.raw
keyRaw := k.raw keyRaw := k.raw
@ -43,21 +37,21 @@ func (k *key) Equals(k2 Key) bool {
return true return true
} }
func (k *key) Raw() ([]byte, error) { func (k *Key) Raw() ([]byte, error) {
return k.raw, nil return k.raw, nil
} }
// NewRandom returns a random key. // NewRandom returns a random key.
func NewRandom() (Key, error) { func NewRandom() (*Key, error) {
raw := make([]byte, KeyBytes) raw := make([]byte, KeyBytes)
if _, err := rand.Read(raw); err != nil { if _, err := rand.Read(raw); err != nil {
return nil, err return nil, err
} }
return &key{raw: raw}, nil return &Key{raw: raw}, nil
} }
// New returns Key if err is nil and panics otherwise. // New returns Key if err is nil and panics otherwise.
func New() Key { func New() *Key {
k, err := NewRandom() k, err := NewRandom()
if err != nil { if err != nil {
panic(err) panic(err)
@ -66,15 +60,15 @@ func New() Key {
} }
// FromBytes returns a key by decoding bytes. // FromBytes returns a key by decoding bytes.
func FromBytes(k []byte) (Key, error) { func FromBytes(k []byte) (*Key, error) {
if len(k) != KeyBytes { if len(k) != KeyBytes {
return nil, fmt.Errorf("invalid key") 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. // 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) _, b, err := mbase.Decode(k)
if err != nil { if err != nil {
return nil, err return nil, err
@ -83,17 +77,17 @@ func FromString(k string) (Key, error) {
} }
// Bytes returns raw key bytes. // Bytes returns raw key bytes.
func (k *key) Bytes() []byte { func (k *Key) Bytes() []byte {
return k.raw return k.raw
} }
// MarshalBinary implements BinaryMarshaler. // MarshalBinary implements BinaryMarshaler.
func (k *key) MarshalBinary() ([]byte, error) { func (k *Key) MarshalBinary() ([]byte, error) {
return k.raw, nil return k.raw, nil
} }
// String returns the base32-encoded string representation of raw key bytes. // 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) str, err := mbase.Encode(mbase.Base32, k.raw)
if err != nil { if err != nil {
panic("should not error with hardcoded mbase: " + err.Error()) 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. // 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]) block, err := aes.NewCipher(k.raw[:KeyBytes])
if err != nil { if err != nil {
return nil, err 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. // 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]) block, err := aes.NewCipher(k.raw[:KeyBytes])
if err != nil { if err != nil {
return nil, err return nil, err