2006-12-19 21:33:40 +00:00
|
|
|
/* Copyright (C) 2001 Juha Yrjölä <juha.yrjola@iki.fi>
|
2001-11-01 15:43:20 +00:00
|
|
|
* All rights reserved.
|
|
|
|
*/
|
|
|
|
|
2002-10-19 16:51:37 +00:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include <config.h>
|
|
|
|
#endif
|
2001-11-01 15:43:20 +00:00
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
2002-10-19 14:04:52 +00:00
|
|
|
#ifdef HAVE_UNISTD_H
|
|
|
|
#include <unistd.h>
|
|
|
|
#endif
|
|
|
|
#ifdef HAVE_SYS_TIME_H
|
2001-11-01 15:43:20 +00:00
|
|
|
#include <sys/time.h>
|
2002-10-19 14:04:52 +00:00
|
|
|
#endif
|
2002-04-05 13:48:00 +00:00
|
|
|
#include <opensc/opensc.h>
|
2002-03-22 00:13:25 +00:00
|
|
|
#include "sc-test.h"
|
2001-11-01 15:43:20 +00:00
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
{
|
2005-02-23 19:34:56 +00:00
|
|
|
int i, c, r, cnt = 3, freq[39];
|
2001-11-01 15:43:20 +00:00
|
|
|
struct timeval tv1, tv2;
|
|
|
|
u8 buf[14];
|
|
|
|
|
|
|
|
i = sc_test_init(&argc, argv);
|
|
|
|
for (i = 0; i < 39; i++)
|
|
|
|
freq[i] = 0;
|
|
|
|
c = 0;
|
2005-02-23 19:34:56 +00:00
|
|
|
while (cnt) {
|
2002-03-22 00:13:25 +00:00
|
|
|
u8 nbuf[39];
|
|
|
|
|
2001-11-01 15:43:20 +00:00
|
|
|
for (i = 0; i < 39; i++) {
|
2002-03-22 00:13:25 +00:00
|
|
|
nbuf[i] = i + 1;
|
2001-11-01 15:43:20 +00:00
|
|
|
}
|
|
|
|
if (c == 0)
|
|
|
|
gettimeofday(&tv1, NULL);
|
2001-11-04 14:08:38 +00:00
|
|
|
sc_lock(card);
|
2001-12-22 20:52:57 +00:00
|
|
|
r = sc_get_challenge(card, buf, 14);
|
2001-11-04 14:08:38 +00:00
|
|
|
sc_unlock(card);
|
|
|
|
if (r == 0) {
|
2007-06-21 12:01:39 +00:00
|
|
|
int left = 39;
|
2002-03-22 00:13:25 +00:00
|
|
|
|
|
|
|
printf("Lottery: ");
|
2001-11-01 15:43:20 +00:00
|
|
|
for (i = 0; i < 7; i++) {
|
2002-03-22 00:13:25 +00:00
|
|
|
unsigned short s = buf[2 * i] + (buf[2 * i + 1] << 8);
|
|
|
|
int lot = s % (left + 1);
|
|
|
|
int num = nbuf[lot];
|
|
|
|
|
|
|
|
nbuf[lot] = nbuf[left - 1];
|
|
|
|
left--;
|
|
|
|
freq[num - 1]++;
|
2001-11-01 15:43:20 +00:00
|
|
|
printf("%3d ", num);
|
|
|
|
}
|
|
|
|
printf("\n");
|
2001-11-04 14:08:38 +00:00
|
|
|
} else {
|
2002-03-22 00:13:25 +00:00
|
|
|
fprintf(stderr, "sc_get_challenge() failed: %s\n", sc_strerror(r));
|
2001-11-04 14:08:38 +00:00
|
|
|
sc_test_cleanup();
|
|
|
|
return 1;
|
2001-11-01 15:43:20 +00:00
|
|
|
}
|
|
|
|
c++;
|
|
|
|
if (c == 50) {
|
|
|
|
unsigned long long foo, foo2;
|
2002-03-22 00:13:25 +00:00
|
|
|
|
2001-11-01 15:43:20 +00:00
|
|
|
gettimeofday(&tv2, NULL);
|
|
|
|
foo = tv2.tv_sec * 1000 + tv2.tv_usec / 1000;
|
|
|
|
foo2 = tv1.tv_sec * 1000 + tv1.tv_usec / 1000;
|
2002-03-22 00:13:25 +00:00
|
|
|
printf("Time per one: %lld ms\n", (foo - foo2) / 50);
|
2001-11-01 15:43:20 +00:00
|
|
|
printf("Frequencies:\n");
|
|
|
|
for (i = 0; i < 39; i++) {
|
2002-03-22 00:13:25 +00:00
|
|
|
printf("%3d: %-5d", i + 1, freq[i]);
|
|
|
|
if (((i + 1) % 10) == 0)
|
2001-11-17 00:11:29 +00:00
|
|
|
printf("\n");
|
2001-11-01 15:43:20 +00:00
|
|
|
}
|
|
|
|
printf("\n");
|
|
|
|
c = 0;
|
2005-02-23 19:34:56 +00:00
|
|
|
cnt--;
|
2001-11-01 15:43:20 +00:00
|
|
|
}
|
|
|
|
}
|
2001-11-04 14:08:38 +00:00
|
|
|
sc_test_cleanup();
|
|
|
|
return 0;
|
2001-11-01 15:43:20 +00:00
|
|
|
}
|