]>
Commit | Line | Data |
---|---|---|
58964a49 RE |
1 | // |
2 | // gettsc.inl | |
3 | // | |
4 | // gives access to the Pentium's (secret) cycle counter | |
5 | // | |
6 | // This software was written by Leonard Janke (janke@unixg.ubc.ca) | |
7 | // in 1996-7 and is entered, by him, into the public domain. | |
8 | ||
9 | #if defined(__WATCOMC__) | |
10 | void GetTSC(unsigned long&); | |
11 | #pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax]; | |
12 | #elif defined(__GNUC__) | |
13 | inline | |
14 | void GetTSC(unsigned long& tsc) | |
15 | { | |
16 | asm volatile(".byte 15, 49\n\t" | |
17 | : "=eax" (tsc) | |
18 | : | |
19 | : "%edx", "%eax"); | |
20 | } | |
21 | #elif defined(_MSC_VER) | |
22 | inline | |
23 | void GetTSC(unsigned long& tsc) | |
24 | { | |
25 | unsigned long a; | |
26 | __asm _emit 0fh | |
27 | __asm _emit 31h | |
28 | __asm mov a, eax; | |
29 | tsc=a; | |
30 | } | |
31 | #endif | |
32 | ||
33 | #include <stdio.h> | |
34 | #include <stdlib.h> | |
35 | #include "rc4.h" | |
36 | ||
37 | void main(int argc,char *argv[]) | |
38 | { | |
39 | unsigned char buffer[1024]; | |
40 | RC4_KEY ctx; | |
41 | unsigned long s1,s2,e1,e2; | |
42 | unsigned char k[16]; | |
43 | unsigned long data[2]; | |
44 | unsigned char iv[8]; | |
45 | int i,num=64,numm; | |
46 | int j=0; | |
47 | ||
48 | if (argc >= 2) | |
49 | num=atoi(argv[1]); | |
50 | ||
51 | if (num == 0) num=256; | |
52 | if (num > 1024-16) num=1024-16; | |
53 | numm=num+8; | |
54 | ||
55 | for (j=0; j<6; j++) | |
56 | { | |
57 | for (i=0; i<10; i++) /**/ | |
58 | { | |
59 | RC4(&ctx,numm,buffer,buffer); | |
60 | GetTSC(s1); | |
61 | RC4(&ctx,numm,buffer,buffer); | |
62 | GetTSC(e1); | |
63 | GetTSC(s2); | |
64 | RC4(&ctx,num,buffer,buffer); | |
65 | GetTSC(e2); | |
66 | RC4(&ctx,num,buffer,buffer); | |
67 | } | |
68 | ||
69 | printf("RC4 (%d bytes) %d %d (%d) - 8 bytes\n",num, | |
70 | e1-s1,e2-s2,(e1-s1)-(e2-s2)); | |
71 | } | |
72 | } | |
73 |