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  }