]> git.cryptolib.org Git - arm-crypto-lib.git/blobdiff - test_src/shavs.c
'hardening' infrastucture against toolchain bugs
[arm-crypto-lib.git] / test_src / shavs.c
index 7ac8ec79f4c2460b179f8c2a4f01f196edb44042..8ef96191def19a2151f0d02468de5b29e943a85f 100644 (file)
@@ -42,6 +42,7 @@
 #define DEBUG 0
 
 #if DEBUG
+#include "uart_lowlevel.h"
 //#  include "config.h"
 //#  include <util/delay.h>
 #endif
@@ -143,9 +144,26 @@ uint8_t buffer_add(char c){
        return 0;
 }
 
+static
+uint32_t my_strtoul(const char* str){
+       uint32_t r=0;
+       while(*str && (*str<'0' || *str>'9')){
+               str++;
+       }
+       if(!*str){
+               return 0;
+       }
+       while(*str && (*str>='0' && *str<='9')){
+               r *= 10;
+               r += *str-'0';
+               str++;
+       }
+       return r;
+}
+
 int32_t getLength(void){
        uint32_t len=0;
-       char lenstr[21];
+       char lenstr[25];
        char* len2;
        for(;;){
                memset(lenstr, 0, 21);
@@ -157,8 +175,9 @@ int32_t getLength(void){
                        if(*len2=='='){
                                do{
                                        len2++;
-                               }while(*len2 && !isdigit(*len2));
-                               len=(uint32_t)strtoul(len2, NULL, 10);
+                               }while(*len2 && !isdigit((uint8_t)*len2));
+                               len = my_strtoul(len2);
+                               //len=(uint32_t)strtoul(len2, NULL, 10);
                                return len;
                        }
                } else {
@@ -189,13 +208,19 @@ void shavs_test1(void){ /* KAT tests */
                shavs_ctx.blocks = 0;
                memset(buffer, 0, shavs_ctx.buffersize_B);
                length = getLength();
-               if(length<0){
+               if((int32_t)length<0){
+#if DEBUG
+                       cli_putstr("\r\n(x) Len == ");
+                       cli_hexdump_rev(&length, 4);
+                       uart_flush(0);
+#endif
                        return;
                }
 
 #if DEBUG
                cli_putstr("\r\nLen == ");
                cli_hexdump_rev(&length, 4);
+               uart_flush(0);
 #endif
                if(length==0){
                        expect_input=2;
@@ -229,7 +254,7 @@ void shavs_test1(void){ /* KAT tests */
                cli_putstr("\r\n");
 #endif
                while((c=cli_getc_cecho())!='M' && c!='m'){
-                       if(!isblank(c)){
+                       if(!isblank((uint8_t)c)){
                                cli_putstr("\r\nERROR: wrong input (1) [0x");
                                cli_hexdump(&c, 1);
                                cli_putstr("]!\r\n");
@@ -248,7 +273,7 @@ void shavs_test1(void){ /* KAT tests */
                                return;
                }
                while((c=cli_getc_cecho())!='='){
-                       if(!isblank(c)){
+                       if(!isblank((uint8_t)c)){
                                cli_putstr("\r\nERROR: wrong input (4)!\r\n");
                                hfal_hash_free(&(shavs_ctx.ctx));
                                return;
@@ -336,7 +361,7 @@ void shavs_test2(void){ /* Monte Carlo tests for SHA-1 & SHA-2 */
        uint8_t m[ml*4+8];
        for(;;){
                while((c=cli_getc_cecho())!='S' && c!='s'){
-                       if(!isblank(c)){
+                       if(!isblank((uint8_t)c)){
                                cli_putstr("\r\nERROR: wrong input (1) [0x");
                                cli_hexdump(&c, 1);
                                cli_putstr("]!\r\n");
@@ -356,7 +381,7 @@ void shavs_test2(void){ /* Monte Carlo tests for SHA-1 & SHA-2 */
                                return;
                }
                while((c=cli_getc_cecho())!='='){
-                       if(!isblank(c)){
+                       if(!isblank((uint8_t)c)){
                                cli_putstr("\r\nERROR: wrong input (5)!\r\n");
                                return;
                        }
@@ -421,7 +446,7 @@ void shavs_test3(void){ /* Monte Carlo tests for SHA-3 */
        uint8_t m[ml+128];
        for(;;){
                while((c=cli_getc_cecho())!='S' && c!='s'){
-                       if(!isblank(c)){
+                       if(!isblank((uint8_t)c)){
                                cli_putstr("\r\nERROR: wrong input (1) [0x");
                                cli_hexdump(&c, 1);
                                cli_putstr("]!\r\n");
@@ -441,7 +466,7 @@ void shavs_test3(void){ /* Monte Carlo tests for SHA-3 */
                                return;
                }
                while((c=cli_getc_cecho())!='='){
-                       if(!isblank(c)){
+                       if(!isblank((uint8_t)c)){
                                cli_putstr("\r\nERROR: wrong input (5)!\r\n");
                                return;
                        }