155714Skris// 255714Skris// gettsc.inl 355714Skris// 455714Skris// gives access to the Pentium's (secret) cycle counter 555714Skris// 655714Skris// This software was written by Leonard Janke (janke@unixg.ubc.ca) 755714Skris// in 1996-7 and is entered, by him, into the public domain. 855714Skris 955714Skris#if defined(__WATCOMC__) 1055714Skrisvoid GetTSC(unsigned long&); 1155714Skris#pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax]; 1255714Skris#elif defined(__GNUC__) 1355714Skrisinline 1455714Skrisvoid GetTSC(unsigned long& tsc) 1555714Skris{ 1655714Skris asm volatile(".byte 15, 49\n\t" 1755714Skris : "=eax" (tsc) 1855714Skris : 1955714Skris : "%edx", "%eax"); 2055714Skris} 2155714Skris#elif defined(_MSC_VER) 2255714Skrisinline 2355714Skrisvoid GetTSC(unsigned long& tsc) 2455714Skris{ 2555714Skris unsigned long a; 2655714Skris __asm _emit 0fh 2755714Skris __asm _emit 31h 2855714Skris __asm mov a, eax; 2955714Skris tsc=a; 3055714Skris} 3155714Skris#endif 3255714Skris 3355714Skris#include <stdio.h> 3455714Skris#include <stdlib.h> 3555714Skris#include <openssl/rc4.h> 3655714Skris 3755714Skrisvoid main(int argc,char *argv[]) 3855714Skris { 3955714Skris unsigned char buffer[1024]; 4055714Skris RC4_KEY ctx; 4155714Skris unsigned long s1,s2,e1,e2; 4255714Skris unsigned char k[16]; 4355714Skris unsigned long data[2]; 4455714Skris unsigned char iv[8]; 4555714Skris int i,num=64,numm; 4655714Skris int j=0; 4755714Skris 4855714Skris if (argc >= 2) 4955714Skris num=atoi(argv[1]); 5055714Skris 5155714Skris if (num == 0) num=256; 5255714Skris if (num > 1024-16) num=1024-16; 5355714Skris numm=num+8; 5455714Skris 5555714Skris for (j=0; j<6; j++) 5655714Skris { 5755714Skris for (i=0; i<10; i++) /**/ 5855714Skris { 5955714Skris RC4(&ctx,numm,buffer,buffer); 6055714Skris GetTSC(s1); 6155714Skris RC4(&ctx,numm,buffer,buffer); 6255714Skris GetTSC(e1); 6355714Skris GetTSC(s2); 6455714Skris RC4(&ctx,num,buffer,buffer); 6555714Skris GetTSC(e2); 6655714Skris RC4(&ctx,num,buffer,buffer); 6755714Skris } 6855714Skris 6955714Skris printf("RC4 (%d bytes) %d %d (%d) - 8 bytes\n",num, 7055714Skris e1-s1,e2-s2,(e1-s1)-(e2-s2)); 7155714Skris } 7255714Skris } 7355714Skris 74