aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/key_store_passphrase.go
diff options
context:
space:
mode:
authorDrake Burroughs <wildfyre@hotmail.com>2015-10-23 22:49:36 +0800
committerDrake Burroughs <wildfyre@hotmail.com>2015-10-29 01:46:39 +0800
commit05ea8926c32a97d9f193a69076037b7a704d6d92 (patch)
tree704b8897b7a0751fb6e7043bc8cc2baec923a496 /crypto/key_store_passphrase.go
parent6b5a42a15ca54749d41c0b29b4a26ebb3a1a53f0 (diff)
downloadgo-tangerine-05ea8926c32a97d9f193a69076037b7a704d6d92.tar
go-tangerine-05ea8926c32a97d9f193a69076037b7a704d6d92.tar.gz
go-tangerine-05ea8926c32a97d9f193a69076037b7a704d6d92.tar.bz2
go-tangerine-05ea8926c32a97d9f193a69076037b7a704d6d92.tar.lz
go-tangerine-05ea8926c32a97d9f193a69076037b7a704d6d92.tar.xz
go-tangerine-05ea8926c32a97d9f193a69076037b7a704d6d92.tar.zst
go-tangerine-05ea8926c32a97d9f193a69076037b7a704d6d92.zip
cmd/utils, crypto: add --lightkdf flag for lighter KDF
Diffstat (limited to 'crypto/key_store_passphrase.go')
-rw-r--r--crypto/key_store_passphrase.go35
1 files changed, 22 insertions, 13 deletions
diff --git a/crypto/key_store_passphrase.go b/crypto/key_store_passphrase.go
index c7ee00987..94411d2f9 100644
--- a/crypto/key_store_passphrase.go
+++ b/crypto/key_store_passphrase.go
@@ -45,19 +45,29 @@ import (
const (
keyHeaderKDF = "scrypt"
- // 2^18 / 8 / 1 uses 256MB memory and approx 1s CPU time on a modern CPU.
- scryptN = 1 << 18
- scryptr = 8
- scryptp = 1
- scryptdkLen = 32
+
+ // n,r,p = 2^18, 8, 1 uses 256MB memory and approx 1s CPU time on a modern CPU.
+ StandardScryptN = 1 << 18
+ StandardScryptP = 1
+
+ // n,r,p = 2^12, 8, 6 uses 4MB memory and approx 100ms CPU time on a modern CPU.
+ LightScryptN = 1 << 12
+ LightScryptP = 6
+
+ scryptR = 8
+ scryptDKLen = 32
)
type keyStorePassphrase struct {
keysDirPath string
+ scryptN int
+ scryptP int
+ scryptR int
+ scryptDKLen int
}
-func NewKeyStorePassphrase(path string) KeyStore {
- return &keyStorePassphrase{path}
+func NewKeyStorePassphrase(path string, scryptN int, scryptP int) KeyStore {
+ return &keyStorePassphrase{path, scryptN, scryptP, scryptR, scryptDKLen}
}
func (ks keyStorePassphrase) GenerateNewKey(rand io.Reader, auth string) (key *Key, err error) {
@@ -87,11 +97,10 @@ func (ks keyStorePassphrase) GetKeyAddresses() (addresses []common.Address, err
func (ks keyStorePassphrase) StoreKey(key *Key, auth string) (err error) {
authArray := []byte(auth)
salt := randentropy.GetEntropyCSPRNG(32)
- derivedKey, err := scrypt.Key(authArray, salt, scryptN, scryptr, scryptp, scryptdkLen)
+ derivedKey, err := scrypt.Key(authArray, salt, ks.scryptN, ks.scryptR, ks.scryptP, ks.scryptDKLen)
if err != nil {
return err
}
-
encryptKey := derivedKey[:16]
keyBytes := FromECDSA(key.PrivateKey)
@@ -104,10 +113,10 @@ func (ks keyStorePassphrase) StoreKey(key *Key, auth string) (err error) {
mac := Sha3(derivedKey[16:32], cipherText)
scryptParamsJSON := make(map[string]interface{}, 5)
- scryptParamsJSON["n"] = scryptN
- scryptParamsJSON["r"] = scryptr
- scryptParamsJSON["p"] = scryptp
- scryptParamsJSON["dklen"] = scryptdkLen
+ scryptParamsJSON["n"] = ks.scryptN
+ scryptParamsJSON["r"] = ks.scryptR
+ scryptParamsJSON["p"] = ks.scryptP
+ scryptParamsJSON["dklen"] = ks.scryptDKLen
scryptParamsJSON["salt"] = hex.EncodeToString(salt)
cipherParamsJSON := cipherparamsJSON{