You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+110-1Lines changed: 110 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,6 +27,115 @@ pip install pymife
27
27
28
28
## Usage
29
29
30
+
### Single input inner product
31
+
32
+
#### DDH based scheme
33
+
34
+
```python
35
+
from mife.single.ddh import FeDDH
36
+
37
+
n =10
38
+
x = [i for i inrange(n)]
39
+
y = [i +10for i inrange(n)]
40
+
key = FeDDH.generate(n)
41
+
c = FeDDH.encrypt(x, key)
42
+
sk = FeDDH.keygen(y, key)
43
+
m = FeDDH.decrypt(c, key, sk, (0, 1000))
44
+
```
45
+
46
+
#### LWE based scheme
47
+
48
+
```python
49
+
from mife.single.lwe import FeLWE
50
+
51
+
n =10
52
+
x = [i -10for i inrange(n)]
53
+
y = [i for i inrange(n)]
54
+
key = FeLWE.generate(n, 4, 4)
55
+
c = FeLWE.encrypt(x, key)
56
+
sk = FeLWE.keygen(y, key)
57
+
m = FeLWE.decrypt(c, key, sk) % key.p
58
+
```
59
+
60
+
#### Damgard based scheme
61
+
62
+
```python
63
+
from mife.single.damgard import FeDamgard
64
+
65
+
n =10
66
+
x = [i for i inrange(n)]
67
+
y = [i +10for i inrange(n)]
68
+
key = FeDamgard.generate(n)
69
+
c = FeDamgard.encrypt(x, key)
70
+
sk = FeDamgard.keygen(y, key)
71
+
m = FeDamgard.decrypt(c, key, sk, (0, 1000))
72
+
```
73
+
74
+
### Multi input inner product
75
+
76
+
#### Damgard based scheme
30
77
31
78
```python
32
-
```
79
+
from mife.multi.damgard import FeDamgardMulti
80
+
81
+
n =3
82
+
m =5
83
+
x = [[i + j for j inrange(m)] for i inrange(n)]
84
+
y = [[i - j +10for j inrange(m)] for i inrange(n)]
85
+
key = FeDamgardMulti.generate(n, m)
86
+
cs = [FeDamgardMulti.encrypt(x[i], key.get_enc_key(i)) for i inrange(n)]
87
+
sk = FeDamgardMulti.keygen(y, key)
88
+
m = FeDamgardMulti.decrypt(cs, key, sk, (0, 2000))
89
+
```
90
+
91
+
Using Curve25519
92
+
93
+
```python
94
+
from mife.multi.damgard import FeDamgardMulti
95
+
from src.mife.data.curve25519 import Curve25519
96
+
97
+
n =25
98
+
m =25
99
+
x = [[i *10+ j for j inrange(m)] for i inrange(n)]
100
+
y = [[i - j -5for j inrange(m)] for i inrange(n)]
101
+
key = FeDamgardMulti.generate(n, m, Curve25519)
102
+
cs = [FeDamgardMulti.encrypt(x[i], key.get_enc_key(i)) for i inrange(n)]
103
+
sk = FeDamgardMulti.keygen(y, key)
104
+
res = FeDamgardMulti.decrypt(cs, key, sk, (-10000000, 10000000))
105
+
```
106
+
107
+
### Multi client inner product
108
+
109
+
#### DDH based scheme
110
+
111
+
```python
112
+
from mife.multiclient.ddh import FeDDHMultiClient
113
+
114
+
n =3
115
+
m =5
116
+
x = [[i + j for j inrange(m)] for i inrange(n)]
117
+
y = [[i - j +10for j inrange(m)] for i inrange(n)]
118
+
tag =b"testingtag123"
119
+
key = FeDDHMultiClient.generate(n, m)
120
+
cs = [FeDDHMultiClient.encrypt(x[i], tag, key.get_enc_key(i)) for i inrange(n)]
121
+
sk = FeDDHMultiClient.keygen(y, key)
122
+
m = FeDDHMultiClient.decrypt(cs, tag, key, sk, (0, 2000))
123
+
```
124
+
125
+
## Customize
126
+
127
+
All of the DDH and Damgard schemes support custom group. You can implement your own group class by extending `/src/mife/data/group.py` as base class.
128
+
129
+
To use custom group, simply pass the group class to the `generate` function.
130
+
131
+
This library has implemented prime order group and curve25519 group.
132
+
133
+
For MCFE-DDH scheme, you can also supply your own hash function by using the same signature as the default hash function found in `/src/mife/multiclient/ddh.py`.
0 commit comments