package paillier
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"math/big"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestEncryptDecrypt(t *testing.T) {
|
|
key, err := GenerateKeyPair()
|
|
assert.Nil(t, err)
|
|
|
|
mBytes := []byte("Hi")
|
|
m := new(big.Int).SetBytes(mBytes)
|
|
c := Encrypt(m, key.PubK)
|
|
d := Decrypt(c, key.PubK, key.PrivK)
|
|
if m == d {
|
|
fmt.Println(key)
|
|
t.Errorf("m not equal to decrypted")
|
|
}
|
|
}
|
|
|
|
func TestHomomorphicAddition(t *testing.T) {
|
|
// key, err := GenerateKeyPair()
|
|
// assert.Nil(t, err)
|
|
|
|
// key harcoded for tests
|
|
pubK := PublicKey{
|
|
N: big.NewInt(204223),
|
|
G: big.NewInt(24929195694),
|
|
}
|
|
privK := PrivateKey{
|
|
Lambda: big.NewInt(101660),
|
|
Mu: big.NewInt(117648),
|
|
}
|
|
key := Key{
|
|
PubK: pubK,
|
|
PrivK: privK,
|
|
}
|
|
|
|
n1 := big.NewInt(int64(110))
|
|
n2 := big.NewInt(int64(150))
|
|
c1 := Encrypt(n1, key.PubK)
|
|
c2 := Encrypt(n2, key.PubK)
|
|
c3c4 := HomomorphicAddition(c1, c2, key.PubK)
|
|
d := Decrypt(c3c4, key.PubK, key.PrivK)
|
|
if !bytes.Equal(new(big.Int).Add(n1, n2).Bytes(), d.Bytes()) {
|
|
fmt.Println(key)
|
|
t.Errorf("decrypted result not equal to original result")
|
|
}
|
|
}
|