#include #include "cpucycles.h" #include "aes.h" unsigned char current[16]; unsigned int currentpos = 16; unsigned int randombyte(void) { if (currentpos == 16) { aes(current,current,current); currentpos = 0; } return current[currentpos++]; } unsigned char k[256][16]; unsigned char n[256][16]; double cyclesnk[256][256]; int numnk[256][256]; int kpos[32]; int npos[32]; unsigned char kselect[32][16]; unsigned char nselect[32][16]; unsigned char out[32][16]; long long times[32]; main() { int loop; int i; int j; long long u; for (i = 0;i < 256;++i) for (j = 0;j < 16;++j) { k[i][j] = randombyte(); n[i][j] = randombyte(); } for (loop = 0;loop < 65536000;++loop) { for (i = 0;i < 32;++i) { kpos[i] = randombyte(); npos[i] = randombyte(); for (j = 0;j < 16;++j) kselect[i][j] = k[kpos[i]][j]; for (j = 0;j < 16;++j) nselect[i][j] = n[npos[i]][j]; } for (i = 0;i < 32;++i) { times[i] = cpucycles(); aes(out[i],kselect[i],nselect[i]); } for (i = 0;i < 31;++i) { u = times[i + 1] - times[i]; if (u < 10000) { cyclesnk[kpos[i]][npos[i]] += u; numnk[kpos[i]][npos[i]] += 1; } } } for (i = 0;i < 256;++i) for (j = 0;j < 256;++j) printf("%f\n",cyclesnk[i][j] / numnk[i][j]); return 0; }