1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#include "test_key.h"
#include "test_util.h"
#include "ntru.h"
#include "poly.h"
uint8_t test_export_import() {
#ifndef NTRU_AVOID_HAMMING_WT_PATENT
NtruEncParams param_arr[] = {EES439EP1, EES1087EP2};
#else
NtruEncParams param_arr[] = {EES1087EP2};
#endif /* NTRU_AVOID_HAMMING_WT_PATENT */
uint8_t valid = 1;
uint8_t i;
for (i=0; i<sizeof(param_arr)/sizeof(param_arr[0]); i++) {
NtruEncParams params = param_arr[i];
NtruEncKeyPair kp;
NtruRandContext rand_ctx;
NtruRandGen rng = NTRU_RNG_DEFAULT;
ntru_rand_init(&rand_ctx, &rng);
ntru_gen_key_pair(¶ms, &kp, &rand_ctx);
valid &= ntru_rand_release(&rand_ctx) == NTRU_SUCCESS;
/* test public key */
uint8_t pub_arr[ntru_pub_len(¶ms)];
ntru_export_pub(&kp.pub, pub_arr);
NtruEncPubKey pub;
ntru_import_pub(pub_arr, &pub);
valid &= ntru_equals_int(&kp.pub.h, &pub.h);
/* test private key */
uint8_t priv_arr[ntru_priv_len(¶ms)];
uint16_t priv_len = ntru_export_priv(&kp.priv, priv_arr);
valid &= priv_len == ntru_priv_len(¶ms);
NtruEncPrivKey priv;
ntru_import_priv(priv_arr, &priv);
NtruIntPoly t_int1, t_int2;
ntru_priv_to_int(&priv.t, &t_int1, params.q);
ntru_priv_to_int(&kp.priv.t, &t_int2, params.q);
valid &= ntru_equals_int(&t_int1, &t_int2);
}
return valid;
}
/* tests ntru_params_from_priv_key() and ntru_params_from_key_pair() */
uint8_t test_params_from_key() {
NtruEncParams param_arr[] = ALL_PARAM_SETS;
uint8_t valid = 1;
uint8_t i;
for (i=0; i<sizeof(param_arr)/sizeof(param_arr[0]); i++) {
NtruEncParams params = param_arr[i];
NtruRandContext rand_ctx;
NtruRandGen rng = NTRU_RNG_DEFAULT;
ntru_rand_init(&rand_ctx, &rng);
NtruEncKeyPair kp;
valid &= ntru_gen_key_pair(¶ms, &kp, &rand_ctx) == NTRU_SUCCESS;
valid &= ntru_rand_release(&rand_ctx) == NTRU_SUCCESS;
NtruEncParams params2;
valid &= ntru_params_from_priv_key(&kp.priv, ¶ms2) == NTRU_SUCCESS;
valid &= equals_params(¶ms, ¶ms2);
valid &= ntru_params_from_key_pair(&kp, ¶ms2) == NTRU_SUCCESS;
valid &= equals_params(¶ms, ¶ms2);
}
for (i=0; i<sizeof(param_arr)/sizeof(param_arr[0]); i++) {
NtruEncParams params1 = param_arr[i];
uint8_t j;
for (j=0; j<sizeof(param_arr)/sizeof(param_arr[0]); j++) {
NtruEncParams params2 = param_arr[j];
valid &= equals_params(¶ms1, ¶ms2) == (i==j);
}
}
return valid;
}
uint8_t test_key() {
uint8_t valid = test_export_import();
valid &= test_params_from_key();
print_result("test_key", valid);
return valid;
}
|