Skip to content
This repository has been archived by the owner on Mar 27, 2024. It is now read-only.

feat: new common wallet package #2670

Merged
merged 1 commit into from
Mar 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
476 changes: 64 additions & 412 deletions pkg/client/vcwallet/client.go

Large diffs are not rendered by default.

666 changes: 210 additions & 456 deletions pkg/client/vcwallet/client_test.go

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pkg/client/vcwallet/contents.go → pkg/wallet/contents.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package vcwallet
package wallet

import (
"encoding/json"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package vcwallet
package wallet

import (
"errors"
Expand Down
14 changes: 7 additions & 7 deletions pkg/client/vcwallet/kmsclient.go → pkg/wallet/kmsclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package vcwallet
package wallet

import (
"bytes"
Expand Down Expand Up @@ -74,8 +74,8 @@ type walletKeyManager struct {
gstore gcache.Cache
}

func (k *walletKeyManager) createKeyManager(profileInfo *profile, storeProvider storage.Provider, auth string,
secretLockSvc secretlock.Service, expiration time.Duration) (string, error) {
func (k *walletKeyManager) createKeyManager(profileInfo *profile,
storeProvider storage.Provider, opts *unlockOpts) (string, error) {
if profileInfo.MasterLockCipher == "" && profileInfo.KeyServerURL == "" {
return "", fmt.Errorf("invalid wallet profile")
}
Expand All @@ -93,21 +93,21 @@ func (k *walletKeyManager) createKeyManager(profileInfo *profile, storeProvider
// create key manager
if profileInfo.MasterLockCipher != "" {
// local kms
keyManager, err = createLocalKeyManager(profileInfo.User, auth,
profileInfo.MasterLockCipher, secretLockSvc, storeProvider)
keyManager, err = createLocalKeyManager(profileInfo.User, opts.passphrase,
profileInfo.MasterLockCipher, opts.secretLockSvc, storeProvider)
if err != nil {
return "", fmt.Errorf("failed to create local key manager: %w", err)
}
} else {
// remote kms
keyManager = createRemoteKeyManager(auth, profileInfo.KeyServerURL)
keyManager = createRemoteKeyManager(opts.authToken, profileInfo.KeyServerURL)
}

// generate token
token = uuid.New().String()

// save key manager
err = k.saveKeyManger(profileInfo.User, token, keyManager, expiration)
err = k.saveKeyManger(profileInfo.User, token, keyManager, opts.tokenExpiry)
if err != nil {
return "", fmt.Errorf("failed to persist local key manager: %w", err)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package vcwallet
package wallet

import (
"crypto/sha256"
Expand Down Expand Up @@ -47,7 +47,7 @@ func TestKeyManager(t *testing.T) {
}

tkn, err := keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
samplePassPhrase, nil, 0)
&unlockOpts{passphrase: samplePassPhrase})
require.NoError(t, err)
require.NotEmpty(t, tkn)

Expand All @@ -58,7 +58,7 @@ func TestKeyManager(t *testing.T) {

// try to create again before expiry
tkn, err = keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
samplePassPhrase, nil, 0)
&unlockOpts{passphrase: samplePassPhrase})
require.Error(t, err)
require.Equal(t, err, ErrAlreadyUnlocked)
require.Empty(t, tkn)
Expand All @@ -79,7 +79,7 @@ func TestKeyManager(t *testing.T) {
}

tkn, err := keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
"", masterLock, 0)
&unlockOpts{secretLockSvc: masterLock})
require.NoError(t, err)
require.NotEmpty(t, tkn)

Expand All @@ -90,7 +90,7 @@ func TestKeyManager(t *testing.T) {

// try to create again before expiry
tkn, err = keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
"", masterLock, 0)
&unlockOpts{secretLockSvc: masterLock})
require.Error(t, err)
require.Equal(t, err, ErrAlreadyUnlocked)
require.Empty(t, tkn)
Expand All @@ -112,7 +112,7 @@ func TestKeyManager(t *testing.T) {

// use wrong passphrase
tkn, err := keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
samplePassPhrase+"wrong", nil, 0)
&unlockOpts{passphrase: samplePassPhrase + "wrong"})
require.Empty(t, tkn)
require.Error(t, err)
require.Contains(t, err.Error(), "message authentication failed")
Expand Down Expand Up @@ -143,7 +143,7 @@ func TestKeyManager(t *testing.T) {
require.NoError(t, err)

tkn, err := keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
"", masterLockBad, 0)
&unlockOpts{secretLockSvc: masterLockBad})
require.Empty(t, tkn)
require.Error(t, err)
require.Contains(t, err.Error(), "message authentication failed")
Expand All @@ -163,7 +163,7 @@ func TestKeyManager(t *testing.T) {
}

tkn, err := keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
sampleRemoteKMSAuth, nil, 0)
&unlockOpts{authToken: sampleRemoteKMSAuth})
require.NoError(t, err)
require.NotEmpty(t, tkn)

Expand All @@ -177,7 +177,7 @@ func TestKeyManager(t *testing.T) {

// try to create again before expiry
tkn, err = keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
sampleRemoteKMSAuth, nil, 0)
&unlockOpts{authToken: sampleRemoteKMSAuth})
require.Error(t, err)
require.Equal(t, err, ErrAlreadyUnlocked)
require.Empty(t, tkn)
Expand All @@ -189,7 +189,7 @@ func TestKeyManager(t *testing.T) {
}

tkn, err := keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
sampleRemoteKMSAuth, nil, 0)
&unlockOpts{authToken: sampleRemoteKMSAuth})
require.Empty(t, tkn)
require.Error(t, err)
require.Contains(t, err.Error(), "invalid wallet profile")
Expand All @@ -209,7 +209,7 @@ func TestKeyManager(t *testing.T) {
}

tkn, err := keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
sampleRemoteKMSAuth, nil, 0)
&unlockOpts{authToken: sampleRemoteKMSAuth})
require.NoError(t, err)
require.NotEmpty(t, tkn)

Expand All @@ -220,7 +220,7 @@ func TestKeyManager(t *testing.T) {

// try to create again before expiry
tkn, err = keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
sampleRemoteKMSAuth, nil, 0)
&unlockOpts{authToken: sampleRemoteKMSAuth})
require.Error(t, err)
require.Equal(t, err, ErrAlreadyUnlocked)
require.Empty(t, tkn)
Expand All @@ -237,7 +237,7 @@ func TestKeyManager(t *testing.T) {

// try again to create
tkn, err = keyManager().createKeyManager(profileInfo, mockstorage.NewMockStoreProvider(),
sampleRemoteKMSAuth, nil, 0)
&unlockOpts{authToken: sampleRemoteKMSAuth})
require.NoError(t, err)
require.NotEmpty(t, tkn)

Expand Down
2 changes: 1 addition & 1 deletion pkg/client/vcwallet/models.go → pkg/wallet/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package vcwallet
package wallet

import (
"encoding/json"
Expand Down
2 changes: 1 addition & 1 deletion pkg/client/vcwallet/profile.go → pkg/wallet/profile.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package vcwallet
package wallet

import (
"encoding/json"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/

package vcwallet
package wallet

import (
"fmt"
Expand Down