00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <stdlib.h>
00022 #include <stdio.h>
00023 #include "sizes.h"
00024 #include "mceliece.h"
00025
00026 __inline unsigned long long rdtsc()
00027 {
00028 unsigned long long x;
00029 __asm__ volatile (".byte 0x0f, 0x31" :"=A" (x));
00030 return x;
00031 }
00032
00033 int main(int argc, char ** argv) {
00034 unsigned char sk[SECRETKEY_BYTES], pk[PUBLICKEY_BYTES];
00035 FILE * fichier;
00036 char filename[16];
00037 unsigned r;
00038 int n;
00039 unsigned long long tmp, total;
00040
00041 r = (argc > 1) ? atoi(argv[1]) : (((unsigned) rdtsc()) & 0x7fffffff);
00042
00043 n = (argc > 2) ? atoi(argv[2]) : 0;
00044 if (n == 0) {
00045 srandom(r);
00046 keypair(sk, pk);
00047
00048 sprintf(filename, "pk%d", r);
00049 fichier = fopen(filename, "w");
00050 n = EXT_DEGREE;
00051 fwrite(&n, sizeof(int), 1, fichier);
00052 n = NB_ERRORS;
00053 fwrite(&n, sizeof(int), 1, fichier);
00054 fwrite(pk, 1, PUBLICKEY_BYTES, fichier);
00055 fclose(fichier);
00056 sprintf(filename, "sk%d", r);
00057 fichier = fopen(filename, "w");
00058 n = EXT_DEGREE;
00059 fwrite(&n, sizeof(int), 1, fichier);
00060 n = NB_ERRORS;
00061 fwrite(&n, sizeof(int), 1, fichier);
00062 fwrite(sk, 1, SECRETKEY_BYTES, fichier);
00063 fclose(fichier);
00064 }
00065 else {
00066 total = 0;
00067 while (n > 0) {
00068 srandom(r);
00069 tmp = rdtsc();
00070 keypair(sk, pk);
00071 tmp = rdtsc() - tmp;
00072 total += tmp;
00073 --n;
00074 ++r;
00075 }
00076 fichier = fopen("plotkgendata", "a");
00077 fprintf(fichier, "%d\t %d\t %lld\n", LOG_LENGTH, ERROR_WEIGHT, total / atoi(argv[2]));
00078 }
00079 return 0;
00080 }
00081
00082
00083
00084
00085
00086
00087