Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
jvdsn
GitHub Repository: jvdsn/crypto-attacks
Path: blob/master/test/test_lwe.py
2587 views
1
import os
2
import sys
3
from random import choice
4
from random import choices
5
from random import randrange
6
from unittest import TestCase
7
8
path = os.path.dirname(os.path.dirname(os.path.realpath(os.path.abspath(__file__))))
9
if sys.path[1] != path:
10
sys.path.insert(1, path)
11
12
from attacks.lwe import arora_ge
13
14
15
class TestLWE(TestCase):
16
def _generate_samples(self, q, m, n, E, s):
17
A = []
18
b = []
19
for i in range(m):
20
e = choice(E)
21
A.append([randrange(0, q) for _ in range(n)])
22
b.append(e)
23
for j in range(n):
24
b[i] = (b[i] + A[i][j] * s[j]) % q
25
return A, b
26
27
def test_arora_ge(self):
28
q = 65537
29
m = 200
30
n = 10
31
E = list(range(-1, 2))
32
S = list(range(q))
33
s = choices(S, k=n)
34
A, b = self._generate_samples(q, m, n, E, s)
35
s_ = arora_ge.attack(q, A, b, E)
36
for i in range(n):
37
self.assertIsInstance(s_[i], int)
38
self.assertEqual(s[i], s_[i])
39
40
m = 10
41
n = 10
42
E = list(range(-1, 2))
43
S = list(range(2))
44
s = choices(S, k=n)
45
A, b = self._generate_samples(q, m, n, E, s)
46
s_ = arora_ge.attack(q, A, b, E, S)
47
for i in range(n):
48
self.assertIsInstance(s_[i], int)
49
self.assertEqual(s[i], s_[i])
50
51
m = 150
52
n = 10
53
E = list(range(-2, 3))
54
S = list(range(2))
55
s = choices(S, k=n)
56
A, b = self._generate_samples(q, m, n, E, s)
57
s_ = arora_ge.attack(q, A, b, E, S)
58
for i in range(n):
59
self.assertIsInstance(s_[i], int)
60
self.assertEqual(s[i], s_[i])
61
62