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