github.com/n1ghtfa1l/go-vnt@v0.6.4-alpha.6/accounts/keystore/keystore_secure_enclave_test.go (about)

     1  package keystore_test
     2  
     3  import (
     4  	"bytes"
     5  	"crypto/ecdsa"
     6  	"crypto/rand"
     7  	"encoding/hex"
     8  	"encoding/json"
     9  	"fmt"
    10  	"testing"
    11  
    12  	"github.com/vntchain/go-vnt/accounts"
    13  	"github.com/vntchain/go-vnt/accounts/keystore"
    14  	"github.com/vntchain/go-vnt/common"
    15  	"github.com/vntchain/go-vnt/crypto"
    16  )
    17  
    18  const (
    19  	pubkey = "0455000cfef889b4750f4ae53cda20697aa372394c7b3f41be287eade4f5be703a93f646b40c82690f078cf24729df45ec37ad4d57b67caba7be2e7a6c7a1666bd"
    20  	prikey = "c2c3546e88ca9e05dfe454306dbd4c31175e13b9ce46d1420f305a3c767698f6"
    21  )
    22  
    23  func TestGenerateKey(t *testing.T) {
    24  	privateKeyECDSA, err := ecdsa.GenerateKey(crypto.S256(), rand.Reader)
    25  	if err != nil {
    26  		panic(err)
    27  	}
    28  	fmt.Printf("private key %s\n", hex.EncodeToString(crypto.FromECDSA(privateKeyECDSA)))
    29  	fmt.Printf("public key %s\n", hex.EncodeToString(crypto.FromECDSAPub(&privateKeyECDSA.PublicKey)))
    30  	//prikeybytes := crypto.FromECDSA(privateKeyECDSA)
    31  	pubkeybytes := crypto.FromECDSAPub(&privateKeyECDSA.PublicKey)
    32  	res, err := keystore.Encrypt([]byte("111111"), pubkeybytes)
    33  	if err != nil {
    34  		panic(err)
    35  	}
    36  	fmt.Printf("res %s\n", res)
    37  }
    38  
    39  func TestEncryptAndDecrypt(t *testing.T) {
    40  	pub, err := hex.DecodeString(pubkey)
    41  	if err != nil {
    42  		panic(err)
    43  	}
    44  	msg := []byte("111111")
    45  	encRes, err := keystore.Encrypt(msg, pub)
    46  	if err != nil {
    47  		panic(err)
    48  	}
    49  	fmt.Printf("res %s\n", encRes)
    50  
    51  	pri, err := hex.DecodeString(prikey)
    52  	if err != nil {
    53  		panic(err)
    54  	}
    55  	decRes, err := keystore.Decrypt(encRes, pri)
    56  	if err != nil {
    57  		panic(err)
    58  	}
    59  	if !bytes.Equal(decRes, msg) {
    60  		t.Errorf("need msg %s,get msg %s", msg, decRes)
    61  	}
    62  }
    63  
    64  func TestSecureEnclave(t *testing.T) {
    65  	ksjson := `{
    66  		"vnt_keystore":[
    67  			{"address":"45dea0fb0bba44f4fcf290bba71fd57d7117cbb8","crypto":{"cipher":"aes-128-ctr","ciphertext":"b87781948a1befd247bff51ef4063f716cf6c2d3481163e9a8f42e1f9bb74145","cipherparams":{"iv":"dc4926b48a105133d2f16b96833abf1e"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":2,"p":1,"r":8,"salt":"004244bbdc51cadda545b1cfa43cff9ed2ae88e08c61f1479dbb45410722f8f0"},"mac":"39990c1684557447940d4c69e06b1b82b2aceacb43f284df65c956daf3046b85"},"id":"ce541d8d-c79b-40f8-9f8c-20f59616faba","version":3},
    68  			{"address":"7ef5a6135f1fd6a02593eedc869c6d41d934aef8","crypto":{"cipher":"aes-128-ctr","ciphertext":"1d0839166e7a15b9c1333fc865d69858b22df26815ccf601b28219b6192974e1","cipherparams":{"iv":"8df6caa7ff1b00c4e871f002cb7921ed"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":8,"p":16,"r":8,"salt":"e5e6ef3f4ea695f496b643ebd3f75c0aa58ef4070e90c80c5d3fb0241bf1595c"},"mac":"6d16dfde774845e4585357f24bce530528bc69f4f84e1e22880d34fa45c273e5"},"id":"950077c7-71e3-4c44-a4a1-143919141ed4","version":3},
    69  			{"address":"89057fb3c003605b1d7f9e94dfdd191c1265c9ff","crypto":{"cipher":"aes-128-ctr","ciphertext":"896ba766b2c962e7445feb0d68d104b0bfcca6df1548f09ae45bfc22f713d109","cipherparams":{"iv":"d8ccfce66a90c3336e7e762d4a59be4f"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"a5673385c9ebbd84eefc8c0b7216f4d03b204c8c049b9038b6cb98f62991aae0"},"mac":"578a78e35279fa3000bcbd365c6bdce5dd985713036a55990d06fb77250081f0"},"id":"6c644f99-aa3a-43e9-a837-81c96e5ea095","version":3}
    70  		]
    71  	}`
    72  	ks := keystore.NewSecureEnclaveKeyStore([]byte(ksjson))
    73  	wanted := []accounts.Account{
    74  		accounts.Account{
    75  			Address: common.HexToAddress("45dea0fb0bba44f4fcf290bba71fd57d7117cbb8"),
    76  		},
    77  		accounts.Account{
    78  			Address: common.HexToAddress("7ef5a6135f1fd6a02593eedc869c6d41d934aef8"),
    79  		},
    80  		accounts.Account{
    81  			Address: common.HexToAddress("89057fb3c003605b1d7f9e94dfdd191c1265c9ff"),
    82  		},
    83  	}
    84  	wantedJson, _ := json.Marshal(wanted)
    85  	got, _ := json.Marshal(ks.Accounts())
    86  	if string(got) != string(wantedJson) {
    87  		t.Errorf("Expected accounts %s, get: %s", wantedJson, got)
    88  	}
    89  }