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