OSDN Git Service

new repo
[bytom/vapor.git] / blockchain / pseudohsm / keystore_passphrase_test.go
1 package pseudohsm
2
3 import (
4         "io/ioutil"
5         "os"
6         "testing"
7
8         "github.com/pborman/uuid"
9         "github.com/vapor/crypto/ed25519/chainkd"
10 )
11
12 const (
13         veryLightScryptN = 2
14         veryLightScryptP = 1
15 )
16
17 // Tests that a json key file can be decrypted and encrypted in multiple rounds.
18 func TestKeyEncryptDecrypt(t *testing.T) {
19         keyjson, err := ioutil.ReadFile("testdata/bytom-very-light-scrypt.json")
20         if err != nil {
21                 t.Fatal(err)
22         }
23         password := "bytomtest"
24         alias := "verylight"
25         // Do a few rounds of decryption and encryption
26         for i := 0; i < 3; i++ {
27                 // Try a bad password first
28
29                 if _, err := DecryptKey(keyjson, password+"bad"); err == nil {
30                         t.Errorf("test %d: json key decrypted with bad password", i)
31                 }
32
33                 // Decrypt with the correct password
34                 key, err := DecryptKey(keyjson, password)
35                 if err != nil {
36                         t.Errorf("test %d: json key failed to decrypt: %v", i, err)
37                 }
38                 if key.Alias != alias {
39                         t.Errorf("test %d: key address mismatch: have %x, want %x", i, key.Alias, alias)
40                 }
41
42                 // Recrypt with a new password and start over
43                 //password += "new data appended"
44                 if _, err = EncryptKey(key, password, veryLightScryptN, veryLightScryptP); err != nil {
45                         t.Errorf("test %d: failed to recrypt key %v", i, err)
46                 }
47         }
48 }
49
50 func TestGenerateFile(t *testing.T) {
51         xprv, xpub, err := chainkd.NewXKeys(nil)
52         if err != nil {
53                 t.Fatal(err)
54         }
55         id := uuid.NewRandom()
56         key := &XKey{
57                 ID:      id,
58                 KeyType: "bytom_kd",
59                 XPub:    xpub,
60                 XPrv:    xprv,
61                 Alias:   "verylight",
62         }
63         t.Log(key)
64         password := "bytomtest"
65         xkey, err := EncryptKey(key, password, veryLightScryptN, veryLightScryptP)
66         file := keyFileName(key.ID.String())
67         writeKeyFile(file, xkey)
68         os.Remove(file)
69 }