1 2 #ifndef __CMPTEST_H__ 3 #define __CMPTEST_H__ 4 5 #ifdef NDEBUG 6 #/**/undef/**/ NDEBUG 7 #endif 8 9 #include <assert.h> 10 #include <stdio.h> 11 #include <stdint.h> 12 #include <stdlib.h> 13 #include <string.h> 14 #include <errno.h> 15 16 #include "sodium.h" 17 #include "quirks.h" 18 19 #ifdef __EMSCRIPTEN__ 20 # undef TEST_SRCDIR 21 # define TEST_SRCDIR "/test-data" 22 #endif 23 #ifndef TEST_SRCDIR 24 # define TEST_SRCDIR "." 25 #endif 26 27 #define TEST_NAME_RES TEST_NAME ".res" 28 #define TEST_NAME_OUT TEST_SRCDIR "/" TEST_NAME ".exp" 29 30 #ifdef HAVE_ARC4RANDOM 31 # undef rand 32 # define rand(X) arc4random(X) 33 #endif 34 35 int xmain(void); 36 37 #ifdef BENCHMARKS 38 39 # include <sys/time.h> 40 41 # ifndef ITERATIONS 42 # define ITERATIONS 128 43 # endif 44 now(void)45static unsigned long long now(void) 46 { 47 struct timeval tp; 48 unsigned long long now; 49 50 if (gettimeofday(&tp, NULL) != 0) { 51 abort(); 52 } 53 now = ((unsigned long long) tp.tv_sec * 1000000ULL) + 54 (unsigned long long) tp.tv_usec; 55 56 return now; 57 } 58 main(void)59int main(void) 60 { 61 unsigned long long ts_start; 62 unsigned long long ts_end; 63 unsigned int i; 64 65 if (sodium_init() != 0) { 66 return 99; 67 } 68 randombytes_set_implementation(&randombytes_salsa20_implementation); 69 ts_start = now(); 70 for (i = 0; i < ITERATIONS; i++) { 71 if (xmain() != 0) { 72 abort(); 73 } 74 } 75 ts_end = now(); 76 printf("%llu\n", 1000000ULL * (ts_end - ts_start) / ITERATIONS); 77 78 return 0; 79 } 80 81 #define printf(...) do { } while(0) 82 83 #elif !defined(BROWSER_TESTS) 84 85 FILE *fp_res; 86 main(void)87int main(void) 88 { 89 FILE *fp_out; 90 int c; 91 92 if ((fp_res = fopen(TEST_NAME_RES, "w+")) == NULL) { 93 perror("fopen(" TEST_NAME_RES ")"); 94 return 99; 95 } 96 if (sodium_init() != 0) { 97 return 99; 98 } 99 if (xmain() != 0) { 100 return 99; 101 } 102 rewind(fp_res); 103 if ((fp_out = fopen(TEST_NAME_OUT, "r")) == NULL) { 104 perror("fopen(" TEST_NAME_OUT ")"); 105 return 99; 106 } 107 do { 108 if ((c = fgetc(fp_res)) != fgetc(fp_out)) { 109 return 99; 110 } 111 } while (c != EOF); 112 113 return 0; 114 } 115 116 #undef printf 117 #define printf(...) fprintf(fp_res, __VA_ARGS__) 118 119 #else 120 main(void)121int main(void) 122 { 123 if (sodium_init() != 0) { 124 return 99; 125 } 126 if (xmain() != 0) { 127 return 99; 128 } 129 printf("--- SUCCESS ---\n"); 130 131 return 0; 132 } 133 134 #endif 135 136 #define main xmain 137 138 #endif 139