github.com/lingyao2333/mo-zero@v1.4.1/core/codec/dh_test.go (about) 1 package codec 2 3 import ( 4 "math/big" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 ) 9 10 func TestDiffieHellman(t *testing.T) { 11 key1, err := GenerateKey() 12 assert.Nil(t, err) 13 key2, err := GenerateKey() 14 assert.Nil(t, err) 15 16 pubKey1, err := ComputeKey(key1.PubKey, key2.PriKey) 17 assert.Nil(t, err) 18 pubKey2, err := ComputeKey(key2.PubKey, key1.PriKey) 19 assert.Nil(t, err) 20 21 assert.Equal(t, pubKey1, pubKey2) 22 } 23 24 func TestDiffieHellman1024(t *testing.T) { 25 old := p 26 p, _ = new(big.Int).SetString("F488FD584E49DBCD20B49DE49107366B336C380D451D0F7C88B31C7C5B2D8EF6F3C923C043F0A55B188D8EBB558CB85D38D334FD7C175743A31D186CDE33212CB52AFF3CE1B1294018118D7C84A70A72D686C40319C807297ACA950CD9969FABD00A509B0246D3083D66A45D419F9C7CBD894B221926BAABA25EC355E92F78C7", 16) 27 defer func() { 28 p = old 29 }() 30 31 key1, err := GenerateKey() 32 assert.Nil(t, err) 33 key2, err := GenerateKey() 34 assert.Nil(t, err) 35 36 pubKey1, err := ComputeKey(key1.PubKey, key2.PriKey) 37 assert.Nil(t, err) 38 pubKey2, err := ComputeKey(key2.PubKey, key1.PriKey) 39 assert.Nil(t, err) 40 41 assert.Equal(t, pubKey1, pubKey2) 42 } 43 44 func TestDiffieHellmanMiddleManAttack(t *testing.T) { 45 key1, err := GenerateKey() 46 assert.Nil(t, err) 47 keyMiddle, err := GenerateKey() 48 assert.Nil(t, err) 49 key2, err := GenerateKey() 50 assert.Nil(t, err) 51 52 const aesByteLen = 32 53 pubKey1, err := ComputeKey(keyMiddle.PubKey, key1.PriKey) 54 assert.Nil(t, err) 55 src := []byte(`hello, world!`) 56 encryptedSrc, err := EcbEncrypt(pubKey1.Bytes()[:aesByteLen], src) 57 assert.Nil(t, err) 58 pubKeyMiddle, err := ComputeKey(key1.PubKey, keyMiddle.PriKey) 59 assert.Nil(t, err) 60 decryptedSrc, err := EcbDecrypt(pubKeyMiddle.Bytes()[:aesByteLen], encryptedSrc) 61 assert.Nil(t, err) 62 assert.Equal(t, string(src), string(decryptedSrc)) 63 64 pubKeyMiddle, err = ComputeKey(key2.PubKey, keyMiddle.PriKey) 65 assert.Nil(t, err) 66 encryptedSrc, err = EcbEncrypt(pubKeyMiddle.Bytes()[:aesByteLen], decryptedSrc) 67 assert.Nil(t, err) 68 pubKey2, err := ComputeKey(keyMiddle.PubKey, key2.PriKey) 69 assert.Nil(t, err) 70 decryptedSrc, err = EcbDecrypt(pubKey2.Bytes()[:aesByteLen], encryptedSrc) 71 assert.Nil(t, err) 72 assert.Equal(t, string(src), string(decryptedSrc)) 73 } 74 75 func TestKeyBytes(t *testing.T) { 76 var empty DhKey 77 assert.Equal(t, 0, len(empty.Bytes())) 78 79 key, err := GenerateKey() 80 assert.Nil(t, err) 81 assert.True(t, len(key.Bytes()) > 0) 82 }