Home | History | Annotate | Download | only in rc4
      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 (at) 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 <openssl/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 
     74