raw
smg_comms_c_wrappers    1 //Basic tests for the C wrappers for rsa and mpi.
smg_comms_c_wrappers 2 //S.MG, 2018
smg_comms_c_wrappers 3
smg_comms_c_wrappers 4 #include "mpi.h"
smg_comms_c_wrappers 5 #include "smg_rsa.h"
smg_comms_c_wrappers 6
smg_comms_c_wrappers 7 #include "c_wrappers.h"
smg_comms_c_wrappers 8
smg_comms_c_wrappers 9 void test_mpi_cmp() {
smg_comms_c_wrappers 10 int result;
smg_comms_c_wrappers 11 int i;
smg_comms_c_wrappers 12 char a[KEY_LENGTH_OCTETS];
smg_comms_c_wrappers 13 char b[KEY_LENGTH_OCTETS];
smg_comms_c_wrappers 14
smg_comms_c_wrappers 15 //initialize mpis
smg_comms_c_wrappers 16 for (i=0;i<KEY_LENGTH_OCTETS;i++) {
smg_comms_c_wrappers 17 a[i] = i % 256;
smg_comms_c_wrappers 18 b[i] = a[i];
smg_comms_c_wrappers 19 }
smg_comms_c_wrappers 20
smg_comms_c_wrappers 21 //cmp same value mpi
smg_comms_c_wrappers 22 result = mpi_cmp_octets(a, KEY_LENGTH_OCTETS, b, KEY_LENGTH_OCTETS);
smg_comms_c_wrappers 23 if (result == 0)
smg_comms_c_wrappers 24 printf("PASS: mpi_cmp_octets on a == b.\n");
smg_comms_c_wrappers 25 else {
smg_comms_c_wrappers 26 printf("FAIL: mpi_cmp_octets on a == b ");
smg_comms_c_wrappers 27 printf("returned %d instead of 0.\n", result);
smg_comms_c_wrappers 28 }
smg_comms_c_wrappers 29
smg_comms_c_wrappers 30 //cmp a < b
smg_comms_c_wrappers 31 b[489] = 234;
smg_comms_c_wrappers 32 result = mpi_cmp_octets(a, KEY_LENGTH_OCTETS, b, KEY_LENGTH_OCTETS);
smg_comms_c_wrappers 33 if (result == -1)
smg_comms_c_wrappers 34 printf("PASS: mpi_cmp_octets on a < b.\n");
smg_comms_c_wrappers 35 else {
smg_comms_c_wrappers 36 printf("FAIL: mpi_cmp_octets on a < b ");
smg_comms_c_wrappers 37 printf("returned %d instead of -1.\n", result);
smg_comms_c_wrappers 38 }
smg_comms_c_wrappers 39
smg_comms_c_wrappers 40 //cmp a > b
smg_comms_c_wrappers 41 a[240] = 241;
smg_comms_c_wrappers 42 result = mpi_cmp_octets(a, KEY_LENGTH_OCTETS, b, KEY_LENGTH_OCTETS);
smg_comms_c_wrappers 43 if (result == 1)
smg_comms_c_wrappers 44 printf("PASS: mpi_cmp_octets on a > b.\n");
smg_comms_c_wrappers 45 else {
smg_comms_c_wrappers 46 printf("FAIL: mpi_cmp_octets on a > b ");
smg_comms_c_wrappers 47 printf("returned %d instead of 1.\n", result);
smg_comms_c_wrappers 48 }
smg_comms_c_wrappers 49 }
smg_comms_c_wrappers 50
smg_comms_c_wrappers 51 void test_gen_rsa_octets() {
smg_comms_c_wrappers 52 RSA_secret_key sk;
smg_comms_c_wrappers 53 RSA_public_key pk;
smg_comms_c_wrappers 54 int nlimbs = mpi_nlimb_hint_from_nbytes( KEY_LENGTH_OCTETS );
smg_comms_c_wrappers 55 int nlimbs_pq = mpi_nlimb_hint_from_nbytes( KEY_LENGTH_OCTETS / 2 );
smg_comms_c_wrappers 56
smg_comms_c_wrappers 57 //allocate memory
smg_comms_c_wrappers 58 sk.n = mpi_alloc(nlimbs);
smg_comms_c_wrappers 59 sk.e = mpi_alloc(nlimbs);
smg_comms_c_wrappers 60 sk.d = mpi_alloc(nlimbs);
smg_comms_c_wrappers 61 sk.p = mpi_alloc(nlimbs_pq);
smg_comms_c_wrappers 62 sk.q = mpi_alloc(nlimbs_pq);
smg_comms_c_wrappers 63 sk.u = mpi_alloc(nlimbs_pq);
smg_comms_c_wrappers 64
smg_comms_c_wrappers 65 pk.n = mpi_alloc(nlimbs);
smg_comms_c_wrappers 66 pk.e = mpi_alloc(nlimbs);
smg_comms_c_wrappers 67
smg_comms_c_wrappers 68 //generate key pair
smg_comms_c_wrappers 69 int len_n = KEY_LENGTH_OCTETS;
smg_comms_c_wrappers 70 int len_e = len_n;
smg_comms_c_wrappers 71 int len_d = len_n;
smg_comms_c_wrappers 72 int len_p = KEY_LENGTH_OCTETS / 2;
smg_comms_c_wrappers 73 int len_q = len_p;
smg_comms_c_wrappers 74 int len_u = len_p;
smg_comms_c_wrappers 75 char n[KEY_LENGTH_OCTETS];
smg_comms_c_wrappers 76 char e[KEY_LENGTH_OCTETS];
smg_comms_c_wrappers 77 char d[KEY_LENGTH_OCTETS];
smg_comms_c_wrappers 78 char p[KEY_LENGTH_OCTETS / 2];
smg_comms_c_wrappers 79 char q[KEY_LENGTH_OCTETS / 2];
smg_comms_c_wrappers 80 char u[KEY_LENGTH_OCTETS / 2];
smg_comms_c_wrappers 81 gen_rsa_octets(n, &len_n,
smg_comms_c_wrappers 82 e, &len_e,
smg_comms_c_wrappers 83 d, &len_d,
smg_comms_c_wrappers 84 p, &len_p,
smg_comms_c_wrappers 85 q, &len_q,
smg_comms_c_wrappers 86 u, &len_u);
smg_comms_c_wrappers 87
smg_comms_c_wrappers 88 //check encryption/decr works
smg_comms_c_wrappers 89 mpi_set_buffer(sk.n, n, len_n, 0);
smg_comms_c_wrappers 90 mpi_set_buffer(sk.e, e, len_e, 0);
smg_comms_c_wrappers 91 mpi_set_buffer(sk.d, d, len_d, 0);
smg_comms_c_wrappers 92 mpi_set_buffer(sk.p, p, len_p, 0);
smg_comms_c_wrappers 93 mpi_set_buffer(sk.q, q, len_q, 0);
smg_comms_c_wrappers 94 mpi_set_buffer(sk.u, u, len_u, 0);
smg_comms_c_wrappers 95
smg_comms_c_wrappers 96 mpi_set_buffer(pk.n, n, len_n, 0);
smg_comms_c_wrappers 97 mpi_set_buffer(pk.e, e, len_e, 0);
smg_comms_c_wrappers 98
smg_comms_c_wrappers 99 MPI encr = mpi_alloc(0);
smg_comms_c_wrappers 100 MPI plain = mpi_alloc(0);
smg_comms_c_wrappers 101 MPI out = mpi_alloc(0);
smg_comms_c_wrappers 102 mpi_fromstr(plain, "0x\
smg_comms_c_wrappers 103 5B6A8A0ACF4F4DB3F82EAC2D20255E4DF3E4B7C799603210766F26EF87C8980E737579\
smg_comms_c_wrappers 104 EC08E6505A51D19654C26D806BAF1B62F9C032E0B13D02AF99F7313BFCFD68DA46836E\
smg_comms_c_wrappers 105 CA529D7360948550F982C6476C054A97FD01635AB44BFBDBE2A90BE06F7984AC8534C3\
smg_comms_c_wrappers 106 28097EF92F6E78CAE0CB97");
smg_comms_c_wrappers 107 public_rsa(encr, plain, &pk);
smg_comms_c_wrappers 108 secret_rsa(out, encr, &sk);
smg_comms_c_wrappers 109
smg_comms_c_wrappers 110 if (mpi_cmp(out, plain) != 0)
smg_comms_c_wrappers 111 printf("FAIL: test_gen_rsa encr/decr failed.\n");
smg_comms_c_wrappers 112 else
smg_comms_c_wrappers 113 printf("PASS: test_gen_rsa encr/decr passed.\n");
smg_comms_c_wrappers 114
smg_comms_c_wrappers 115 //tidy up
smg_comms_c_wrappers 116 mpi_free(sk.n);
smg_comms_c_wrappers 117 mpi_free(sk.e);
smg_comms_c_wrappers 118 mpi_free(sk.d);
smg_comms_c_wrappers 119 mpi_free(sk.p);
smg_comms_c_wrappers 120 mpi_free(sk.q);
smg_comms_c_wrappers 121 mpi_free(sk.u);
smg_comms_c_wrappers 122
smg_comms_c_wrappers 123 mpi_free(pk.n);
smg_comms_c_wrappers 124 mpi_free(pk.e);
smg_comms_c_wrappers 125
smg_comms_c_wrappers 126 mpi_free(plain);
smg_comms_c_wrappers 127 mpi_free(encr);
smg_comms_c_wrappers 128 mpi_free(out);
smg_comms_c_wrappers 129 }
smg_comms_c_wrappers 130
smg_comms_c_wrappers 131 void test_rsa_octets() {
smg_comms_c_wrappers 132 int noctets = 512;
smg_comms_c_wrappers 133 RSA_public_key pk;
smg_comms_c_wrappers 134 pk.n = mpi_alloc(0);
smg_comms_c_wrappers 135 pk.e = mpi_alloc(0);
smg_comms_c_wrappers 136
smg_comms_c_wrappers 137 RSA_secret_key sk;
smg_comms_c_wrappers 138 sk.n = mpi_alloc(0);
smg_comms_c_wrappers 139 sk.e = mpi_alloc(0);
smg_comms_c_wrappers 140 sk.d = mpi_alloc(0);
smg_comms_c_wrappers 141 sk.p = mpi_alloc(0);
smg_comms_c_wrappers 142 sk.q = mpi_alloc(0);
smg_comms_c_wrappers 143 sk.u = mpi_alloc(0);
smg_comms_c_wrappers 144
smg_comms_c_wrappers 145 //key pair previously generated with EuCrypt
smg_comms_c_wrappers 146 mpi_fromstr(sk.n, "0x\
smg_comms_c_wrappers 147 CD2C025323BEA46FFF2FA8D7A9D39817EA713421F4AE03FA8120641193892A70BFECF5\
smg_comms_c_wrappers 148 83101635A432110D3DDE6339E3CC7ECC0AD91C026FCACE832DD3888A6FCA7BCE56C390\
smg_comms_c_wrappers 149 5A5AC8C7BC921DA675E4B62489B254EB34659D547D71165BC998983A81937BD251AEE1\
smg_comms_c_wrappers 150 2D985EC387D5376F5DCC5EF7EC530FBD6FD2AA7285EE1AF3335EA73163F0954F30402E\
smg_comms_c_wrappers 151 D7B374EE84A97B1849B0674B0DA0A2050BD79B71ABB1559F3A9CFDB8557DED7BC90CF2\
smg_comms_c_wrappers 152 09E8A847E9C226140845B7D03842162E7DA5DD16326CB1F71A248D841FE9076A09911F\
smg_comms_c_wrappers 153 2F4F5E3EA44EA8DE40332BF00406990BCCF61C322A03C456EF3A98B341E0BDBC1088CE\
smg_comms_c_wrappers 154 683E78510E76B72C2BCC1EE9AEDD80FFF18ABFC5923B2F36B581C25114AB2DF9F6C2B1\
smg_comms_c_wrappers 155 9481703FD19E313DCD7ACE15FA11B27D25BCE5388C180A7E21167FB87750599E1ED7C7\
smg_comms_c_wrappers 156 50F4A844E1DC2270C62D19671CF8F4C25B81E366B09FC850AE642136D204A9160AEECE\
smg_comms_c_wrappers 157 575B57378AA439E9DD46DC990288CD54BAA35EEE1C02456CD39458A6F1CBF012DCEDF4\
smg_comms_c_wrappers 158 27CCF3F3F53645658FC49C9C9D7F2856DB571D92B967AB5845514E0054DDB49099F5DD\
smg_comms_c_wrappers 159 04A6F6F5C5CE642276834B932881AEB648D1F25E9223971F56E249EF40CF7D80F22621\
smg_comms_c_wrappers 160 CDD0260E9E7D23746960ADB52CF2987584FB1DE95A69A39E5CB12B76E0F5C1A0529C0C\
smg_comms_c_wrappers 161 065D2E35720810F7C7983180B9A9EA0E00C11B79DC3D");
smg_comms_c_wrappers 162
smg_comms_c_wrappers 163 mpi_fromstr(sk.e, "0x\
smg_comms_c_wrappers 164 DD4856B4EE3D099A8604AE392D8EFEC094CDF01546A28BE87CB484F999E8E75CDFCD01\
smg_comms_c_wrappers 165 D04D455A6A9254C60BD28C0B03611FC3E751CC27EF768C0B401C4FD2B27C092834A6F2\
smg_comms_c_wrappers 166 49A145C4EDC47A3B3D363EC352462C945334D160AF9AA72202862912493AC6190AA3A6\
smg_comms_c_wrappers 167 149D4D8B9996BA7927D3D0D2AD00D30FD630CF464E6CAF9CF49355B9A70E05DB7AE915\
smg_comms_c_wrappers 168 F9F602772F8D11E5FCDFC7709210F248052615967090CC1F43D410C83724AA5912B2F0\
smg_comms_c_wrappers 169 52E6B39449A89A97C79C92DC8CB8DEEFCF248C1E1D2FC5BFE85165ECA31839CAA9CEB3\
smg_comms_c_wrappers 170 3A92EBDC0EB3BAC0F810938BB173C7DA21DCBB2220D44CBA0FD40A2C868FC93AC5243E\
smg_comms_c_wrappers 171 C137C27B0A76D65634EBB3");
smg_comms_c_wrappers 172
smg_comms_c_wrappers 173 mpi_fromstr(sk.d, "0x\
smg_comms_c_wrappers 174 7C8A6FA1199D99DCA45E9BDF567CA49D02B237340D7E999150BC4883AE29DEC5158521\
smg_comms_c_wrappers 175 B338F35DC883792356BDDBB3C8B3030A6DD4C6522599A3254E751F9BA1CB1061C5633C\
smg_comms_c_wrappers 176 81BBFACF6FCD64502614102DFED3F3FA284066C342D5E00953B415915331E30812E5FB\
smg_comms_c_wrappers 177 CD6680ADCCDEE40B8376A3A225F2E160EA59C7566804526D73BB660A648A3EF9802313\
smg_comms_c_wrappers 178 B2F841E8458B2AAACE7AACF31083E8F3F630298138393BC88BBD7D4AA4334949651D25\
smg_comms_c_wrappers 179 365B10DBF4A4A08E20A6CC74BFDD37C1C38E2ADC2A283DF06590DF06B46F67F6ACA67F\
smg_comms_c_wrappers 180 AC464C795261659A2F9558802D0BBAA05FD1E1AF2CDC70654723DF7EFAEA148B8CDBEB\
smg_comms_c_wrappers 181 C89EA2320AB9BBB1BC4311475DF3D91446F02EF192368DFEBAC598CCFD4407DEC58FDC\
smg_comms_c_wrappers 182 1A94CCDD6E5FBA9C52164ACEA8AEE633E557BCCEACB7A1AF656C379482D784A120A725\
smg_comms_c_wrappers 183 32F9B2B35173D505F21D5AD4CB9511BC836DC923730B70291B70290A216CA3B21CFF79\
smg_comms_c_wrappers 184 E895C35F4F7AF80E1BD9ED2773BD26919A76E4298D169160593E0335BE2A2A2D2E8516\
smg_comms_c_wrappers 185 948F657E1B1260E18808A9D463C108535FB60B3B28F711C81E5DE24F40214134A53CE5\
smg_comms_c_wrappers 186 9A952C8970A1D771EBEFFA2F4359DCF157995B3F1950DE3C6EC41B7FF837148F55F323\
smg_comms_c_wrappers 187 372AF3F20CE8B8038E750C23D8F5041FA951327859B0E47483F0A47103EF808C72C251\
smg_comms_c_wrappers 188 006FA526245291C8C84C12D2EF63FB2301EA3EEDA42B");
smg_comms_c_wrappers 189
smg_comms_c_wrappers 190 mpi_fromstr(sk.p, "0x\
smg_comms_c_wrappers 191 E236732452039C14EC1D3B8095BDDCFB7625CE27B1EA5394CF4ED09D3CEECAA4FC0BF6\
smg_comms_c_wrappers 192 2F7CE975E0C8929CE84B0259D773EA038396479BF15DA065BA70E549B248D77B4B23ED\
smg_comms_c_wrappers 193 A267308510DBEE2FD44E35D880EE7CFB81E0646AA8630165BD8988C3A8776D9E704C20\
smg_comms_c_wrappers 194 AA25CA0A3C32F27F592D5FD363B04DD57D8C61FFDCDFCCC59E2913DE0EE47769180340\
smg_comms_c_wrappers 195 E1EA5A803AA2301A010FF553A380F002601F0853FCACDB82D76FE2FACBCD6E5F294439\
smg_comms_c_wrappers 196 0799EA5AE9D7880D4E1D4AE146DC1D4E8495B9DD30E57E883923C5FC26682B7142D35C\
smg_comms_c_wrappers 197 D8A0FC561FE725A6CF419B15341F40FE0C31132CBD81DD8E50697BD1EBFFA16B522E16\
smg_comms_c_wrappers 198 F5B49A03B707218C7DA60B");
smg_comms_c_wrappers 199
smg_comms_c_wrappers 200 mpi_fromstr(sk.q, "0x\
smg_comms_c_wrappers 201 E830482A3C4F5C3A7E59C10FF8BA760DB1C6D55880B796FFDA4A82E0B60E974E81D04B\
smg_comms_c_wrappers 202 2A4AD417823EBFB4E8EFB13782943562B19B6C4A680E3BA0C8E37B5023470F4F1AC1F8\
smg_comms_c_wrappers 203 A0B10672EF75CD58BCD45E6B14503B8A6A70AFE79F6201AF56E7364A1C742BE1453FD2\
smg_comms_c_wrappers 204 24FDC9D66522EAF4466A084BCB9E46D455A2946E94CBF028770F38D0B741C2CC59308F\
smg_comms_c_wrappers 205 71D8C2B4B9C928E0AE8D68DEB48A3E9EFD84A10301EBD55F8221CA32FC567B306B2A8E\
smg_comms_c_wrappers 206 116350AFB995859FDF4378C5CFD06901494E8CFA5D8FAC564D6531FA8A2E4761F5EFBA\
smg_comms_c_wrappers 207 F78750B6F4662BE9EA4C2FAD67AF73EEB36B41FC15CB678810C19A51DF23555695C4C1\
smg_comms_c_wrappers 208 546F3FACA39CAA7BB8DBD7");
smg_comms_c_wrappers 209
smg_comms_c_wrappers 210 mpi_fromstr(sk.u, "0x\
smg_comms_c_wrappers 211 846232322775C1CD7D5569DC59E2F3E61A885AE2E9C4A4F8CB3ACBE8C3A5441E5FE348\
smg_comms_c_wrappers 212 A2A8AC9C2998FBF282222BF508AA1ECF66A76AEDD2D9C97028BFD3F6CA0542E38A5312\
smg_comms_c_wrappers 213 603C70B95650CE73F80FDD729988FBDB5595A5BF8A007EA34E54994A697906CE56354C\
smg_comms_c_wrappers 214 E00DF10EB711DEC274A62494E3D350D88736CF67A477FB600AC9F1D6580727585092BF\
smg_comms_c_wrappers 215 5EBC092CC4D6CF75769051033A1197103BE269942F372168A53771746FBA18ED6972D5\
smg_comms_c_wrappers 216 0B935A9B1D6B5B3DD50CD89A27FE93C10924E9103FACF7B4C5724A046C3D3B50CC1C78\
smg_comms_c_wrappers 217 5F5C8E00DBE1D6561F120F5294C170914BC10F978ED4356EED67A9F3A60D70AFE540FC\
smg_comms_c_wrappers 218 5373CBAE3D0A7FD1C87273");
smg_comms_c_wrappers 219
smg_comms_c_wrappers 220 // copy the public key components
smg_comms_c_wrappers 221 pk.n = mpi_copy( sk.n );
smg_comms_c_wrappers 222 pk.e = mpi_copy( sk.e );
smg_comms_c_wrappers 223
smg_comms_c_wrappers 224 // some plain text message
smg_comms_c_wrappers 225 MPI plain = mpi_alloc(0);
smg_comms_c_wrappers 226 mpi_fromstr(plain, "0x\
smg_comms_c_wrappers 227 5B6A8A0ACF4F4DB3F82EAC2D20255E4DF3E4B7C799603210766F26EF87C8980E737579\
smg_comms_c_wrappers 228 EC08E6505A51D19654C26D806BAF1B62F9C032E0B13D02AF99F7313BFCFD68DA46836E\
smg_comms_c_wrappers 229 CA529D7360948550F982C6476C054A97FD01635AB44BFBDBE2A90BE06F7984AC8534C3\
smg_comms_c_wrappers 230 28097EF92F6E78CAE0CB97");
smg_comms_c_wrappers 231
smg_comms_c_wrappers 232 // expected encrypted MPI (via rsa.c directly)
smg_comms_c_wrappers 233 MPI encr = mpi_alloc(0);
smg_comms_c_wrappers 234 public_rsa( encr, plain, &pk);
smg_comms_c_wrappers 235 MPI decr = mpi_alloc(0);
smg_comms_c_wrappers 236 secret_rsa( decr, encr, &sk);
smg_comms_c_wrappers 237 if (mpi_cmp(decr, plain) != 0)
smg_comms_c_wrappers 238 printf("FAIL: decrypted != plain in test_rsa_octets (MPI call)\n");
smg_comms_c_wrappers 239
smg_comms_c_wrappers 240 //allocate the char arrays for _octets rsa
smg_comms_c_wrappers 241 int len_n = noctets;
smg_comms_c_wrappers 242 int len_e = len_n;
smg_comms_c_wrappers 243 int len_d = len_n;
smg_comms_c_wrappers 244 int len_p = noctets / 2;
smg_comms_c_wrappers 245 int len_q = len_p;
smg_comms_c_wrappers 246 int len_u = len_p;
smg_comms_c_wrappers 247 char n[noctets];
smg_comms_c_wrappers 248 char e[noctets];
smg_comms_c_wrappers 249 char d[noctets];
smg_comms_c_wrappers 250 char p[noctets / 2];
smg_comms_c_wrappers 251 char q[noctets / 2];
smg_comms_c_wrappers 252 char u[noctets / 2];
smg_comms_c_wrappers 253
smg_comms_c_wrappers 254 //copy the key components into char arrays
smg_comms_c_wrappers 255 mpi_to_octets(n, &len_n, sk.n);
smg_comms_c_wrappers 256 mpi_to_octets(e, &len_e, sk.e);
smg_comms_c_wrappers 257 mpi_to_octets(d, &len_d, sk.d);
smg_comms_c_wrappers 258 mpi_to_octets(p, &len_p, sk.p);
smg_comms_c_wrappers 259 mpi_to_octets(q, &len_q, sk.q);
smg_comms_c_wrappers 260 mpi_to_octets(u, &len_u, sk.u);
smg_comms_c_wrappers 261
smg_comms_c_wrappers 262 //call _octets rsa and check results
smg_comms_c_wrappers 263 int len_encr = noctets;
smg_comms_c_wrappers 264 int len_decr = noctets;
smg_comms_c_wrappers 265 int len_plain = noctets;
smg_comms_c_wrappers 266 char plain_o[noctets];
smg_comms_c_wrappers 267 char encr_o[noctets];
smg_comms_c_wrappers 268 char expected_encr_o[noctets];
smg_comms_c_wrappers 269 char decr_o[noctets];
smg_comms_c_wrappers 270 char expected_decr_o[noctets];
smg_comms_c_wrappers 271
smg_comms_c_wrappers 272 mpi_to_octets(plain_o, &len_plain, plain);
smg_comms_c_wrappers 273 mpi_to_octets(expected_encr_o, &len_encr, encr);
smg_comms_c_wrappers 274 mpi_to_octets(expected_decr_o, &len_decr, decr);
smg_comms_c_wrappers 275 len_decr = noctets;
smg_comms_c_wrappers 276
smg_comms_c_wrappers 277 int len;
smg_comms_c_wrappers 278 len = public_rsa_octets( encr_o, len_encr, plain_o, len_plain,
smg_comms_c_wrappers 279 n, len_n, e, len_e);
smg_comms_c_wrappers 280 if (len != len_encr)
smg_comms_c_wrappers 281 printf("FAIL: actual len of encr is %d; expected %d\n", len, len_encr);
smg_comms_c_wrappers 282 else
smg_comms_c_wrappers 283 printf("PASS: actual len of encr matches expected: %d\n", len);
smg_comms_c_wrappers 284 int errors= 0;
smg_comms_c_wrappers 285 int i;
smg_comms_c_wrappers 286 for (i=0;i<len;i++)
smg_comms_c_wrappers 287 if (encr_o[i] != expected_encr_o[i])
smg_comms_c_wrappers 288 errors = errors + 1;
smg_comms_c_wrappers 289 if (errors>0)
smg_comms_c_wrappers 290 printf("FAIL: found %d errors in public_rsa_octets output\n", errors);
smg_comms_c_wrappers 291 else
smg_comms_c_wrappers 292 printf("PASS: no errors found in public_rsa_octets output\n");
smg_comms_c_wrappers 293
smg_comms_c_wrappers 294 len_encr = len;
smg_comms_c_wrappers 295 len = private_rsa_octets( decr_o, len_decr, encr_o, len_encr,
smg_comms_c_wrappers 296 n, len_n, e, len_e,
smg_comms_c_wrappers 297 d, len_d, p, len_p,
smg_comms_c_wrappers 298 q, len_q, u, len_u);
smg_comms_c_wrappers 299 if (len != len_plain)
smg_comms_c_wrappers 300 printf("FAIL: actual len of decr is %d; expected %d\n", len, len_plain);
smg_comms_c_wrappers 301 else
smg_comms_c_wrappers 302 printf("PASS: actual len of decr matches expected: %d\n", len);
smg_comms_c_wrappers 303
smg_comms_c_wrappers 304 errors = 0;
smg_comms_c_wrappers 305 for (i=0;i<len;i++)
smg_comms_c_wrappers 306 if (decr_o[i] != expected_decr_o[i])
smg_comms_c_wrappers 307 errors = errors + 1;
smg_comms_c_wrappers 308 if (errors>0)
smg_comms_c_wrappers 309 printf("FAIL: found %d errors in private_rsa_octets output\n", errors);
smg_comms_c_wrappers 310 else printf("PASS: no errors found in private_rsa_octets_output\n");
smg_comms_c_wrappers 311
smg_comms_c_wrappers 312 //tidy up
smg_comms_c_wrappers 313 mpi_free(sk.n);
smg_comms_c_wrappers 314 mpi_free(sk.e);
smg_comms_c_wrappers 315 mpi_free(sk.d);
smg_comms_c_wrappers 316 mpi_free(sk.p);
smg_comms_c_wrappers 317 mpi_free(sk.q);
smg_comms_c_wrappers 318 mpi_free(sk.u);
smg_comms_c_wrappers 319
smg_comms_c_wrappers 320 mpi_free(pk.n);
smg_comms_c_wrappers 321 mpi_free(pk.e);
smg_comms_c_wrappers 322
smg_comms_c_wrappers 323 mpi_free(plain);
smg_comms_c_wrappers 324 mpi_free(encr);
smg_comms_c_wrappers 325 mpi_free(decr);
smg_comms_c_wrappers 326 }
smg_comms_c_wrappers 327
smg_comms_c_wrappers 328 int main(int ac, char **av) {
smg_comms_c_wrappers 329 if (ac < 2) {
smg_comms_c_wrappers 330 printf("Usage: %s testID\n", av[0]);
smg_comms_c_wrappers 331 return -1;
smg_comms_c_wrappers 332 }
smg_comms_c_wrappers 333
smg_comms_c_wrappers 334 int id = atoi(av[1]);
smg_comms_c_wrappers 335 switch (id) {
smg_comms_c_wrappers 336 case 1:
smg_comms_c_wrappers 337 test_mpi_cmp();
smg_comms_c_wrappers 338 break;
smg_comms_c_wrappers 339 case 2:
smg_comms_c_wrappers 340 test_gen_rsa_octets();
smg_comms_c_wrappers 341 break;
smg_comms_c_wrappers 342 case 3:
smg_comms_c_wrappers 343 test_rsa_octets();
smg_comms_c_wrappers 344 break;
smg_comms_c_wrappers 345 default:
smg_comms_c_wrappers 346 printf("Current test ids:\n");
smg_comms_c_wrappers 347 printf("1 test of mpi_cmp_octets\n");
smg_comms_c_wrappers 348 printf("2 test of gen_rsa_octets (can be very SLOW!)\n");
smg_comms_c_wrappers 349 printf("3 test of rsa_octets (can take a few minutes)\n");
smg_comms_c_wrappers 350 }
smg_comms_c_wrappers 351 return 0;
smg_comms_c_wrappers 352 }