cleaned up time management. might not work for systems where time_t is not an integer.

git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@396 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
frankmorgner
2011-02-01 10:41:07 +00:00
parent 4ba4f120cb
commit f393e5cac2

View File

@@ -184,7 +184,6 @@ main (int argc, char **argv)
struct sm_ctx sctx, tmpctx; struct sm_ctx sctx, tmpctx;
struct establish_pace_channel_input pace_input; struct establish_pace_channel_input pace_input;
struct establish_pace_channel_output pace_output; struct establish_pace_channel_output pace_output;
time_t t_start, t_end;
struct timeval tv; struct timeval tv;
size_t outlen; size_t outlen;
@@ -324,15 +323,22 @@ main (int argc, char **argv)
if (dobreak) { if (dobreak) {
/* The biggest buffer sprintf could write with "%llu" */ /* The biggest buffer sprintf could write with "%llu" */
char can_ch[strlen("18446744073709551615")+1]; char secretbuf[strlen("18446744073709551615")+1];
unsigned long long can_nb = 0; unsigned long long secret = 0;
if (usepin) { if (usepin) {
pace_input.pin_id = PACE_PIN; pace_input.pin_id = PACE_PIN;
pace_input.pin_length = 6; pace_input.pin_length = 6;
if (pin) { if (pin) {
if (sscanf(pin, "%llu", &can_nb) != 1) { if (sscanf(pin, "%llu", &secret) != 1) {
fprintf(stderr, "PIN is not an unsigned long long.\n"); fprintf(stderr, "%s is not an unsigned long long.\n",
pace_secret_name(pace_input.pin_id));
exit(2);
}
if (strlen(can) > pace_input.pin_length) {
fprintf(stderr, "%s too big, only %d digits allowed.\n",
pace_secret_name(pace_input.pin_id),
pace_input.pin_length);
exit(2); exit(2);
} }
} }
@@ -340,8 +346,15 @@ main (int argc, char **argv)
pace_input.pin_id = PACE_CAN; pace_input.pin_id = PACE_CAN;
pace_input.pin_length = 6; pace_input.pin_length = 6;
if (can) { if (can) {
if (sscanf(can, "%llu", &can_nb) != 1) { if (sscanf(can, "%llu", &secret) != 1) {
fprintf(stderr, "CAN is not an unsigned long long.\n"); fprintf(stderr, "%s is not an unsigned long long.\n",
pace_secret_name(pace_input.pin_id));
exit(2);
}
if (strlen(can) > pace_input.pin_length) {
fprintf(stderr, "%s too big, only %d digits allowed.\n",
pace_secret_name(pace_input.pin_id),
pace_input.pin_length);
exit(2); exit(2);
} }
} }
@@ -349,8 +362,15 @@ main (int argc, char **argv)
pace_input.pin_id = PACE_PUK; pace_input.pin_id = PACE_PUK;
pace_input.pin_length = 10; pace_input.pin_length = 10;
if (puk) { if (puk) {
if (sscanf(puk, "%llu", &can_nb) != 1) { if (sscanf(puk, "%llu", &secret) != 1) {
fprintf(stderr, "PUK is not an unsigned long long.\n"); fprintf(stderr, "%s is not an unsigned long long.\n",
pace_secret_name(pace_input.pin_id));
exit(2);
}
if (strlen(puk) > pace_input.pin_length) {
fprintf(stderr, "%s too big, only %d digits allowed.\n",
pace_secret_name(pace_input.pin_id),
pace_input.pin_length);
exit(2); exit(2);
} }
} }
@@ -360,36 +380,33 @@ main (int argc, char **argv)
exit(1); exit(1);
} }
pace_input.pin = can_ch; pace_input.pin = secretbuf;
t_start = time(NULL);
do { do {
sprintf(can_ch, "%0*llu", pace_input.pin_length, can_nb); sprintf(secretbuf, "%0*llu", pace_input.pin_length, secret);
if (strlen(can_ch) > pace_input.pin_length)
break;
gettimeofday(&tv, NULL); gettimeofday(&tv, NULL);
printf("%d,%06d: Trying %s=%s\n", printf("%u,%06u: Trying %s=%s\n",
tv.tv_sec, tv.tv_usec, tv.tv_sec, tv.tv_usec,
pace_secret_name(pace_input.pin_id), pace_input.pin); pace_secret_name(pace_input.pin_id), pace_input.pin);
i = EstablishPACEChannel(NULL, card, pace_input, &pace_output, i = EstablishPACEChannel(NULL, card, pace_input, &pace_output,
&sctx); &sctx);
can_nb--; secret--;
} while (0 > i && can_nb > 0); } while (0 > i && secret > 0);
t_end = time(NULL);
gettimeofday(&tv, NULL); gettimeofday(&tv, NULL);
if (0 > i) { if (0 > i) {
printf("%d,%06d: Tried breaking %s for %.0fs without success.\n", printf("%u,%06u: Tried breaking %s without success.\n",
tv.tv_sec, tv.tv_usec, tv.tv_sec, tv.tv_usec,
pace_secret_name(pace_input.pin_id), difftime(t_end, t_start)); pace_secret_name(pace_input.pin_id));
goto err; goto err;
} else { } else {
printf("%d,%06d: Tried breaking %s for %.0fs with success (%s=%s).\n", printf("%u,%06u: Tried breaking %s with success (=%s).\n",
tv.tv_sec, tv.tv_usec, tv.tv_sec, tv.tv_usec,
pace_secret_name(pace_input.pin_id), difftime(t_end, t_start), pace_secret_name(pace_input.pin_id),
pace_secret_name(pace_input.pin_id), pace_input.pin); pace_input.pin);
} }
} }
@@ -402,14 +419,11 @@ main (int argc, char **argv)
pace_input.pin = NULL; pace_input.pin = NULL;
pace_input.pin_length = 0; pace_input.pin_length = 0;
} }
t_start = time(NULL);
i = EstablishPACEChannel(NULL, card, pace_input, &pace_output, i = EstablishPACEChannel(NULL, card, pace_input, &pace_output,
&tmpctx); &tmpctx);
t_end = time(NULL);
if (i < 0) if (i < 0)
goto err; goto err;
printf("Established PACE channel with CAN in %.0fs.\n", printf("Established PACE channel with CAN.\n");
difftime(t_end, t_start));
pace_input.pin_id = PACE_PIN; pace_input.pin_id = PACE_PIN;
if (pin) { if (pin) {
@@ -419,14 +433,11 @@ main (int argc, char **argv)
pace_input.pin = NULL; pace_input.pin = NULL;
pace_input.pin_length = 0; pace_input.pin_length = 0;
} }
t_start = time(NULL);
i = EstablishPACEChannel(&tmpctx, card, pace_input, &pace_output, i = EstablishPACEChannel(&tmpctx, card, pace_input, &pace_output,
&sctx); &sctx);
t_end = time(NULL);
if (i < 0) if (i < 0)
goto err; goto err;
printf("Established PACE channel with PIN in %.0fs. PIN resumed.\n", printf("Established PACE channel with PIN. PIN resumed.\n");
difftime(t_end, t_start));
} }
if (dounblock) { if (dounblock) {
@@ -438,14 +449,11 @@ main (int argc, char **argv)
pace_input.pin = NULL; pace_input.pin = NULL;
pace_input.pin_length = 0; pace_input.pin_length = 0;
} }
t_start = time(NULL);
i = EstablishPACEChannel(NULL, card, pace_input, &pace_output, i = EstablishPACEChannel(NULL, card, pace_input, &pace_output,
&sctx); &sctx);
t_end = time(NULL);
if (i < 0) if (i < 0)
goto err; goto err;
printf("Established PACE channel with PUK in %.0fs.\n", printf("Established PACE channel with PUK.\n");
difftime(t_end, t_start));
i = pace_unblock_pin(&sctx, card); i = pace_unblock_pin(&sctx, card);
if (i < 0) if (i < 0)
@@ -462,14 +470,11 @@ main (int argc, char **argv)
pace_input.pin = NULL; pace_input.pin = NULL;
pace_input.pin_length = 0; pace_input.pin_length = 0;
} }
t_start = time(NULL);
i = EstablishPACEChannel(NULL, card, pace_input, &pace_output, i = EstablishPACEChannel(NULL, card, pace_input, &pace_output,
&sctx); &sctx);
t_end = time(NULL);
if (i < 0) if (i < 0)
goto err; goto err;
printf("Established PACE channel with PIN in %.0fs.\n", printf("Established PACE channel with PIN.\n");
difftime(t_end, t_start));
i = pace_change_pin(&sctx, card, newpin, newpin ? strlen(newpin) : 0); i = pace_change_pin(&sctx, card, newpin, newpin ? strlen(newpin) : 0);
if (i < 0) if (i < 0)
@@ -510,14 +515,12 @@ main (int argc, char **argv)
exit(1); exit(1);
} }
t_start = time(NULL);
i = EstablishPACEChannel(NULL, card, pace_input, &pace_output, i = EstablishPACEChannel(NULL, card, pace_input, &pace_output,
&sctx); &sctx);
t_end = time(NULL);
if (i < 0) if (i < 0)
goto err; goto err;
printf("Established PACE channel with %s in %.0fs.\n", printf("Established PACE channel with %s.\n",
pace_secret_name(pace_input.pin_id), difftime(t_end, t_start)); pace_secret_name(pace_input.pin_id));
if (dotranslate) { if (dotranslate) {
FILE *input; FILE *input;