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 }