uint8_t readB(){ switch (type){ case A_BYTE: return evalB(); case A_UINT: return evalU(); case A_INT: return evalI(); case A_LONG: return evalL(); case A_FLOAT: return evalF(); case A_DOUBLE: return evalD(); case A_TIME: return evalT(); default: return 0; } return 0; }
uint32_t readT(){ switch (type){ case A_BYTE: return evalB(); case A_UINT: return evalU(); case A_INT: return evalI(); case A_LONG: return evalL(); case A_FLOAT: return evalF(); case A_DOUBLE: return evalD(); case A_TIME: return evalT(); case A_STRING: return 0; case BAD_TYPE: return 0; } return 0; }
void Sw05::encrypt(CharmList & pk, CharmListStr & wPrime, GT & M, int n, CharmList & CT) { G1 g; G1 g1; G2 g2; CharmListG2 t; ZR s; GT Eprime = group.init(GT_t); G1 Eprimeprime; int wPrimeLen = 0; ZR loopVar; string loopVarStr; G2 evalTVar; CharmListG2 E; g = pk[0].getG1(); g1 = pk[1].getG1(); g2 = pk[2].getG2(); t = pk[3].getListG2(); s = group.random(ZR_t); Eprime = group.mul(M, group.exp(group.pair(g1, g2), s)); Eprimeprime = group.exp(g, s); wPrimeLen = wPrime.length(); for (int i = 0; i < wPrimeLen; i++) { loopVar = group.hashListToZR(wPrime[i]); loopVarStr = wPrime[i]; evalTVar = evalT(pk, n, loopVar); E[loopVarStr] = group.exp(evalTVar, s); } CT.insert(0, wPrime); CT.insert(1, Eprime); CT.insert(2, Eprimeprime); CT.insert(3, E); return; }
void Sw05::extract(ZR & mk, CharmListStr & w, CharmList & pk, int dParam, int n, CharmListZR & blindingFactorDBlinded, ZR & bf0, CharmList & skBlinded) { CharmListStr wBlinded; G1 g; G1 g1; G2 g2; CharmListG2 t; int lenw = 0; string loopVar1; CharmListZR wHash; ZR r; CharmListZR q; CharmListZR shares; int wHashLen = 0; ZR loopVar2; string loopVar2Str; G2 evalTVar; CharmListG2 D; CharmListG1 d; CharmListG1 dBlinded; CharmListG2 DBlinded; bf0 = group.random(ZR_t); wBlinded = w; g = pk[0].getG1(); g1 = pk[1].getG1(); g2 = pk[2].getG2(); t = pk[3].getListG2(); lenw = wBlinded.length(); for (int i = 0; i < lenw; i++) { loopVar1 = wBlinded[i]; wHash[i] = group.hashListToZR(loopVar1); } r = group.random(ZR_t); q[0] = mk; for (int i = 1; i < dParam; i++) { q.insert(i, group.random(ZR_t)); } shares = util.genSharesForX(group, mk, q, wHash); wHashLen = wHash.length(); for (int i = 0; i < wHashLen; i++) { loopVar2 = wHash[i]; loopVar2Str = wBlinded[i]; evalTVar = evalT(pk, n, loopVar2); D[loopVar2Str] = group.mul(group.exp(g2, shares[i]), group.exp(evalTVar, r)); d[loopVar2Str] = group.exp(g, r); } CharmListStr d_keys = d.strkeys(); int d_len = d_keys.length(); for (int y_var = 0; y_var < d_len; y_var++) { string y = d_keys[y_var]; dBlinded[y] = group.exp(d[y], group.div(1, bf0)); } CharmListStr D_keys = D.strkeys(); int D_len = D_keys.length(); for (int y_var = 0; y_var < D_len; y_var++) { string y = D_keys[y_var]; blindingFactorDBlinded.insert(y, group.random(ZR_t)); DBlinded[y] = group.exp(D[y], group.div(1, blindingFactorDBlinded[y])); } skBlinded.insert(0, wBlinded); skBlinded.insert(1, DBlinded); skBlinded.insert(2, dBlinded); return; }