PBC Library Manual 0.5.14

作者Ben Lynn

BufferPools译


目录

前言

1.安装PBC

1.1.简易Makefile

1.2.快速启动(Quick Start)

1.3.基本知识


前言

PBC库是一个免费可移植的C语言库,可以允许基于pairing的密码系统的快速原型化。提供了一个双线性对循环群的抽象接口,使程序员不需要知道数学的细节便可以使用。

PBC库是建立在GMP库基础之上的,并且PBC API受GMP API影响比较大。因此本手册试图模仿GMP手册的那种感觉和视觉。

PBC库主页:PBC Library - Pairing-Based Cryptography - About

GMP库主页:The GNU MP Bignum Library

1.安装PBC

PBC库依赖GMP库(The GNU MP Bignum Library)。

构建系统已经经过测试,在Linux和Mac OS X上可以使用fink安装。

$ ./configure
$ make
$ make install

在Windows上,configure命令需要添加两个选项:

$ ./configure -disable-static -enable-shared

默认情况下库安装在/usr/local/lib中。在一些系统上,可能不在库路径中。解决此问题的一种方法是编辑/etc/ld.so.conf然后运行ldconfig。

1.1.简易Makefile

为了速度和简单性,在开发时使用simple.make。自然而然,这样做缺少便携性(portable)。

$ make -f simple.make

PBC使用了一些GNU的C拓展,例如嵌套函数(nested function)。

1.2.快速启动(Quick Start)

我们会使用如下符号。为了我们的目的,pairing是一个从两个循环群G1、G2到第三个群GT的双线性对映射,其中每个群都是素数r阶的。

运行 pbc/pbc 并且输入:

g := rnd(G1);
g;

第一行用于生成一个群G1中的随机元素,而第二行用于打印出g的值。(语法受到了bc的影响,bc是一种任意精度的计算器。)然后输入:

h := rnd(G2);
h;

将G2中的一个随机元素赋值给h。实际上,pbc使用的默认pairing是对称的,因此G1和G2实际上是相同的群,但是通常情况下G1和G2是不同的。要计算应用于g和h的pairing,输入:

pairing(g, h);

g和h都是 r阶的。接下来生成1-r的两个随机数:

a := rnd(Zr);
b := rnd(Zr);

根据双线性,这两条线输出的结果应该是相同的:

pairing(g^a, h^b);
pairing(g, h)^(a*b);

这个程序还有其他的功能,但是这里展示的命令足以快速和交互地实验许多使用实数的基于pairing的密码系统。

1.3.基本知识

使用PBC库的程序应该包含pbc.h:

#include <pbc.h>

并且与PBC库和GMP库进行连接,例如:

$ gcc program.c -L. -lpbc -lgmp

pbc.h文件已经包含了gmp.h。

PBC在一些方面遵循GMP:

  • 输出参数通常位于输入参数之前。
  • 同一个变量可以在一次调用中用作输入和输出。
  • 在使用变量之前,变量必须已经被精确初始化。当不再需要这个变量时必须释放它。为了提高效率,应该避免不必要的初始化和释放。(这个地方有点没翻译清楚,不理解该如何操作)
  • 以_t结尾的PBC变量的作用在函数调用时与GMP变量相同:有效的作为调用引用(effectively as call-by references)(这里翻译不是很通顺,意思大概是相当于c中的引用参数)。换句话说,正如在GMP中,如果一个函数修改了一个输入变量,当把控制权返回给调用者时,该变量也会被修改。
  • 与GMP类似,变量在需要时自动分配内存。默认情况下,会调用malloc()和friends,但是有时也可以更改。
  • PBC函数大多是可重入的(可重入函数)。
  • 因为PBC库是建立在GMP库之上的,所以可以使用GMP的数据类型。PBC类型类似于GMP类型。下面的例子改编自GMP手册中的一个例子,并展示了如何声明PBC数据类型element_t。
element_t sum;
struct foo {element_t x, y;};
element_t ver[20];

GMP的mpz_t类型用于整数,mpq_t用于有理数等等。相比之下,PBC对于不用的代数结构(例如椭圆曲线群、多项式环、有限域)中的元素使用element_t数据类型。函数假定他们的输入来自适当的代数结构。

PBC数据类型和函数可以分为一下几类。仅前两个就可以满足一系列应用程序。

  • element_t:代数结构中的元素。
  • pairing_t:元素所属的pairing;可以从PBC附带的param子目录中的示例pairing参数初始化。
  • pbc_param_t:用于生成pairing参数。
  • pbc_cm_t:用CM方法构造曲线的参数;有时在pbc_param_t中需要。
  • field_t:代数结构:群、环、域;在pairing_t内部使用。
  • 一些杂项函数,例如控制如何生成随机位的函数。

操作给定数据类型的函数通常具有相同的前缀,例如,与element_t有关的对象以element_开头。

注:删除线部分是翻译不通顺或者可能有错误的地方。

PBC Library Manual(PBC库手册)翻译(一)相关推荐

  1. PBC Library Manual(PBC库手册)翻译(三)

    目录 3.Pairing 函数 3.1.初始化pairing 3.2.应用pairing 3.3.其它pairing函数 3.Pairing 函数 使用之前首先要初始化pairing对象,初始化时PB ...

  2. 基于身份的加密(IBE)——使用PBC库实现 Identity Based Encryption(IBE) - Pairings Based Crypto (PBC) library

    基于身份的加密(IBE)--使用PBC库实现 Identity Based Encryption(IBE) - Pairings Based Crypto (PBC) library 前言: 近期在学 ...

  3. 20050620 GNU Bison 中文手册翻译完成

    20050620 GNU Bison 中文手册翻译完成 GNU Bison实际上是使用最广泛的Yacc-like分析器生成器,使用它可以生成解释器,编译器,协议实现等多种程序. 它不但与Yacc兼容还 ...

  4. awk 4.0+ man手册翻译第一版本

    CentOS 7 上awk 4.0以上版本的man手册翻译第一版: 参考地址:http://www.cnblogs.com/wutao666/p/9732976.html 参考地址:https://w ...

  5. TypeScript手册翻译系列4-模块

    为什么80%的码农都做不了架构师?>>>    模块 在TypeScript中利用模块(module)来组织代码.这里将讨论内部和外部模块,以及在何时使用哪种方式更合适,以及怎么使用 ...

  6. tcpprep man 手册翻译

    TCPPREP(1)                                     Programmer's Manual                                   ...

  7. 【填坑之旅】手把手教你如何用AndroidStudio上传自己的library到Jcenter库

    [填坑之旅]手把手教你如何用AndroidStudio上传自己的library到Jcenter库 前言:我们在使用AndroidStudio的时候,会经常用到第三方的代码库.引入第三方库的方式无非就是 ...

  8. man手册翻译神器——星际译王

    之前对自己的英文水平不自信,每次查看命令的man手册只看个基本语法格式和选项,看到后面汗牛充犊的长段落就头大.后面干脆安装了个manpages-zh: sudo apt install manpage ...

  9. STM32 HAL库手册获取和查阅方法以及查看官方例程

    目录 一.概述 二.安装芯片pack包 三.查看HAL库手册 四.查看官方例程 一.概述 STM32固件使用HAL库进行开发,如何查看接口函数的定义呢?本文记录一种通过STM32CubeMX软件获取H ...

最新文章

  1. DHCP配置与DHCP中继代理2
  2. 左手程序员,右手作家:你必须会的Jupyter Notebook
  3. python期末知识点总结_期末考试必备复习提纲丨9年级数学上册知识点总结归纳(人教版)...
  4. flyway配置mysql_SpringBoot 中的Flyway配置
  5. DDBuildToolsRelease1.0
  6. docker设置国内镜像源
  7. 深入理解 C# 协变和逆变
  8. OpenGL学习(一)OpenGL基本介绍
  9. javascript cookie传统用法
  10. L1-040 最萌情侣身高差
  11. 基于 Docker 中的 MongoDB 授权使用
  12. Facebook开源MySQL分支获大佬捧场
  13. hdu 4638 Group
  14. CentOS 8 基础命令
  15. 实战—深圳链家租房数据分析
  16. Machine Learning | (1) Scikit-learn与特征工程
  17. DIV根据里面文字自动撑开
  18. FL Studio第 24 个年头:Image-Line 升级 FL Studio 21 音乐工作站
  19. Java 快乐练习口算
  20. S32K1XX系列单片机 ——MCAL 的CAN模块配置

热门文章

  1. 安卓开发就等同于Java编程么?不懂的进来看看吧
  2. python3字典的应用方法及技巧
  3. 【Matlab系列】常用模拟和数字通信系统仿真及Matlab实现
  4. MATLAB实现雅可比与高斯塞德尔迭代
  5. 谷粒商城微服务分布式基础篇二—— Spring Cloud Alibaba、Nacos注册与发现
  6. lazada代运营-代运营服务平台
  7. matlab对非平稳一维信号的小波变换
  8. js循环绑定事件问题及解决方法
  9. 永恒之蓝漏洞ms17-010
  10. 基于python-opencv的HOG特征提取和使用cv2.HOGDescriptor()