没有合适的资源?快使用搜索试试~ 我知道了~
介绍 本章介绍了如何使用PBC库实现Boneh-Lynn-Shacham(BLS)签名方案。它基于文件example / bls.c(见安装目录)。我们有三个素数为r的G1,G2,GT组,以及一个双线性映射e,它从G1提取元素,从G2提取元素,并输出GT元素。我们将它们与系统参数g一起公布,系统参数g是G2的随机选择元素。爱丽丝希望签名。她按如下方式生成她的公共和私有密钥。她的私钥是Zr的随机元素x,而她对应的公钥是g^x。 要签名消息,Alice将消息散列到G1的某个元素h,然后输出签名h^x。为了验证签名σ,Bob检查 下面公式满足。 e(h,g^x)= e(σ,g) // Boneh-
资源推荐
资源详情
资源评论
PBC库案例库案例–BLS签名签名
介绍介绍
本章介绍了如何使用PBC库实现Boneh-Lynn-Shacham(BLS)签名方案。它基于文件example / bls.c(见安装目录见安装目录)。我们
有三个素数为r的G1,G2,GT组,以及一个双线性映射e,它从G1提取元素,从G2提取元素,并输出GT元素。我们将它们与
系统参数g一起公布,系统参数g是G2的随机选择元素。爱丽丝希望签名。她按如下方式生成她的公共和私有密钥。她的私钥
是Zr的随机元素x,而她对应的公钥是g^x。
要签名消息,Alice将消息散列到G1的某个元素h,然后输出签名h^x。为了验证签名σ,Bob检查 下面公式满足。
e(h,g^x)= e(σ,g)
// Boneh-Lynn-Shacham short signatures demo.
//
// See the PBC_sig library for a practical implementation.
//
// Ben Lynn
#include "/usr/local/include/pbc/pbc.h"
#include "/usr/local/include/pbc/pbc_test.h"
int main(int argc, char **argv) {
// 定义一个双线性对
pairing_t pairing;
// 定义一些参数
element_t g, h;
element_t public_key, sig;
element_t secret_key;
element_t temp1, temp2;
// 实例化 paring
pbc_demo_pairing_init(pairing, argc, argv);
// 实例化 元素 属于 G1.G2,GT
element_init_G2(g, pairing);
element_init_G2(public_key, pairing);
element_init_G1(h, pairing);
element_init_G1(sig, pairing);
element_init_GT(temp1, pairing);
element_init_GT(temp2, pairing);
// 实例化 元素 属于 Zr(表示以r为模的整数环。) r是阶 (G1.G2,GT)
element_init_Zr(secret_key, pairing);
printf("Short signature test");
//随机生成一个元素值(因为g定义在G2,所以是G2中的任意一个)
element_random(g);
element_printf("system parameter g = %B\n", g);
//随机生成私钥
element_random(secret_key);
element_printf("private key = %B", secret_key);
//根据私钥计算出公钥
element_pow_zn(public_key, g, secret_key);
element_printf("public key = %B", public_key);
//根据存储在缓冲区数据中的len(13)个字节--hashofmessage,确定地生成一个元素h。
//for toy pairings, 生成的 h 要满足 pairing(g, h) != 1
element_from_hash(h, "hashofmessage", 13);
element_printf("message hash = %B", h);
//sig = h^secret_key, is the signature
//在现实情景中:只输出第一个坐标
element_pow_zn(sig, h, secret_key);
element_printf("signature = %B", sig);
{
//返回表示G1元素的压缩形式所需的长度(以字节为单位),解压缩会有一些开销。
int n = pairing_length_in_bytes_compressed_G1(pairing);
//int n = element_length_in_bytes_compressed(sig);返回以压缩形式保存sig所需的字节数.
//当前仅对椭圆曲线上的点,sig是G1 上的点
资源评论
weixin_38628647
- 粉丝: 3
- 资源: 968
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功