Commit 36a1d016930f889754651e014346a435189cce69
- Diff rendering mode:
- inline
- side by side
KSW.py
(8 / 20)
|   | |||
| 61 | 61 | def __init__(self, security) -> "(PK, SK)": | |
| 62 | 62 | self.security = security | |
| 63 | 63 | # select p, q, r | |
| 64 | p = get_random_prime(200) | ||
| 65 | q = get_random_prime(200) | ||
| 66 | r = get_random_prime(200) | ||
| 64 | p = get_random_prime(100) | ||
| 65 | q = get_random_prime(100) | ||
| 66 | r = get_random_prime(100) | ||
| 67 | 67 | # make n | |
| 68 | 68 | self.n = p*q*r | |
| 69 | 69 | # build the params | |
| … | … | ||
| 71 | 71 | # build the pairing | |
| 72 | 72 | self.pairing = Pairing(params) | |
| 73 | 73 | # find the generators for the G_p, G_q, and G_r subgroups | |
| 74 | g_G = Element.random(self.pairing, G1)**self.n | ||
| 75 | 74 | g_G_p = Element.random(self.pairing, G1)**(q*r) | |
| 76 | 75 | g_G_r = Element.random(self.pairing, G1)**(p*q) | |
| 77 | 76 | g_G_q = Element.random(self.pairing, G1)**(p*r) | |
| 78 | 77 | # choose R0 | |
| 79 | 78 | R0 = g_G_r ** Element.random(self.pairing, Zr) | |
| 80 | 79 | # choose the random R's | |
| 81 | Rs = [] | ||
| 82 | for i in range(security): | ||
| 83 | ri1 = g_G_r**Element.random(self.pairing, Zr) | ||
| 84 | ri2 = g_G_r**Element.random(self.pairing, Zr) | ||
| 85 | Rs.append((ri1, ri2)) | ||
| 80 | Rs = [(g_G_r**Element.random(self.pairing, Zr), g_G_r**Element.random(self.pairing, Zr)) for i in range(security)] | ||
| 81 | hs = [(g_G_p**Element.random(self.pairing, Zr), g_G_p**Element.random(self.pairing, Zr)) for i in range(security)] | ||
| 86 | 82 | # choose the random H's | |
| 87 | 83 | Hs = [] | |
| 88 | 84 | for i in range(security): | |
| 89 | hi1 = g_G_p**Element.random(self.pairing, Zr) | ||
| 90 | hi2 = g_G_p**Element.random(self.pairing, Zr) | ||
| 91 | Hs.append((hi1, hi2)) | ||
| 85 | Hs.append((hs[i][0] * Rs[i][0], hs[i][1] * Rs[i][1])) | ||
| 92 | 86 | # calculate Q | |
| 93 | 87 | Q = g_G_q * R0 | |
| 94 | # build the vector | ||
| 95 | vector = [] | ||
| 96 | for pos, h in enumerate(Hs): | ||
| 97 | Ri = Rs[pos] | ||
| 98 | vi = (Ri[0]*h[0], Ri[1]*h[0]) | ||
| 99 | vector.append(vi) | ||
| 100 | 88 | # build the public and master secret keys | |
| 101 | self.pk = PublicKey(g_G_p, g_G_r, Q, vector) | ||
| 102 | self.sk = MasterSecretKey(p, q, r, g_G_q, Hs) | ||
| 89 | self.pk = PublicKey(g_G_p, g_G_r, Q, Hs) | ||
| 90 | self.sk = MasterSecretKey(p, q, r, g_G_q, hs) | ||
| 103 | 91 | ||
| 104 | 92 | ||
| 105 | 93 | def keygen(self, v: "description of a predicate") -> "SK_f": |

