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/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

865
go.sum

File diff suppressed because it is too large Load Diff

View File

@ -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
}

View File

@ -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,

View File

@ -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,

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/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)

View File

@ -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)
}

View File

@ -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)

View File

@ -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 {

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/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 {

View File

@ -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
}

View File

@ -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,

View File

@ -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)
}

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/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")

View File

@ -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)
}

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/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)

View File

@ -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)
}

View File

@ -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

View File

@ -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)

View File

@ -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)
}

View File

@ -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
}

View File

@ -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