Skip to content

Commit 1bb1077

Browse files
committed
Update README.md
1 parent 0af06c1 commit 1bb1077

1 file changed

Lines changed: 110 additions & 1 deletion

File tree

README.md

Lines changed: 110 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,115 @@ pip install pymife
2727

2828
## Usage
2929

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 in range(n)]
39+
y = [i + 10 for i in range(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 - 10 for i in range(n)]
53+
y = [i for i in range(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 in range(n)]
67+
y = [i + 10 for i in range(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
3077

3178
```python
32-
```
79+
from mife.multi.damgard import FeDamgardMulti
80+
81+
n = 3
82+
m = 5
83+
x = [[i + j for j in range(m)] for i in range(n)]
84+
y = [[i - j + 10 for j in range(m)] for i in range(n)]
85+
key = FeDamgardMulti.generate(n, m)
86+
cs = [FeDamgardMulti.encrypt(x[i], key.get_enc_key(i)) for i in range(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 in range(m)] for i in range(n)]
100+
y = [[i - j - 5 for j in range(m)] for i in range(n)]
101+
key = FeDamgardMulti.generate(n, m, Curve25519)
102+
cs = [FeDamgardMulti.encrypt(x[i], key.get_enc_key(i)) for i in range(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 in range(m)] for i in range(n)]
117+
y = [[i - j + 10 for j in range(m)] for i in range(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 in range(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`.
134+
135+
## References
136+
137+
- https://eprint.iacr.org/2015/017.pdf
138+
- https://eprint.iacr.org/2015/608.pdf
139+
- https://eprint.iacr.org/2017/972.pdf
140+
- https://eprint.iacr.org/2017/989.pdf
141+
- https://github.com/fentec-project/CiFEr/blob/master/src/innerprod/simple/lwe.c

0 commit comments

Comments
 (0)