package dh
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"math/big"
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
bits = 2048
|
|
)
|
|
|
|
func TestDiffieHellman(t *testing.T) {
|
|
p, err := rand.Prime(rand.Reader, bits/2)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
g, err := rand.Prime(rand.Reader, bits/2)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
|
|
max, err := rand.Prime(rand.Reader, bits/2)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
a, err := rand.Int(rand.Reader, max)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
b, err := rand.Int(rand.Reader, max)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
|
|
A := new(big.Int).Exp(g, a, p)
|
|
B := new(big.Int).Exp(g, b, p)
|
|
|
|
sA := new(big.Int).Exp(B, a, p)
|
|
sB := new(big.Int).Exp(A, b, p)
|
|
|
|
if sA.Int64() != sB.Int64() {
|
|
t.Errorf("secret not equal")
|
|
}
|
|
}
|