github.com/status-im/status-go@v1.1.0/eth-node/crypto/crypto_test.go (about) 1 package crypto 2 3 import ( 4 "encoding/hex" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestExtractSignatures(t *testing.T) { 11 const content1 = "045a8cae84d8d139e887bb927d2b98cee481afae3770e0ee45f2dc19c6545e45921bc6a55ea92b705e45dfbbe47182c7b1d64a080a220d2781577163923d7cbb4b045a8cae84d8d139e887bb927d2b98cee481afae3770e0ee45f2dc19c6545e45921bc6a55ea92b705e45dfbbe47182c7b1d64a080a220d2781577163923d7cbb4b04ca82dd41fa592bf46ecf7e2eddae61013fc95a565b59c49f37f06b1b591ed3bd24e143495f2d1e241e151ab3572ac108d577be349d4b88d3d5a50c481ab35441" 12 const content2 = "045a8cae84d8d139e887bb927d2b98cee481afae3770e0ee45f2dc19c6545e45921bc6a55ea92b705e45dfbbe47182c7b1d64a080a220d2781577163923d7cbb4b045a8cae84d8d139e887bb927d2b98cee481afae3770e0ee45f2dc19c6545e45921bc6a55ea92b705e45dfbbe47182c7b1d64a080a220d2781577163923d7cbb4b04ca82dd41fa592bf46ecf7e2eddae61013fc95a565b59c49f37f06b1b591ed3bd24e143495f2d1e241e151ab3572ac108d577be349d4b88d3d5a50c481ab35440" 13 14 key1, err := GenerateKey() 15 require.NoError(t, err) 16 17 key2, err := GenerateKey() 18 require.NoError(t, err) 19 20 signature1, err := SignStringAsHex(content1, key1) 21 require.NoError(t, err) 22 23 signature2, err := SignStringAsHex(content2, key2) 24 require.NoError(t, err) 25 26 key1String := hex.EncodeToString(FromECDSAPub(&key1.PublicKey)) 27 key2String := hex.EncodeToString(FromECDSAPub(&key2.PublicKey)) 28 29 pair1 := [2]string{content1, signature1} 30 pair2 := [2]string{content2, signature2} 31 32 signaturePairs := [][2]string{pair1, pair2} 33 34 extractedSignatures, err := ExtractSignatures(signaturePairs) 35 require.NoError(t, err) 36 require.Equal(t, []string{key1String, key2String}, extractedSignatures) 37 38 // Test wrong content 39 pair3 := [2]string{content1, signature2} 40 41 signaturePairs = [][2]string{pair1, pair2, pair3} 42 43 extractedSignatures, err = ExtractSignatures(signaturePairs) 44 require.NoError(t, err) 45 // The public key is neither the one which generated the content, nor the one generated the signature 46 require.NotEqual(t, []string{key1String, key2String, key1String}, extractedSignatures) 47 require.NotEqual(t, []string{key1String, key2String, key2String}, extractedSignatures) 48 } 49 50 func TestVerifySignature(t *testing.T) { 51 const content1 = "045a8cae84d8d139e887bb927d2b98cee481afae3770e0ee45f2dc19c6545e45921bc6a55ea92b705e45dfbbe47182c7b1d64a080a220d2781577163923d7cbb4b045a8cae84d8d139e887bb927d2b98cee481afae3770e0ee45f2dc19c6545e45921bc6a55ea92b705e45dfbbe47182c7b1d64a080a220d2781577163923d7cbb4b04ca82dd41fa592bf46ecf7e2eddae61013fc95a565b59c49f37f06b1b591ed3bd24e143495f2d1e241e151ab3572ac108d577be349d4b88d3d5a50c481ab35441" 52 const content2 = "045a8cae84d8d139e887bb927d2b98cee481afae3770e0ee45f2dc19c6545e45921bc6a55ea92b705e45dfbbe47182c7b1d64a080a220d2781577163923d7cbb4b045a8cae84d8d139e887bb927d2b98cee481afae3770e0ee45f2dc19c6545e45921bc6a55ea92b705e45dfbbe47182c7b1d64a080a220d2781577163923d7cbb4b04ca82dd41fa592bf46ecf7e2eddae61013fc95a565b59c49f37f06b1b591ed3bd24e143495f2d1e241e151ab3572ac108d577be349d4b88d3d5a50c481ab35440" 53 54 key1, err := GenerateKey() 55 require.NoError(t, err) 56 57 key2, err := GenerateKey() 58 require.NoError(t, err) 59 60 signature1, err := SignStringAsHex(content1, key1) 61 require.NoError(t, err) 62 63 signature2, err := SignStringAsHex(content2, key2) 64 require.NoError(t, err) 65 66 key1String := hex.EncodeToString(FromECDSAPub(&key1.PublicKey)) 67 key2String := hex.EncodeToString(FromECDSAPub(&key2.PublicKey)) 68 69 pair1 := [3]string{content1, signature1, key1String} 70 pair2 := [3]string{content2, signature2, key2String} 71 72 signaturePairs := [][3]string{pair1, pair2} 73 74 err = VerifySignatures(signaturePairs) 75 require.NoError(t, err) 76 77 // Test wrong content 78 pair3 := [3]string{content1, signature2, key2String} 79 80 signaturePairs = [][3]string{pair1, pair2, pair3} 81 82 err = VerifySignatures(signaturePairs) 83 require.Error(t, err) 84 85 // Test wrong signature 86 pair3 = [3]string{content1, signature2, key1String} 87 88 signaturePairs = [][3]string{pair1, pair2, pair3} 89 90 err = VerifySignatures(signaturePairs) 91 require.Error(t, err) 92 93 // Test wrong pubkey 94 pair3 = [3]string{content1, signature1, key2String} 95 96 signaturePairs = [][3]string{pair1, pair2, pair3} 97 98 err = VerifySignatures(signaturePairs) 99 require.Error(t, err) 100 } 101 102 func TestSymmetricEncryption(t *testing.T) { 103 const rawKey = "0000000000000000000000000000000000000000000000000000000000000000" 104 expectedPlaintext := []byte("test") 105 key, err := hex.DecodeString(rawKey) 106 require.Nil(t, err, "Key should be generated without errors") 107 108 cyphertext1, err := EncryptSymmetric(key, expectedPlaintext) 109 require.Nil(t, err, "Cyphertext should be generated without errors") 110 111 cyphertext2, err := EncryptSymmetric(key, expectedPlaintext) 112 require.Nil(t, err, "Cyphertext should be generated without errors") 113 114 require.Equalf( 115 t, 116 32, 117 len(cyphertext1), 118 "Cyphertext with the correct length should be generated") 119 120 require.NotEqualf( 121 t, 122 cyphertext1, 123 cyphertext2, 124 "Same plaintext should not be encrypted in the same way") 125 126 plaintext, err := DecryptSymmetric(key, cyphertext1) 127 require.Nil(t, err, "Cyphertext should be decrypted without errors") 128 129 require.Equalf( 130 t, 131 expectedPlaintext, 132 plaintext, 133 "Cypther text should be decrypted successfully") 134 }