X-Git-Url: https://git.siccegge.de//index.cgi?p=software%2FDIPE.git;a=blobdiff_plain;f=src%2FDIPE.cxx;h=5b39bb7a7b7c0d5cdbcad7d8d7e4a9c5a9b3ee46;hp=321372dccd74d913c61f365b5e78af4133e3928b;hb=8fef6fe05ce3e9c0f6d29bb318b90b72a71db51f;hpb=006e87bc592a4e6eabea4f7f9caab8e218ebfd85 diff --git a/src/DIPE.cxx b/src/DIPE.cxx index 321372d..5b39bb7 100644 --- a/src/DIPE.cxx +++ b/src/DIPE.cxx @@ -37,7 +37,7 @@ namespace { size_t dipe_h_length(element_t elem, size_t dimension) { return 16 /*cid*/ + dimension * element_length_in_bytes(elem); } - + void dipe_generate_h(char* cid, element_t* y, size_t dimension, unsigned char* result) { memcpy(result, cid, 16); unsigned char* next_element = result+16; @@ -52,13 +52,13 @@ void dipe_init(FILE* configfp, dipe_param_t* param) { char buffer[2<<16]; (*param) = (dipe_param_t)malloc(sizeof(dipe_param)); fread(buffer, 1, 2<<16, configfp); - + pairing_init_set_buf((*param)->pairing, buffer, 2<<16); element_init_G1((*param)->g1, (*param)->pairing); element_init_G2((*param)->g2, (*param)->pairing); element_init_GT((*param)->gt, (*param)->pairing); - + element_random((*param)->g1); element_random((*param)->g2); pairing_apply((*param)->gt, (*param)->g1, (*param)->g2, (*param)->pairing); @@ -85,7 +85,7 @@ void dipe_master_keygen(dipe_param_t param, size_t dimension, dipe_master_public element_init_Zr((*sk)->k[i], param->pairing); element_init_G1((*pk)->k[i], param->pairing); element_random((*sk)->k[i]); - element_pow_zn((*pk)->k[i], param->gt, (*sk)->k[i]); + element_pow_zn((*pk)->k[i], param->g1, (*sk)->k[i]); } } @@ -93,24 +93,24 @@ void dipe_keygen(dipe_param_t param, dipe_master_secretkey_t msk, char* cid, ele *sk = (dipe_secretkey_t)malloc(sizeof(dipe_secretkey)); (*sk)->dimension = msk->dimension; element_init_G2((*sk)->d, param->pairing); - + size_t hash_input_length = dipe_h_length(y[0], msk->dimension); unsigned char hash_input[hash_input_length]; element_t h; element_init_G2(h, param->pairing); - + dipe_generate_h(cid, y, msk->dimension, hash_input); element_from_hash(h, hash_input, hash_input_length); element_t innerp; element_t tmp; - + element_init_Zr(innerp, param->pairing); element_init_Zr(tmp, param->pairing); - element_set1(innerp); + element_set0(innerp); element_from_hash(h, hash_input, hash_input_length); - + for (size_t i = 0; i < msk->dimension; ++i) { element_mul(tmp, y[i], msk->k[i]); element_add(innerp, innerp, tmp); @@ -121,7 +121,7 @@ void dipe_keygen(dipe_param_t param, dipe_master_secretkey_t msk, char* cid, ele element_pow_zn(h, h, innerp); element_pow_zn(a2, param->g2, msk->a); element_mul((*sk)->d, a2, h); - + element_clear(h); element_clear(innerp); element_clear(tmp); @@ -130,8 +130,8 @@ void dipe_keygen(dipe_param_t param, dipe_master_secretkey_t msk, char* cid, ele void dipe_encrypt(dipe_param_t param, dipe_master_publickey_t mpk, element_t* x, element_t ptxt, dipe_ctxt_t* ctxt) { *ctxt = (dipe_ctxt_t)malloc(sizeof(dipe_ctxt)); - (*ctxt)->dimension = mpk->dimension; - + (*ctxt)->dimension = mpk->dimension; + element_t r; element_t s; element_init_Zr(r, param->pairing); @@ -142,19 +142,19 @@ void dipe_encrypt(dipe_param_t param, dipe_master_publickey_t mpk, element_t* x, element_init_G1((*ctxt)->s, param->pairing); element_pow_zn((*ctxt)->s, param->g1, s); - + element_t k1; element_t x1; element_init_G1(k1, param->pairing); element_init_G1(x1, param->pairing); - + (*ctxt)->cx = (element_t*)calloc(mpk->dimension, sizeof(element_t)); for (size_t i = 0; i < mpk->dimension; ++i){ element_pow_zn(x1, param->g1, x[i]); element_pow_zn(x1, x1, r); element_pow_zn(k1, mpk->k[i], s); - + element_init_G1((*ctxt)->cx[i], param->pairing); element_mul((*ctxt)->cx[i], k1, x1); } @@ -178,10 +178,10 @@ void dipe_decrypt(dipe_param_t param, dipe_secretkey_t sk, char* cid, element_t* unsigned char hash_input[hash_input_length]; element_t h; element_init_G2(h, param->pairing); - + dipe_generate_h(cid, y, sk->dimension, hash_input); element_from_hash(h, hash_input, hash_input_length); - + element_t tmp; element_t innerp; element_t hy; @@ -189,7 +189,7 @@ void dipe_decrypt(dipe_param_t param, dipe_secretkey_t sk, char* cid, element_t* element_init_GT(innerp, param->pairing); element_init_G2(hy, param->pairing); - element_set1(innerp); + element_set1(innerp); for (size_t i = 0; i < sk->dimension; ++i) { element_pow_zn(hy, h, y[i]); pairing_apply(tmp, ctxt->cx[i], hy, param->pairing);