RELIC库学习
《RELIC库学习》
了解
RELIC是由Diego F. Aranha开发的高效、灵活的开源密码原语工具箱,包含多精度整数运算、有限域(包含素数域和二元域)运算、椭圆曲线、双线性映射和扩域运算、密码协议(如RSA、Rabin、ECDSA、BLS短签名、BB短签名、Paillier同态加密方案等),支持不同安全等级、多种优化实现方法和多平台运行,在学术界和工业界均得到了广泛应用。
只依赖于GMP库
2022年11月7日,武汉大学密码学与区块链技术实验室向开源项目RELIC贡献了国密算法代码。
具体贡献:
- 增加了该项目对SM2椭圆曲线参数的支持
- 修正了SM9算法参数下双线性映射的实现代码
实验结果:
配置64位Ubuntu操作系统、Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz、14GB内存的主机上,基于GMP库,使用RELIC实现SM2/9算法中核心运算的性能如下:


以上是SM2和SM9的测试结果。
安装
环境:Centos7
依赖:安装GMP库,参考:https://www.cnblogs.com/pam-sh/p/16750646.html
git clone https://github.com/relic-toolkit/relic.git
cd relic
mkdir build
cd build
cmake ..
make
测试
测试:demo/psi-client-server
- Added several laconic Private Set Intersection (PSI) protocols from https://eprint.iacr.org/2022/529
# 修改makefile文件

make
./receiver
./sender
测试:paillier算法(demo/general-paillier)
static int paillier(void) {
int code = RLC_ERR;
bn_t a, b, c, d, s, pub, prv;
int result;
bn_null(a);
bn_null(b);
bn_null(c);
bn_null(d);
bn_null(pub);
bn_null(prv);
RLC_TRY {
bn_new(a);
bn_new(b);
bn_new(c);
bn_new(d);
bn_new(pub);
bn_new(prv);
/* Generate 2048-bit public and private keys (both integers). */
result = cp_ghpe_gen(pub, prv, 2048);
assert(result == RLC_OK);
printf("Public key:\n");
bn_print(pub);
printf("Private key:\n");
bn_print(prv);
for (int s = 1; s <= 2; s++) {
util_print("Testing generalized paillier for (s = %d)\n", s);
// 加解密测试
/* Generate plaintext smaller than n^s. */
bn_rand(a, RLC_POS, s * (bn_bits(pub) - 1)); //明文随机数a
/* Encrypt, decrypt and check if the result is the same. */
assert(cp_ghpe_enc(c, a, pub, s) == RLC_OK); //密文c
assert(cp_ghpe_dec(b, c, pub, prv, s) == RLC_OK); //解密测试b
assert(bn_cmp(a, b) == RLC_EQ);
//同态性测试:Dec(c*d)=a+b
/* Generate new plaintexts smaller than n^s. */
bn_rand(a, RLC_POS, s * (bn_bits(pub) - 1)); //明文a
bn_rand(b, RLC_POS, s * (bn_bits(pub) - 1)); //明文b
/* Encrypt both plaintexts using the same public key. */
assert(cp_ghpe_enc(c, a, pub, s) == RLC_OK); //密文c
assert(cp_ghpe_enc(d, b, pub, s) == RLC_OK); //密文d
/* Now compute c = (d * c) mod n^(s + 1). */
bn_mul(c, c, d);
bn_sqr(d, pub);
if (s == 2) {
bn_mul(d, d, pub);
}
bn_mod(c, c, d);
/* Decrypt and check if result is (a + b) mod n^s. */
assert(cp_ghpe_dec(c, c, pub, prv, s) == RLC_OK);
bn_add(a, a, b);
bn_copy(d, pub);
if (s == 2) {
bn_mul(d, d, pub);
}
bn_mod(a, a, d);
assert(bn_cmp(a, c) == RLC_EQ);
}
}
RLC_CATCH_ANY {
RLC_ERROR(end);
}
code = RLC_OK;
end:
bn_free(a);
bn_free(b);
bn_free(c);
bn_free(d);
bn_free(prv);
bn_free(pub);
return code;
}

RELIC库学习的更多相关文章
- python 操作exls学习之路1-openpyxl库学习
这篇要讲到的就是如何利用Python与openpyxl结合来处理xlsx表格数据.Python处理表格的库有很多,这里的openpyxl就是其中之一,但是它是处理excel2007/2010的格式,也 ...
- dlib库学习之一
dlib库学习之一 1.介绍 跨平台 C++ 通用库 Dlib 发布 ,带来了一些新特性,包括概率 CKY 解析器,使用批量同步并行计算模型来创建应用的工具,新增两个聚合算法:中国低语 (Chines ...
- python_库学习_01
一.python的库学习之 财经数据接口包 1.安装ThShare 直接pip install tushare 可能会出现缺少依赖库的情况,依次安装,大概有lxml,pandas,bs4,reques ...
- numpy, matplotlib库学习笔记
Numpy库学习笔记: 1.array() 创建数组或者转化数组 例如,把列表转化为数组 >>>Np.array([1,2,3,4,5]) Array([1,2,3,4,5]) ...
- python爬虫解析库学习
一.xpath库使用: 1.基本规则: 2.将文件转为HTML对象: html = etree.parse('./test.html', etree.HTMLParser()) result = et ...
- 【mmall】Guava库学习Collections
参考链接 Guava库学习:学习Collections(三)Sets
- muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...
- muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制
目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...
- muduo网络库学习笔记(三)TimerQueue定时器队列
目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...
- Libev库学习
Libev库学习 https://www.cnblogs.com/wunaozai/p/3950249.html Libev库学习(1)https://www.cnblogs.com/wunaozai ...
随机推荐
- 基于Java+SpringBoot心理测评心理测试系统功能实现三
一.前言介绍: 1.1 项目摘要 心理测评和心理测试系统在当代社会中扮演着越来越重要的角色.随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态.诊断心理问题.制定心理治疗方案的工 ...
- 开源 - Ideal库 -获取特殊时间扩展方法(四)
书接上回,我们继续来分享一些关于特殊时间获取的常用扩展方法. 01.获取当前日期所在月的第一个指定星期几 该方法和前面介绍的获取当前日期所在周的第一天(周一)核心思想是一样的,只是把求周一改成求周几而 ...
- XSS跨站脚本之portswigger labs练习
目录 1 什么是XSS 2 XSS的类型有哪些 3 XSS攻击的过程和原理 4 XSS的防御 5 可能会用到的XSS Payload资源 6 靶场训练 portswigger labs 6.1 没有任 ...
- k8s之Helm
官方文档: https://helm.sh/zh/docs/intro/using_helm/ Helm 帮助您管理 Kubernetes 应用-- Helm Chart,Helm 是查找.分享和使用 ...
- redis之性能优化
1 redis-cli命令的 --stat选项 关于stat选项,官网也是介绍的比较简单.使用redis-cli命令加上stat选项可以实时监视redis实例,比如当前节点内存中缓存的 key总数以及 ...
- L4168爱普生打印机重新刷机解决printer mode问题
同事的一台EPSON L4168打印机出现无法打印的故障,显示printer mode.使用官网的升级工具,在更新升级模式下(用电源+左+下+三角形四个手指按住开启)刷机,重启问题依旧(仍然显示pri ...
- 2022 Hangzhou Normal U Summer Trials
Subarrays 给定一个长度为n的由正整数组成的序列,请你输出该序列中子段和能被\(k\)整除的所有符合要求的子段数量 题解:组合计数 + 前缀和 + 思维 \[sum[l,r]\ \ mod\ ...
- 揭秘UGO SQL审核功能4大特性,让业务平滑迁移至GaussDB
业务挑战 数据库是企业应用系统的核心,SQL作为数据库查询.更新等操作的标准语言,重要性不言而喻.然而在实际的SQL开发过程中,也面临着诸多挑战: 数据库应用开发人员的SQL能力良莠不齐,经常写出不符 ...
- CTF中RSA相关题型总结(持续更新)
e很小时: import gmpy2 from functools import reduce from Crypto.Util.number import long_to_bytes def CRT ...
- 强网杯2023 谍影重重3.0 wp
参考文章:[使用主动探测方法识别 U2hhZG93c29ja3M=(base64) 服务 - Phuker's Blog]:https://phuker.github.io/posts/U2hhZG9 ...