github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/accounts/keystore/keystore_passphrase_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 12:09:26</date> 10 //</624342585321721856> 11 12 13 package keystore 14 15 import ( 16 "io/ioutil" 17 "testing" 18 19 "github.com/ethereum/go-ethereum/common" 20 ) 21 22 const ( 23 veryLightScryptN = 2 24 veryLightScryptP = 1 25 ) 26 27 //测试JSON密钥文件是否可以在多轮中解密和加密。 28 func TestKeyEncryptDecrypt(t *testing.T) { 29 keyjson, err := ioutil.ReadFile("testdata/very-light-scrypt.json") 30 if err != nil { 31 t.Fatal(err) 32 } 33 password := "" 34 address := common.HexToAddress("45dea0fb0bba44f4fcf290bba71fd57d7117cbb8") 35 36 //做几轮解密和加密 37 for i := 0; i < 3; i++ { 38 //先尝试一个错误的密码 39 if _, err := DecryptKey(keyjson, password+"bad"); err == nil { 40 t.Errorf("test %d: json key decrypted with bad password", i) 41 } 42 //用正确的密码解密 43 key, err := DecryptKey(keyjson, password) 44 if err != nil { 45 t.Fatalf("test %d: json key failed to decrypt: %v", i, err) 46 } 47 if key.Address != address { 48 t.Errorf("test %d: key address mismatch: have %x, want %x", i, key.Address, address) 49 } 50 //用新密码重新加密并重新开始 51 password += "new data appended" 52 if keyjson, err = EncryptKey(key, password, veryLightScryptN, veryLightScryptP); err != nil { 53 t.Errorf("test %d: failed to recrypt key %v", i, err) 54 } 55 } 56 } 57