raw
smg_comms_c_wrappers    1 #include "mpi.h"
smg_comms_c_wrappers 2 #include "mpi-internal.h" /* for BITS_PER_MPI_LIMB */
smg_comms_c_wrappers 3 #include <stdlib.h>
smg_comms_c_wrappers 4
smg_comms_c_wrappers 5 void err(char *msg)
smg_comms_c_wrappers 6 {
smg_comms_c_wrappers 7 fprintf(stderr, "%s\n", msg);
smg_comms_c_wrappers 8 exit(1);
smg_comms_c_wrappers 9 }
smg_comms_c_wrappers 10
smg_comms_c_wrappers 11 void terpri(FILE *fp)
smg_comms_c_wrappers 12 {
smg_comms_c_wrappers 13 fprintf(fp, "\n");
smg_comms_c_wrappers 14 }
smg_comms_c_wrappers 15
smg_comms_c_wrappers 16 void print_results(MPI in, MPI out, char * title)
smg_comms_c_wrappers 17 {
smg_comms_c_wrappers 18 fprintf(stdout, "******** %s ********", title);
smg_comms_c_wrappers 19 terpri(stdout);
smg_comms_c_wrappers 20
smg_comms_c_wrappers 21 fprintf(stdout, "input : ");
smg_comms_c_wrappers 22 mpi_print(stdout, in, 1);
smg_comms_c_wrappers 23 terpri(stdout);
smg_comms_c_wrappers 24
smg_comms_c_wrappers 25 fprintf(stdout, "output: ");
smg_comms_c_wrappers 26 mpi_print(stdout, out, 1);
smg_comms_c_wrappers 27 terpri(stdout);
smg_comms_c_wrappers 28
smg_comms_c_wrappers 29 terpri(stdout);
smg_comms_c_wrappers 30 fflush(stdout);
smg_comms_c_wrappers 31 }
smg_comms_c_wrappers 32
smg_comms_c_wrappers 33 /*
smg_comms_c_wrappers 34 * Test that will fail on original code and will pass after EuCrypt fix is applied.
smg_comms_c_wrappers 35 */
smg_comms_c_wrappers 36 void test_rshift()
smg_comms_c_wrappers 37 {
smg_comms_c_wrappers 38 MPI out, in, copy_in;
smg_comms_c_wrappers 39 out = mpi_alloc(0);
smg_comms_c_wrappers 40 in = mpi_alloc(0);
smg_comms_c_wrappers 41 copy_in = mpi_alloc(0);
smg_comms_c_wrappers 42
smg_comms_c_wrappers 43 mpi_fromstr(out, "0x20E92FE28E1929"); /* some value */
smg_comms_c_wrappers 44 mpi_fromstr(in, "0x2000000010000001000000002");
smg_comms_c_wrappers 45 mpi_fromstr(copy_in, "0x2000000010000001000000002"); /* to make sure the actual input is print, since call can modify in */
smg_comms_c_wrappers 46
smg_comms_c_wrappers 47 /* print value of BITS_PER_MPI_LIMB */
smg_comms_c_wrappers 48 fprintf(stdout, "BITS_PER_MPI_LIMB is %d\n", BITS_PER_MPI_LIMB);
smg_comms_c_wrappers 49
smg_comms_c_wrappers 50 /* shift by 0 */
smg_comms_c_wrappers 51 mpi_tdiv_q_2exp(out, in, 0);
smg_comms_c_wrappers 52 print_results(copy_in, out, "TEST: right shift by 0");
smg_comms_c_wrappers 53
smg_comms_c_wrappers 54 /* shift by multiple of BITS_PER_MPI_LIMB */
smg_comms_c_wrappers 55 mpi_fromstr(in, "0x2000000010000001000000002");
smg_comms_c_wrappers 56
smg_comms_c_wrappers 57 mpi_tdiv_q_2exp(out, in, BITS_PER_MPI_LIMB);
smg_comms_c_wrappers 58 print_results(copy_in, out, "TEST: right shift by BITS_PER_MPI_LIMB");
smg_comms_c_wrappers 59
smg_comms_c_wrappers 60 /* shift by non-multiple of BITS_PER_MPI_LIMB */
smg_comms_c_wrappers 61 mpi_fromstr(in, "0x2000000010000001000000002");
smg_comms_c_wrappers 62 mpi_tdiv_q_2exp(out, in, BITS_PER_MPI_LIMB - 3);
smg_comms_c_wrappers 63 print_results(copy_in, out, "TEST: right shift by BITS_PER_MPI_LIMB - 3");
smg_comms_c_wrappers 64
smg_comms_c_wrappers 65 mpi_free(copy_in);
smg_comms_c_wrappers 66 mpi_free(out);
smg_comms_c_wrappers 67 mpi_free(in);
smg_comms_c_wrappers 68 }
smg_comms_c_wrappers 69
smg_comms_c_wrappers 70 void test_highbit()
smg_comms_c_wrappers 71 {
smg_comms_c_wrappers 72 MPI in, set_out, clear_out;
smg_comms_c_wrappers 73
smg_comms_c_wrappers 74 in = mpi_alloc(0);
smg_comms_c_wrappers 75 set_out = mpi_alloc(0);
smg_comms_c_wrappers 76 clear_out = mpi_alloc(0);
smg_comms_c_wrappers 77
smg_comms_c_wrappers 78 mpi_fromstr(in, "0x2000000010000002000000004");
smg_comms_c_wrappers 79 mpi_fromstr(set_out, "0x2000000010000002000000004");
smg_comms_c_wrappers 80 mpi_fromstr(clear_out, "0x2000000010000002000000004");
smg_comms_c_wrappers 81
smg_comms_c_wrappers 82 mpi_set_highbit(set_out, 91);
smg_comms_c_wrappers 83 print_results(in, set_out, "TEST: mpi_set_highbit(in, 91)");
smg_comms_c_wrappers 84
smg_comms_c_wrappers 85 mpi_fromstr(set_out, "0x2000000010000002000000004");
smg_comms_c_wrappers 86 mpi_set_highbit(set_out, 96);
smg_comms_c_wrappers 87 print_results(in, set_out, "TEST: mpi_set_highbit(in, 96)");
smg_comms_c_wrappers 88
smg_comms_c_wrappers 89
smg_comms_c_wrappers 90 mpi_clear_highbit(clear_out, 96);
smg_comms_c_wrappers 91 print_results(in, clear_out, "TEST: mpi_clear_highbit(in, 96)");
smg_comms_c_wrappers 92
smg_comms_c_wrappers 93 mpi_fromstr(clear_out, "0x2000000010000002000000004");
smg_comms_c_wrappers 94 mpi_clear_highbit(clear_out, 1);
smg_comms_c_wrappers 95 print_results(in, clear_out, "TEST: mpi_clear_highbit(in, 1)");
smg_comms_c_wrappers 96
smg_comms_c_wrappers 97 mpi_free(in);
smg_comms_c_wrappers 98 mpi_free(set_out);
smg_comms_c_wrappers 99 mpi_free(clear_out);
smg_comms_c_wrappers 100 }
smg_comms_c_wrappers 101
smg_comms_c_wrappers 102 void test_get_nbits()
smg_comms_c_wrappers 103 {
smg_comms_c_wrappers 104 MPI m;
smg_comms_c_wrappers 105 int nbits;
smg_comms_c_wrappers 106
smg_comms_c_wrappers 107 m = mpi_alloc(0);
smg_comms_c_wrappers 108 mpi_fromstr(m, "0x0");
smg_comms_c_wrappers 109 nbits = mpi_get_nbits(m);
smg_comms_c_wrappers 110 print_results(m, m, "TEST: get_nbits");
smg_comms_c_wrappers 111 fprintf(stdout, "nbits: %d\n", nbits);
smg_comms_c_wrappers 112 mpi_free(m);
smg_comms_c_wrappers 113 }
smg_comms_c_wrappers 114
smg_comms_c_wrappers 115 int main(int ac, char **av)
smg_comms_c_wrappers 116 {
smg_comms_c_wrappers 117 MPI a, b, y;
smg_comms_c_wrappers 118 int r;
smg_comms_c_wrappers 119
smg_comms_c_wrappers 120 test_rshift();
smg_comms_c_wrappers 121 test_highbit();
smg_comms_c_wrappers 122 test_get_nbits();
smg_comms_c_wrappers 123
smg_comms_c_wrappers 124 r = secmem_init(1000);
smg_comms_c_wrappers 125 if (r==0) err("secmem init");
smg_comms_c_wrappers 126
smg_comms_c_wrappers 127 a = mpi_alloc_secure(0);
smg_comms_c_wrappers 128 b = mpi_alloc_secure(0);
smg_comms_c_wrappers 129 y = mpi_alloc_secure(0);
smg_comms_c_wrappers 130 mpi_fromstr(a, "0x1B0B206C488601");
smg_comms_c_wrappers 131 mpi_fromstr(b, "0x20E92FE28E1929");
smg_comms_c_wrappers 132 mpi_mul(y, a, b);
smg_comms_c_wrappers 133 mpi_free(a);
smg_comms_c_wrappers 134 mpi_free(b);
smg_comms_c_wrappers 135
smg_comms_c_wrappers 136 fprintf(stdout, "******** TEST: mpi_mul, see README ********");
smg_comms_c_wrappers 137 terpri(stdout);
smg_comms_c_wrappers 138 mpi_print(stdout, y, 1);
smg_comms_c_wrappers 139 mpi_free(y);
smg_comms_c_wrappers 140
smg_comms_c_wrappers 141 terpri(stdout);
smg_comms_c_wrappers 142 secmem_term();
smg_comms_c_wrappers 143
smg_comms_c_wrappers 144 return 0;
smg_comms_c_wrappers 145 }