github.com/arieschain/arieschain@v0.0.0-20191023063405-37c074544356/signer/storage/aes_gcm_storage_test.go (about) 1 // 2 package storage 3 4 import ( 5 "bytes" 6 "fmt" 7 "io/ioutil" 8 "testing" 9 10 "github.com/quickchainproject/quickchain/common" 11 "github.com/quickchainproject/quickchain/log" 12 "github.com/mattn/go-colorable" 13 ) 14 15 func TestEncryption(t *testing.T) { 16 // key := []byte("AES256Key-32Characters1234567890") 17 // plaintext := []byte(value) 18 key := []byte("AES256Key-32Characters1234567890") 19 plaintext := []byte("exampleplaintext") 20 21 c, iv, err := encrypt(key, plaintext) 22 if err != nil { 23 t.Fatal(err) 24 } 25 fmt.Printf("Ciphertext %x, nonce %x\n", c, iv) 26 27 p, err := decrypt(key, iv, c) 28 if err != nil { 29 t.Fatal(err) 30 } 31 fmt.Printf("Plaintext %v\n", string(p)) 32 if !bytes.Equal(plaintext, p) { 33 t.Errorf("Failed: expected plaintext recovery, got %v expected %v", string(plaintext), string(p)) 34 } 35 } 36 37 func TestFileStorage(t *testing.T) { 38 39 a := map[string]storedCredential{ 40 "secret": { 41 Iv: common.Hex2Bytes("cdb30036279601aeee60f16b"), 42 CipherText: common.Hex2Bytes("f311ac49859d7260c2c464c28ffac122daf6be801d3cfd3edcbde7e00c9ff74f"), 43 }, 44 "secret2": { 45 Iv: common.Hex2Bytes("afb8a7579bf971db9f8ceeed"), 46 CipherText: common.Hex2Bytes("2df87baf86b5073ef1f03e3cc738de75b511400f5465bb0ddeacf47ae4dc267d"), 47 }, 48 } 49 d, err := ioutil.TempDir("", "eth-encrypted-storage-test") 50 if err != nil { 51 t.Fatal(err) 52 } 53 stored := &AESEncryptedStorage{ 54 filename: fmt.Sprintf("%v/vault.json", d), 55 key: []byte("AES256Key-32Characters1234567890"), 56 } 57 stored.writeEncryptedStorage(a) 58 read := &AESEncryptedStorage{ 59 filename: fmt.Sprintf("%v/vault.json", d), 60 key: []byte("AES256Key-32Characters1234567890"), 61 } 62 creds, err := read.readEncryptedStorage() 63 if err != nil { 64 t.Fatal(err) 65 } 66 for k, v := range a { 67 if v2, exist := creds[k]; !exist { 68 t.Errorf("Missing entry %v", k) 69 } else { 70 if !bytes.Equal(v.CipherText, v2.CipherText) { 71 t.Errorf("Wrong ciphertext, expected %x got %x", v.CipherText, v2.CipherText) 72 } 73 if !bytes.Equal(v.Iv, v2.Iv) { 74 t.Errorf("Wrong iv") 75 } 76 } 77 } 78 } 79 func TestEnd2End(t *testing.T) { 80 log.Root().SetHandler(log.LvlFilterHandler(log.Lvl(3), log.StreamHandler(colorable.NewColorableStderr(), log.TerminalFormat(true)))) 81 82 d, err := ioutil.TempDir("", "eth-encrypted-storage-test") 83 if err != nil { 84 t.Fatal(err) 85 } 86 87 s1 := &AESEncryptedStorage{ 88 filename: fmt.Sprintf("%v/vault.json", d), 89 key: []byte("AES256Key-32Characters1234567890"), 90 } 91 s2 := &AESEncryptedStorage{ 92 filename: fmt.Sprintf("%v/vault.json", d), 93 key: []byte("AES256Key-32Characters1234567890"), 94 } 95 96 s1.Put("bazonk", "foobar") 97 if v := s2.Get("bazonk"); v != "foobar" { 98 t.Errorf("Expected bazonk->foobar, got '%v'", v) 99 } 100 }