Add KeyStorage
This commit is contained in:
parent
3778465e3b
commit
52f462ff2c
@ -37,7 +37,7 @@ func defaultObjectTreeDeps(
|
||||
rootChange *treechangeproto.RawTreeChangeWithId,
|
||||
treeStorage treestorage.TreeStorage,
|
||||
aclList list.AclList) objectTreeDeps {
|
||||
changeBuilder := NewChangeBuilder(aclList.KeyStorage(), rootChange)
|
||||
changeBuilder := NewChangeBuilder(crypto.NewKeyStorage(), rootChange)
|
||||
treeBuilder := newTreeBuilder(treeStorage, changeBuilder)
|
||||
return objectTreeDeps{
|
||||
changeBuilder: changeBuilder,
|
||||
@ -170,7 +170,7 @@ func createObjectTreeRoot(
|
||||
Seed: seed,
|
||||
}
|
||||
|
||||
_, root, err = NewChangeBuilder(aclList.KeyStorage(), nil).BuildRoot(cnt)
|
||||
_, root, err = NewChangeBuilder(crypto.NewKeyStorage(), nil).BuildRoot(cnt)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@ -7,9 +7,10 @@ import (
|
||||
)
|
||||
|
||||
func Test_EncryptDecrypt(t *testing.T) {
|
||||
privKey, pubKey, _ := GenerateEd25519Key(rand.Reader)
|
||||
privKey, pubKey, err := GenerateEd25519Key(rand.Reader)
|
||||
require.NoError(t, err)
|
||||
msg := make([]byte, 32768)
|
||||
_, err := rand.Read(msg)
|
||||
_, err = rand.Read(msg)
|
||||
require.NoError(t, err)
|
||||
enc, err := pubKey.Encrypt(msg)
|
||||
require.NoError(t, err)
|
||||
|
||||
@ -1,9 +1,39 @@
|
||||
package crypto
|
||||
|
||||
import "bytes"
|
||||
|
||||
type KeyStorage interface {
|
||||
PubKeyFromProto(protoBytes []byte) (PubKey, error)
|
||||
}
|
||||
|
||||
func NewKeyStorage() KeyStorage {
|
||||
return nil
|
||||
return &keyStorage{}
|
||||
}
|
||||
|
||||
type pubKeyEntry struct {
|
||||
protoKey []byte
|
||||
key PubKey
|
||||
}
|
||||
|
||||
type keyStorage struct {
|
||||
keys []pubKeyEntry
|
||||
}
|
||||
|
||||
func (k *keyStorage) PubKeyFromProto(protoBytes []byte) (PubKey, error) {
|
||||
for _, k := range k.keys {
|
||||
// it is not guaranteed that proto will always marshal to the same bytes (but in our case it probably will)
|
||||
// but this shouldn't be the problem, because we will just create another copy
|
||||
if bytes.Equal(protoBytes, k.protoKey) {
|
||||
return k.key, nil
|
||||
}
|
||||
}
|
||||
key, err := UnmarshalEd25519PublicKeyProto(protoBytes)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
k.keys = append(k.keys, pubKeyEntry{
|
||||
protoKey: protoBytes,
|
||||
key: key,
|
||||
})
|
||||
return key, nil
|
||||
}
|
||||
|
||||
21
util/crypto/keystorage_test.go
Normal file
21
util/crypto/keystorage_test.go
Normal file
@ -0,0 +1,21 @@
|
||||
package crypto
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestKeyStorage_PubKeyFromProto(t *testing.T) {
|
||||
st := NewKeyStorage().(*keyStorage)
|
||||
_, pubKey, err := GenerateEd25519Key(rand.Reader)
|
||||
require.NoError(t, err)
|
||||
for i := 0; i < 100; i++ {
|
||||
marshalled, err := pubKey.Marshall()
|
||||
require.NoError(t, err)
|
||||
pk, err := st.PubKeyFromProto(marshalled)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, pk.Storage(), pubKey.Storage())
|
||||
}
|
||||
require.Equal(t, 1, len(st.keys))
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user