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  }