Skip to content

Commit

Permalink
feat: new wallet package
Browse files Browse the repository at this point in the history
- all common internal source inside `pkg/client/vcwallet` moved to
`pkg/wallet`. This new package will be reused by upcoming command
controllers.
- `vcwallet.New()` to unlock wallet during instantiation, where existing
instances of same wallet will be locked.
- some refactoring for SDK binding for better client experience.
- Part of hyperledger-archives#2433

Signed-off-by: sudesh.shetty <sudesh.shetty@securekey.com>
  • Loading branch information
sudeshrshetty committed Mar 24, 2021
1 parent 074644c commit 1c9f654
Show file tree
Hide file tree
Showing 11 changed files with 1,871 additions and 893 deletions.
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
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
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
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
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
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
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
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

0 comments on commit 1c9f654

Please sign in to comment.