我是靠谱客的博主 顺利玫瑰,最近开发中收集的这篇文章主要介绍ABE-使用PBC库,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

#include <pbc/pbc.h>
#include <pbc/pbc_test.h>
#include <stdio.h>
#include <math.h>
#include <gmp.h>
#include <string.h>


typedef struct {
  field_t Fq, Fq2, Eq;
  int exp2, exp1;
  int sign1;
} *a_pairing_data_ptr;

typedef struct {
  field_ptr field; 
  element_t a, b;  
  mpz_ptr cofac;
  element_t gen_no_cofac;
  element_t gen;
  mpz_ptr quotient_cmp;
} *curve_data_ptr;
void messageToValue(void *message, mpz_t message_mpz, char *m){
  char* c = NULL;
  unsigned int value = 0, size = 0;
  c = message;

  while(*c != ''){
  	value = (unsigned int) *c;
	mpz_mul_ui(message_mpz, message_mpz, 256);
  	mpz_add_ui(message_mpz, message_mpz, value);
	c += 1;
  }

  mpz_get_str(m, 10, message_mpz);

}

void valueToMessage(char *message, mpz_t message_mpz){
  char *c = NULL;
  c = (char*) message_mpz->_mp_d;
  unsigned int count = 0;

  while(*(c + count) != ''){
	count += 1;
  }
  message[count] = '';
  while(count > 0){
  	count -= 1;
  	message[count] = *c;
	c += 1;
  }

}
int main(int argc, char **argv) {
  pairing_t pairing;
  double t0, t1;
  element_t g, h, f, beta, beta_invert, r, OSK, alpha, OPK, s, a, A, cd_pair,
		C, C_bar, D, C_temp, message_ele;
  char raw_message[2048] = "Secret message.";
  char message_dec[2048], message[2048];
  mpz_t message_mpz;

  t0 = pbc_get_time(); 
  pbc_demo_pairing_init(pairing, argc, argv);
  if (!pairing_is_symmetric(pairing)) pbc_die("pairing must be symmetric");

  mpz_init(message_mpz);
  element_init_Zr(beta, pairing);
  element_init_Zr(beta_invert, pairing);
  element_init_Zr(r, pairing);
  element_init_Zr(alpha, pairing);
  element_init_Zr(s, pairing);
  element_init_Zr(a, pairing);
  element_init_G1(g, pairing);
  element_init_G1(h, pairing);
  element_init_G1(f, pairing);
  element_init_G1(OSK, pairing);
  element_init_G1(D, pairing);
  element_init_G1(C, pairing);
  element_init_GT(OPK, pairing);
  element_init_GT(C_bar, pairing);
  element_init_GT(A, pairing);
  element_init_GT(cd_pair, pairing);
  element_init_GT(C_temp, pairing);
  element_init_GT(message_ele, pairing);


  element_set(g, ((curve_data_ptr)((a_pairing_data_ptr) pairing->data)->Eq->data)->gen);

  element_random(beta);
  element_random(alpha);
  element_random(s);
  element_random(a);
  element_random(r);

  element_invert(beta_invert, beta);
  element_pow_zn(h, g, beta);
  element_pow_zn(f, g, beta_invert);

  element_pow_zn(OSK, g, alpha);

  element_pairing(OPK, g, g);
  element_pow_zn(OPK, OPK, alpha);

  element_pow_zn(C, h, s);

  printf("Before encryption. The raw message is:n");
  puts(raw_message);

  messageToValue(raw_message, message_mpz, message_dec);
  strcpy(message, "[");
  strcat(message, message_dec);
  strcat(message, ",0]");
  element_set_str(message_ele, message, 10);

  element_pow_zn(C_temp, OPK, s);
  element_mul(C_bar, C_temp, message_ele);



  element_pow_zn(D, g, r);
  element_pow_zn(D, D, a);
  element_mul(D, D, OSK);
  element_pow_zn(D, D, beta_invert);

  element_pairing(A, g, g);
  element_pow_zn(A, A, r);
  element_pow_zn(A, A, a);
  element_pow_zn(A, A, s);

  element_pairing(cd_pair, C, D);
  element_div(cd_pair, cd_pair, A);
  element_div(cd_pair, C_bar, cd_pair);
  element_to_mpz(message_mpz, cd_pair);
  valueToMessage(message, message_mpz);
  printf("Decrypt successfully. The message is:n");
  puts(message);
  t1 = pbc_get_time();
  printf("Time cost %fsn", t1-t0);

  element_clear(g);
  element_clear(h);
  element_clear(f);
  element_clear(beta);
  element_clear(beta_invert);
  element_clear(r);
  element_clear(OSK);
  element_clear(alpha);
  element_clear(OPK);
  element_clear(s);
  element_clear(a);
  element_clear(A);
  element_clear(cd_pair);
  element_clear(C);
  element_clear(C_bar);
  element_clear(D);
  element_clear(C_temp);
  element_clear(message_ele);
  mpz_clear(message_mpz);
}

 运行截图

翻译自https://github.com/s29zhu/PBC


最后

以上就是顺利玫瑰为你收集整理的ABE-使用PBC库的全部内容,希望文章能够帮你解决ABE-使用PBC库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部