-
Notifications
You must be signed in to change notification settings - Fork 1
/
paillier_test.go
131 lines (105 loc) · 3.41 KB
/
paillier_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package paillier
import (
"math/big"
"testing"
)
func TestNewKeys(t *testing.T) {
if _, err := NewKeys(64); err != nil {
t.Fatalf("expected nil, got %s", err)
} else if _, err = NewKeys(8); err == nil {
t.Fatal("expected error, got nil")
}
}
func TestEncryptDecrypt(t *testing.T) {
var key, _ = NewKeys(64)
var inputA = new(big.Int).SetInt64(12)
var err error
var encryptedA *big.Int
if encryptedA, err = key.PubKey.Encrypt(inputA); err != nil {
t.Fatalf("expected nil, got %s", err)
}
var decryptedA *big.Int
if decryptedA, err = key.Decrypt(encryptedA); err != nil {
t.Fatalf("expected nil, got %s", err)
}
if inputA.Cmp(decryptedA) != 0 {
t.Fatalf("expected %d, got %d", inputA, decryptedA)
}
key, err = NewKeys(1024)
if err != nil {
t.Fatalf("expected nil, got %s", err)
}
inputA = new(big.Int).SetInt64(324234987)
if encryptedA, err = key.PubKey.Encrypt(inputA); err != nil {
t.Fatalf("expected nil, got %s", err)
}
if decryptedA, err = key.Decrypt(encryptedA); err != nil {
t.Fatalf("expected nil, got %s", err)
}
if inputA.Cmp(decryptedA) != 0 {
t.Fatalf("expected %d, got %d", inputA, decryptedA)
}
inputA = key.PubKey.N
if _, err = key.PubKey.Encrypt(inputA); err == nil {
t.Fatal("expected error, got nil")
}
inputA = new(big.Int).Sub(key.PubKey.N, bOne)
if _, err = key.PubKey.Encrypt(inputA); err != nil {
t.Fatalf("expected nil, got %s", err)
}
}
func TestAddEncrypt(t *testing.T) {
var key, _ = NewKeys(64)
var inputA = new(big.Int).SetInt64(12)
var inputB = new(big.Int).SetInt64(3)
var expectedRes1 = new(big.Int).SetInt64(15)
var expectedRes2 = new(big.Int).SetInt64(18)
var encryptedA, _ = key.PubKey.Encrypt(inputA)
var encryptedB, _ = key.PubKey.Encrypt(inputB)
var encryptedSum = key.PubKey.AddEncrypted(encryptedA, encryptedB)
var result, _ = key.Decrypt(encryptedSum)
if result.Cmp(expectedRes1) != 0 {
t.Fatalf("expected %d, got %d", expectedRes1, result)
}
encryptedSum = key.PubKey.AddEncrypted(encryptedSum, encryptedB)
result, _ = key.Decrypt(encryptedSum)
if result.Cmp(expectedRes2) != 0 {
t.Fatalf("expected %d, got %d", expectedRes2, result)
}
}
func TestAdd(t *testing.T) {
var key, _ = NewKeys(64)
var inputA = new(big.Int).SetInt64(12)
var inputB = new(big.Int).SetInt64(3)
var expectedRes1 = new(big.Int).SetInt64(15)
var expectedRes2 = new(big.Int).SetInt64(18)
var encryptedA, _ = key.PubKey.Encrypt(inputA)
var encryptedSum = key.PubKey.Add(encryptedA, inputB)
var result, _ = key.Decrypt(encryptedSum)
if result.Cmp(expectedRes1) != 0 {
t.Fatalf("expected %d, got %d", expectedRes1, result)
}
encryptedSum = key.PubKey.Add(encryptedSum, inputB)
result, _ = key.Decrypt(encryptedSum)
if result.Cmp(expectedRes2) != 0 {
t.Fatalf("expected %d, got %d", expectedRes2, result)
}
}
func TestMul(t *testing.T) {
var key, _ = NewKeys(64)
var inputA = new(big.Int).SetInt64(12)
var inputB = new(big.Int).SetInt64(3)
var expectedRes1 = new(big.Int).SetInt64(36)
var expectedRes2 = new(big.Int).SetInt64(108)
var encryptedA, _ = key.PubKey.Encrypt(inputA)
var encryptedSum = key.PubKey.Mul(encryptedA, inputB)
var result, _ = key.Decrypt(encryptedSum)
if result.Cmp(expectedRes1) != 0 {
t.Fatalf("expected %d, got %d", expectedRes1, result)
}
encryptedSum = key.PubKey.Mul(encryptedSum, inputB)
result, _ = key.Decrypt(encryptedSum)
if result.Cmp(expectedRes2) != 0 {
t.Fatalf("expected %d, got %d", expectedRes2, result)
}
}