]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - test_src/shavs.c
adding MonteCarlo tests for Sha-3 candidates
[avr-crypto-lib.git] / test_src / shavs.c
index 27283cfbdc90d9bd75f0f9e8cdf0701ccc7dff72..17941ae506110fb13863a1bdb52467899cf94df0 100644 (file)
@@ -325,7 +325,7 @@ void shavs_test1(void){ /* KAT tests */
        }
 }
 
-void shavs_test2(void){ /* MonteCarlo - tests */
+void shavs_test2(void){ /* Monte Carlo tests for SHA-1 & SHA-2 */
        uint16_t expected_input;
        uint16_t count;
        uint8_t v;
@@ -364,8 +364,6 @@ void shavs_test2(void){ /* MonteCarlo - tests */
                                return;
                        }
                }
-               cli_putstr_P(PSTR("\r\n reading seed ml=0x"));
-               cli_hexdump_rev(&ml, 1);
                expected_input = ml*2;
                memset(m+2*ml, 0, ml);
                do{
@@ -402,7 +400,7 @@ void shavs_test2(void){ /* MonteCarlo - tests */
                                memmove(m, m+ml, 3*ml);
                        }
                        cli_putstr_P(PSTR("\r\n\r\nCOUNT = "));
-                       if(count>10){
+                       if(count>=10){
                                cli_putc(count/10+'0');
                        }
                        cli_putc(count%10+'0');
@@ -411,3 +409,87 @@ void shavs_test2(void){ /* MonteCarlo - tests */
                }
        }
 }
+
+void shavs_test3(void){ /* Monte Carlo tests for SHA-3 */
+       uint16_t expected_input;
+       uint16_t count;
+       uint8_t v;
+       uint8_t index=0;
+       char c;
+       if(!shavs_algo){
+                       cli_putstr_P(PSTR("\r\nERROR: select algorithm first!"));
+               return;
+       }
+       uint8_t ml=pgm_read_word(&(shavs_algo->hashsize_b))/8;
+       uint8_t m[ml+128];
+       for(;;){
+               while((c=cli_getc_cecho())!='S' && c!='s'){
+                       if(!isblank(c)){
+                               cli_putstr_P(PSTR("\r\nERROR: wrong input (1) [0x"));
+                               cli_hexdump(&c, 1);
+                               cli_putstr_P(PSTR("]!\r\n"));
+                               return;
+                       }
+               }
+               if((c=cli_getc_cecho())!='e' && c!='e'){
+                               cli_putstr_P(PSTR("\r\nERROR: wrong input (2)!\r\n"));
+                               return;
+               }
+               if((c=cli_getc_cecho())!='e' && c!='e'){
+                               cli_putstr_P(PSTR("\r\nERROR: wrong input (3)!\r\n"));
+                               return;
+               }
+               if((c=cli_getc_cecho())!='d' && c!='D'){
+                               cli_putstr_P(PSTR("\r\nERROR: wrong input (4)!\r\n"));
+                               return;
+               }
+               while((c=cli_getc_cecho())!='='){
+                       if(!isblank(c)){
+                               cli_putstr_P(PSTR("\r\nERROR: wrong input (5)!\r\n"));
+                               return;
+                       }
+               }
+               expected_input = 1024/4;
+               memset(m+ml, 0, 1024/8);
+               do{
+                       v=0xff;
+                       c=cli_getc_cecho();
+                       if(c>='0' && c<='9'){
+                               v = c - '0';
+                       }else{
+                               c |= 'A'^'a';
+                               if(c>='a' && c<='f'){
+                                       v = c - 'a' +10;
+                               }
+                       }
+                       if(v<0x10){
+                               c=m[ml+index/2];
+                               if(index&1){
+                                       c |= v;
+                               }else{
+                                       c |=v<<4;
+                               }
+                               m[ml+index/2]=c;
+                               index++;
+                               expected_input--;
+                       }
+               }while(expected_input);
+               /* so we have the seed */
+               cli_putstr_P(PSTR("\r\nstarting processing"));
+               uint16_t j;
+               for(count=0; count<100; ++count){
+                       for(j=0; j<1000; ++j){
+                               hfal_hash_mem(shavs_algo, m, m+ml, 1024);
+                               memmove(m+ml, m, 1024/8);
+                       }
+                       cli_putstr_P(PSTR("\r\n\r\nj = "));
+                       if(count>=10){
+                               cli_putc(count/10+'0');
+                       }
+                       cli_putc(count%10+'0');
+                       cli_putstr_P(PSTR("\r\nMD = "));
+                       cli_hexdump(m+ml, ml);
+
+               }
+       }
+}