md4s.cpp revision 68651
1272343Sngie// 2272343Sngie// gettsc.inl 3272343Sngie// 4272343Sngie// gives access to the Pentium's (secret) cycle counter 5272343Sngie// 6272343Sngie// This software was written by Leonard Janke (janke@unixg.ubc.ca) 7272343Sngie// in 1996-7 and is entered, by him, into the public domain. 8272343Sngie 9272343Sngie#if defined(__WATCOMC__) 10272343Sngievoid GetTSC(unsigned long&); 11272343Sngie#pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax]; 12272343Sngie#elif defined(__GNUC__) 13272343Sngieinline 14272343Sngievoid GetTSC(unsigned long& tsc) 15272343Sngie{ 16272343Sngie asm volatile(".byte 15, 49\n\t" 17272343Sngie : "=eax" (tsc) 18272343Sngie : 19272343Sngie : "%edx", "%eax"); 20272343Sngie} 21272343Sngie#elif defined(_MSC_VER) 22272343Sngieinline 23272343Sngievoid GetTSC(unsigned long& tsc) 24272343Sngie{ 25272343Sngie unsigned long a; 26272343Sngie __asm _emit 0fh 27272343Sngie __asm _emit 31h 28272343Sngie __asm mov a, eax; 29272343Sngie tsc=a; 30272343Sngie} 31272343Sngie#endif 32272343Sngie 33272343Sngie#include <stdio.h> 34272343Sngie#include <stdlib.h> 35272343Sngie#include <openssl/md4.h> 36272343Sngie 37272343Sngieextern "C" { 38272343Sngievoid md4_block_x86(MD4_CTX *ctx, unsigned char *buffer,int num); 39272343Sngie} 40272343Sngie 41272343Sngievoid main(int argc,char *argv[]) 42272343Sngie { 43272343Sngie unsigned char buffer[64*256]; 44272343Sngie MD4_CTX ctx; 45272343Sngie unsigned long s1,s2,e1,e2; 46272343Sngie unsigned char k[16]; 47272343Sngie unsigned long data[2]; 48272343Sngie unsigned char iv[8]; 49272343Sngie int i,num=0,numm; 50272343Sngie int j=0; 51272343Sngie 52272343Sngie if (argc >= 2) 53272343Sngie num=atoi(argv[1]); 54272343Sngie 55272343Sngie if (num == 0) num=16; 56272343Sngie if (num > 250) num=16; 57272343Sngie numm=num+2; 58272343Sngie num*=64; 59272343Sngie numm*=64; 60272343Sngie 61272343Sngie for (j=0; j<6; j++) 62272343Sngie { 63272343Sngie for (i=0; i<10; i++) /**/ 64272343Sngie { 65272343Sngie md4_block_x86(&ctx,buffer,numm); 66272343Sngie GetTSC(s1); 67272343Sngie md4_block_x86(&ctx,buffer,numm); 68272343Sngie GetTSC(e1); 69272343Sngie GetTSC(s2); 70272343Sngie md4_block_x86(&ctx,buffer,num); 71272343Sngie GetTSC(e2); 72272343Sngie md4_block_x86(&ctx,buffer,num); 73272343Sngie } 74272343Sngie printf("md4 (%d bytes) %d %d (%.2f)\n",num, 75272343Sngie e1-s1,e2-s2,(double)((e1-s1)-(e2-s2))/2); 76272343Sngie } 77272343Sngie } 78272343Sngie 79272343Sngie