PBC库的安装与使用_Windows_Ubuntu

安装PBC或pypbc(ubuntu)

Ubuntu安装PBC(Pairing-Based Cryptography) ——Python版本(pypbc) - KoalaZB - 博客园 (cnblogs.com)

安装pip3

(36条消息) Ubuntu下pip3的安装、升级、卸载_tiweeny的博客-CSDN博客_卸载pip3

最后只需要

sudo python3 setup.py install

不需要 “sudo pip3 install pypbc”这条命名

Windows Terminal+SSH连接Ubuntu虚拟机,可以先用普通用户登录,需要root,再切换root

保证虚拟机和物理机在同一网段

(36条消息) ubuntu开启SSH服务远程登录_jackghq的博客-CSDN博客_ubuntu开启ssh服务

by6TaV.png

安装pbc+vc6.0(Windows)

Windows 10平台安装PBC库教程_fuliya005的博客-程序员宝宝 - 程序员宝宝 (cxybb.com)

Ubuntu编译运行bls短签名

PBC Library Manual 0.5.14 (stanford.edu)

注意参数

by0q8s.png

标准输入,将不同配对类型的参数输入给程序

byBOFe.png

byBfJJ.png

更多输入参数的方法,参见《基于配对的密码学》李发根 吴威峰 著 P29

配对计算并检测是否相等 参考:《基于配对的密码学》李发根 吴威峰 著 P21、22

#include "pbc.h"

int main(void)
{
    pairing_t pairing; //声明一个配对类型的变量pairing
    element_t P,Q,a,b,c,x,y,temp1,temp2; //声明一系列元素类型的变量
    a_param_input(pairing); //将配对变量pairing初始化为类型A的配对
    element_init_G1(P,pairing); //将变量P初始化为群G1中的元素
    element_init_G1(temp1,pairing); //将变量temp1初始化为群G1中的元素
    element_init_G2(Q,pairing); //将变量Q初始化为群G2中的元素
    element_init_G2(temp2,pairing); //将变量temp2初始化为群G2中的元素 
    element_init_GT(x,pairing); //将变量x初始化为群GT中的元素
    element_init_GT(y,pairing); //将变量y初始化为群GT中的元素
    element_init_Zr(a,pairing);
    element_init_Zr(b,pairing);
    element_init_Zr(c,pairing); //将变量a,b,c初始化为环Zr中的元素,环Zr是配对类型的变量pairing中的代数结构,r是群G1,G2,GT的阶
    element_random(P); //随机选取群G1中的一个元素并赋给变量P
    element_random(Q); //随机选取群G2中的一个元素并赋给变量Q
    element_random(a); //随机选取环Zr中的一个元素并赋给变量a
    element_random(b); //随机选取环Zr中的一个元素并赋给变量b
    element_mul(c,b,a); //设置c同余a*b(modr)
    pairing_apply(x,P,Q,pairing); //配对计算x=e(P,Q),函数参数顺序不能调换
    element_pow_zn(x,x,c); //x=x^c=e(P,Q)^c=e(P,Q)^(ab)
    element_pow_zn(temp1,P,a); //temp1=aP
    element_pow_zn(temp2,Q,b); //temp2=bQ
    pairing_apply(y,temp1,temp2,pairing); //配对计算y=e(temp1,temp2)=e(aP,bQ),函数参数顺序不能调换
    if(!element_cmp(x,y))
    {
        printf("x is equal to y\n");
    }
    else
    {
        printf("x is not equal to y\n");
    }
    element_clear(P);
    element_clear(Q);
    element_clear(a);
    element_clear(b);
    element_clear(c);
    element_clear(x);
    element_clear(y);
    element_clear(temp1);
    element_clear(temp2);
    pairing_clear(pairing); //清除变量,释放资源
    return 0;
}

bydOij.png

posted @ 2022-03-07 18:33  凯在想peach  阅读(167)  评论(0编辑  收藏  举报