double do_rand_gen(int size_input, mpz_t *vec, mpz_t prime) { Measurement m; m.begin_with_init(); crypto->get_random_vec_priv(size_input, vec, prime); m.end(); return m.get_ru_elapsed_time(); }
double do_decrypt(int size_input, mpz_t *plain, mpz_t *cipher, int prime_size, mpz_t prime) { Measurement m; m.begin_with_init(); for (int i=0; i<size_input; i++) crypto->elgamal_dec(plain[i], cipher[2*i], cipher[2*i+1]); m.end(); return m.get_ru_elapsed_time(); }
// ======== cost of ciphertext operations ====== double do_encrypt(int size_input, mpz_t *plain, mpz_t *cipher, int prime_size, mpz_t prime) { Measurement m; crypto->get_random_vec_priv(size_input, plain, prime); m.begin_with_init(); for (int i=0; i<size_input; i++) crypto->elgamal_enc(cipher[2*i], cipher[2*i+1], plain[i]); m.end(); return m.get_ru_elapsed_time(); }
double do_regular_ciphermul(int size_input, mpz_t *plain, mpz_t *cipher, int prime_size, mpz_t prime) { mpz_t out1, out2; alloc_init_scalar(out1); alloc_init_scalar(out2); Measurement m; m.begin_with_init(); crypto->dot_product_regular_enc(size_input, cipher, plain, out1, out2); m.end(); clear_scalar(out1); clear_scalar(out2); return m.get_ru_elapsed_time(); }
double do_div(int size_input, mpz_t *vec1, mpz_t *vec2, mpz_t *vec3, int operand_size1, int operand_size2, mpz_t prime) { Measurement m; crypto->get_random_vec_priv(size_input, vec1, operand_size1); crypto->get_random_vec_priv(size_input, vec2, operand_size2); m.begin_with_init(); for (int i=0; i<size_input; i++) { mpz_invert(vec3[i], vec2[i], prime); mpz_mul(vec3[i], vec3[i], vec1[i]); mpz_mod(vec3[i], vec3[i], prime); } m.end(); return m.get_ru_elapsed_time(); }
// ======== cost of plaintext operations ========= double do_field_mult(int size_input, mpz_t *vec1, mpz_t *vec2, mpz_t *vec3, mpz_t prime) { Measurement m; crypto->get_random_vec_priv(size_input, vec1, prime); crypto->get_random_vec_priv(size_input, vec2, prime); m.begin_with_init(); for (int i=0; i<size_input; i++) { mpz_mul(vec3[i], vec1[i], vec2[i]); mpz_mod(vec3[i], vec3[i], prime); } for (int i=0; i<size_input; i++) { mpz_add(vec3[i], vec1[i], vec2[i]); mpz_mod(vec3[i], vec3[i], prime); } m.end(); return m.get_ru_elapsed_time(); }