Skip to content

Commit 34ccce5

Browse files
authored
Update utils.c
1 parent fa27176 commit 34ccce5

File tree

1 file changed

+81
-1
lines changed

1 file changed

+81
-1
lines changed

utils.c

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,72 @@ block EVAL(AES_KEY *key, unsigned char* k, int x){
220220
return res;
221221
}
222222

223+
block* EVALFULL(AES_KEY *key, unsigned char* k){
224+
int n = k[0];
225+
int maxlayer = n - 7;
226+
int maxlayeritem = 1 << (n - 7);
227+
228+
block s[2][maxlayeritem];
229+
int t[2][maxlayeritem];
230+
231+
int curlayer = 1;
232+
233+
block sCW[maxlayer];
234+
int tCW[maxlayer][2];
235+
block finalblock;
236+
237+
memcpy(&s[0][0], &k[1], 16);
238+
t[0][0] = k[17];
239+
240+
int i, j;
241+
for(i = 1; i <= maxlayer; i++){
242+
memcpy(&sCW[i-1], &k[18 * i], 16);
243+
tCW[i-1][0] = k[18 * i + 16];
244+
tCW[i-1][1] = k[18 * i + 17];
245+
}
246+
247+
memcpy(&finalblock, &k[18 * (maxlayer + 1)], 16);
248+
249+
block sL, sR;
250+
int tL, tR;
251+
for(i = 1; i <= maxlayer; i++){
252+
int itemnumber = 1 << (i - 1);
253+
for(j = 0; j < itemnumber; j++){
254+
PRG(key, s[1 - curlayer][j], &sL, &sR, &tL, &tR);
255+
256+
if(t[1 - curlayer][j] == 1){
257+
sL = dpf_xor(sL, sCW[i-1]);
258+
sR = dpf_xor(sR, sCW[i-1]);
259+
tL = tL ^ tCW[i-1][0];
260+
tR = tR ^ tCW[i-1][1];
261+
}
262+
263+
s[curlayer][2 * j] = sL;
264+
t[curlayer][2 * j] = tL;
265+
s[curlayer][2 * j + 1] = sR;
266+
t[curlayer][2 * j + 1] = tR;
267+
}
268+
curlayer = 1 - curlayer;
269+
}
270+
271+
int itemnumber = 1 << maxlayer;
272+
block *res = (block*) malloc(sizeof(block) * itemnumber);
273+
274+
for(j = 0; j < itemnumber; j ++){
275+
res[j] = s[1 - curlayer][j];
276+
277+
if(t[1 - curlayer][j] == 1){
278+
res[j] = dpf_reverse_lsb(res[j]);
279+
}
280+
281+
if(t[1 - curlayer][j] == 1){
282+
res[j] = dpf_xor(res[j], finalblock);
283+
}
284+
}
285+
286+
return res;
287+
}
288+
223289
int main(){
224290
long long userkey1 = 597349; long long userkey2 = 121379;
225291
block userkey = dpf_make_block(userkey1, userkey2);
@@ -232,7 +298,7 @@ int main(){
232298
unsigned char *k0;
233299
unsigned char *k1;
234300

235-
GEN(&key, 0, 16, &k0, &k1);
301+
GEN(&key, 26943, 16, &k0, &k1);
236302

237303
block res1;
238304
block res2;
@@ -248,5 +314,19 @@ int main(){
248314
dpf_cb(res1);
249315
dpf_cb(res2);
250316
dpf_cb(dpf_xor(res1, res2));
317+
318+
block *resf0, *resf1;
319+
resf0 = EVALFULL(&key, k0);
320+
resf1 = EVALFULL(&key, k1);
321+
322+
int j;
323+
for(j = 0; j < 512; j++){
324+
printf("Group %d\n", j);
325+
326+
dpf_cb(resf0[j]);
327+
dpf_cb(resf1[j]);
328+
dpf_cb(dpf_xor(resf0[j], resf1[j]));
329+
}
330+
251331
return 0;
252332
}

0 commit comments

Comments
 (0)