Beispiel #1
0
uint32_t calibrate()
{
    uint32_t dtMin = 0xFFFFFFFF;        /* big number to start */
    uint32_t t0,t1,i;

    for (i=0;i < TIMER_SAMPLE_CNT;i++)  /* calibrate the overhead for measuring time */
        {
        t0 = HiResTime();
        t1 = HiResTime();
        if (dtMin > t1-t0)              /* keep only the minimum time */
            dtMin = t1-t0;
        }
    return dtMin;
}
uint_32t measureDoubleKeccakPermutation(uint_32t dtMin)
{
    uint_32t tMin = 0xFFFFFFFF;         /* big number to start */
    uint_32t t0,t1,i;
    ALIGN unsigned char state[KeccakPermutationSizeInBytes*2];

    for (i=0;i < TIMER_SAMPLE_CNT;i++)  /* calibrate the overhead for measuring time */
        {
        t0 = HiResTime();
        KeccakDoublePermutationOnWords((V128*)state);
        t1 = HiResTime();
        if (tMin > t1-t0 - dtMin)       /* keep only the minimum time */
            tMin = t1-t0 - dtMin;
        }

    /* now tMin = # clocks required for running RoutineToBeTimed() */
    
    return tMin;
}
Beispiel #3
0
int main() {

const unsigned char key[16] = {0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70};
unsigned char nonce[16] = {0x09,0xf9,0x11,0x02,0x9d,0x74,0xe3,0x5b,0xd8,0x41,0x56,0xc5,0x63,0x56,0x88,0xc0};
unsigned char in[4096], out[4096], adata[4096], tag[16];

  int i, j, k;

  srand(time(NULL));
  for (i=0; i<4096; i++){
    in[i] = (unsigned char)rand();
    adata[i]=(unsigned char)rand();}
    
#if 0
  for (i=0; i!=128*l; i++) {
    printf("%02x ",in[i]);
  }
  for (i=0; i!=16; i++) {
    printf("%02x ",key[i]);
  }
  printf("\n");
#endif
 
#ifdef HIRES
  uint32_t t0,t1;
  
  uint32_t tMin = 0xFFFFFFFF;         /* big number to start */
  
  uint32_t dtMin = calibrate();
  printf("Cycles for calibrate: %d\n", dtMin);

  for (j=0;j<1000;j++) 
      //void YAES128_ENC(const unsigned char* K,const unsigned char *N, const unsigned char *A, unsigned char *M, unsigned char *C, unsigned char *T, int Tau, int lengthM, int lengthA, int lengthN);
     YAES128_ENC(key,nonce, 0, in, out, tag, 16, 4096, 0, 16);

  printf("Without adata:\n\n");
  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, 0, in, out, tag, 16, 64, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 64: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(64)));
#endif
  
#ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, 0, in, out, tag, 16, 128, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 128: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(128)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, 0, in, out, tag, 16, 256, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 256: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(256)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, 0, in, out, tag, 16, 512, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 512: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(512)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  
  #ifdef HIRES

  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, 0, in, out, tag, 16, 1024, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 1024: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(1024)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, 0, in, out, tag, 16, 2048, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 2048: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(2048)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, 0, in, out, tag, 16, 4096, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 4096: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(4096)));
#endif
    printf("With adata, same size:\n\n");
  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, adata, in, out, tag, 16, 64, 64, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 64: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(64)));
#endif
  
#ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, adata, in, out, tag, 16, 128, 128, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 128: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(128)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, adata, in, out, tag, 16, 256, 256, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 256: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(256)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, adata, in, out, tag, 16, 512, 512, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 512: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(512)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, adata, in, out, tag, 16, 1024, 1024, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 1024: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(1024)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, adata, in, out, tag, 16, 2048, 2048, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 2048: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(2048)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_ENC(key,nonce, adata, in, out, tag, 16, 4096, 4096, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 4096: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(4096)));
#endif
  #ifdef HIRES

      printf("\n\n\n\nDecryption:\n\n");

    printf("Without adata:\n\n");
  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, 0, in, out, tag, 16, 64, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 64: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(64)));
#endif
  
#ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, 0, in, out, tag, 16, 128, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 128: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(128)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, 0, in, out, tag, 16, 256, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 256: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(256)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, 0, in, out, tag, 16, 512, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 512: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(512)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  
  #ifdef HIRES

  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, 0, in, out, tag, 16, 1024, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 1024: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(1024)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, 0, in, out, tag, 16, 2048, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 2048: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(2048)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, 0, in, out, tag, 16, 4096, 0, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 4096: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(4096)));
#endif
    printf("With adata, same size:\n\n");
  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, adata, in, out, tag, 16, 64, 64, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 64: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(64)));
#endif
  
#ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, adata, in, out, tag, 16, 128, 128, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 128: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(128)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, adata, in, out, tag, 16, 256, 256, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 256: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(256)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, adata, in, out, tag, 16, 512, 512, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 512: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(512)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, adata, in, out, tag, 16, 1024, 1024, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 1024: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(1024)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, adata, in, out, tag, 16, 2048, 2048, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 2048: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(2048)));
#endif
  
  #ifdef HIRES
    
  tMin = 0xFFFFFFFF;         /* big number to start */
  


  for (k=0;k < TIMER_SAMPLE_CNT;k++) {
    t0 = HiResTime();
#endif

     YAES128_DEC(key,nonce, adata, in, out, tag, 16, 4096, 4096, 16);

#ifdef HIRES
    t1 = HiResTime();
    if (tMin > t1-t0 - dtMin) tMin = t1-t0 - dtMin;
  }
#endif
  
#ifdef HIRES
  printf("Cycles for YAES 4096: %d\n", tMin);
  printf("Cycles per byte: %f\n", tMin/((double)(4096)));
#endif
  
#if 0
  for (i=0; i!=128; i++) {
    printf("%02x ",out[i]);
  }
  printf("\n");
#endif
  return 0;
}