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