@@ -45,19 +45,29 @@ import (
45
45
46
46
const (
47
47
keyHeaderKDF = "scrypt"
48
- // 2^18 / 8 / 1 uses 256MB memory and approx 1s CPU time on a modern CPU.
49
- scryptN = 1 << 18
50
- scryptr = 8
51
- scryptp = 1
52
- scryptdkLen = 32
48
+
49
+ // n,r,p = 2^18, 8, 1 uses 256MB memory and approx 1s CPU time on a modern CPU.
50
+ StandardScryptN = 1 << 18
51
+ StandardScryptP = 1
52
+
53
+ // n,r,p = 2^12, 8, 6 uses 4MB memory and approx 100ms CPU time on a modern CPU.
54
+ LightScryptN = 1 << 12
55
+ LightScryptP = 6
56
+
57
+ scryptR = 8
58
+ scryptDKLen = 32
53
59
)
54
60
55
61
type keyStorePassphrase struct {
56
62
keysDirPath string
63
+ scryptN int
64
+ scryptP int
65
+ scryptR int
66
+ scryptDKLen int
57
67
}
58
68
59
- func NewKeyStorePassphrase (path string ) KeyStore {
60
- return & keyStorePassphrase {path }
69
+ func NewKeyStorePassphrase (path string , scryptN int , scryptP int ) KeyStore {
70
+ return & keyStorePassphrase {path , scryptN , scryptP , scryptR , scryptDKLen }
61
71
}
62
72
63
73
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
87
97
func (ks keyStorePassphrase ) StoreKey (key * Key , auth string ) (err error ) {
88
98
authArray := []byte (auth )
89
99
salt := randentropy .GetEntropyCSPRNG (32 )
90
- derivedKey , err := scrypt .Key (authArray , salt , scryptN , scryptr , scryptp , scryptdkLen )
100
+ derivedKey , err := scrypt .Key (authArray , salt , ks . scryptN , ks . scryptR , ks . scryptP , ks . scryptDKLen )
91
101
if err != nil {
92
102
return err
93
103
}
94
-
95
104
encryptKey := derivedKey [:16 ]
96
105
keyBytes := FromECDSA (key .PrivateKey )
97
106
@@ -104,10 +113,10 @@ func (ks keyStorePassphrase) StoreKey(key *Key, auth string) (err error) {
104
113
mac := Sha3 (derivedKey [16 :32 ], cipherText )
105
114
106
115
scryptParamsJSON := make (map [string ]interface {}, 5 )
107
- scryptParamsJSON ["n" ] = scryptN
108
- scryptParamsJSON ["r" ] = scryptr
109
- scryptParamsJSON ["p" ] = scryptp
110
- scryptParamsJSON ["dklen" ] = scryptdkLen
116
+ scryptParamsJSON ["n" ] = ks . scryptN
117
+ scryptParamsJSON ["r" ] = ks . scryptR
118
+ scryptParamsJSON ["p" ] = ks . scryptP
119
+ scryptParamsJSON ["dklen" ] = ks . scryptDKLen
111
120
scryptParamsJSON ["salt" ] = hex .EncodeToString (salt )
112
121
113
122
cipherParamsJSON := cipherparamsJSON {
0 commit comments