void BroadcastKEM_using_indicies(global_broadcast_params_t gbp, broadcast_system_t sys, ct_t myct, int *in_recip, int num_recip, element_t key) { Gen_encr_prod_from_indicies(gbp, sys, in_recip, num_recip); if(DEBUG && 0) { printf("index product = "); element_out_str(stdout, 0, sys->encr_prod); printf("\n"); } BroadcastKEM_using_product(gbp, sys, myct, key); }
void BroadcastKEM_using_bitvec(global_broadcast_params_t gbp, broadcast_system_t sys, char *recip, ct_t myct, element_t key) { Gen_encr_prod_from_bitvec(gbp, sys, recip); if(DEBUG && 0) { printf("bitvec product = "); element_out_str(stdout, 0, sys->encr_prod); printf("\n"); } BroadcastKEM_using_product(gbp, sys, myct, key); }
int BCEEncrypt(byte *sys_params_path, byte *CT_C0_out, byte *CT_C1_out, byte *symmetric_key_out) { global_broadcast_params_t gbs; broadcast_system_t sys; ct_t shared_CT; element_t symmetric_key; int retlen; if (sys_params_path == NULL) return 1; if (CT_C0_out == NULL) return 2; if (CT_C1_out == NULL) return 3; if (symmetric_key_out == NULL) return 4; LoadParams((char *) sys_params_path, &gbs, &sys); shared_CT = (ct_t) pbc_malloc(sizeof(struct ciphertext_s)); BroadcastKEM_using_product(gbs, sys, shared_CT, symmetric_key); retlen = element_to_bytes(CT_C0_out, shared_CT->C0); if (retlen != CT_C0_LENGTH) return 5; retlen = element_to_bytes(CT_C1_out, shared_CT->C1); if (retlen != CT_C1_LENGTH) return 6; retlen = element_to_bytes(symmetric_key_out, symmetric_key); if (retlen != SYMMETRIC_KEY_LENGTH) return 7; element_random(symmetric_key); element_clear(symmetric_key); FreeCT(shared_CT); pbc_free(shared_CT); FreeBCS(sys); pbc_free(sys); FreeGBP(gbs); pbc_free(gbs); return 0; }