7个版本 (3个稳定版)
使用旧的Rust 2015
| 2.0.1 | 2018年3月19日 |
|---|---|
| 1.0.1 | 2016年5月11日 |
| 0.3.0 | 2016年5月5日 |
| 0.2.1 | 2015年10月29日 |
| 0.1.0 | 2015年10月21日 |
#1143 in 加密学
每月21次下载
28KB
387 行
Pumpkin
一个用于生成大素数(至少512位长)的随机数生成器,适用于密码学。
名字的由来是什么?
由于我在2015年万圣节前后开始编写这个库,我想选择一个与节日略有相关的名字。因为“南瓜”和“素数”都以字母'p'开头,所以我决定使用这个名字。
目的
pumpkin是一个加密安全的随机数生成器,可用于生成大素数(至少512位长)。在后台,pumpkin使用出色的ramp库来存储大数。pumpkin生成素数非常快。在我们的测试中,素数生成时间平均在1到5秒之间,当然,实际效果可能会有所不同。
安装
将以下内容添加到您的Cargo.toml文件中
pumpkin = "2.0.*"
请注意,pumpkin需要nightly Rust编译器。
示例
extern crate pumpkin;
use pumpkin::Prime;
fn main() {
let p = Prime::new(2048); // Generate a new 2048-bit prime number
let q = Prime::new(2048);
let e = p * q;
println!("{}", e);
/*
* 75222035638256552797269351238215022250546763213674706... Some massive
* 4096-bit number.
*/
}
您还可以初始化自己的OsRng并从中生成Prime。
extern crate pumpkin;
extern crate rand;
use pumpkin::Prime;
use rand::OsRng;
fn main() {
let mut rngesus = match OsRng::new() {
Ok(rng) => rng,
Err(e) => panic!("Error trying to initializing RNG: {}", e)
};
let p = Prime::from_rng(2048, &mut rngesus);
let q = Prime::from_rng(2048, &mut rngesus);
let e = p * q;
println!("{}", e);
/*
* 75222035638256552797269351238215022250546763213674706... Some massive
* 4096-bit number.
*/
}
说明
Primes的生成方式与GnuPG生成的素数非常相似
-
创建一个给定位长的大候选数。所有
Primes必须至少是512位长。 -
将候选数除以前1000个素数。
-
使用费马小定理测试候选数。
-
最后,进行五次Miller-Rabin素性测试。
Primes通过rand::OsRng进行播种,它通过操作系统的熵源(例如/dev/urandom)接收熵。因此,因为我们有信心生成的候选数是真正随机的(或尽可能接近真正随机),所以我们不需要进行超过五次Miller-Rabin测试来确保素性。
Primes是简单的“newtype”结构;也就是说,它是一个类似于元组的结构,包围着ramp的Int类型。Primes实现了所有基本的代数和逻辑运算符,因此您可以执行所需的任何操作。
贡献
pumpkin 采用 MIT 和 Unlicense 双重许可。如果您希望为项目贡献更新,请考虑签署随附的 WAVER 文件并附上您的加密数字签名(根据您所在国家的法律允许)。这样做将使您的更改重新进入公有领域,供所有人自由使用。我也这样做了这个项目,如果您也这样做,那将意义重大!
要签署 WAIVER,请执行以下命令
$ gpg -sba -u $YOUR_SIGNING_KEY WAIVER
$ cat WAIVER.asc >> WAIVER.sigs && rm WAIVER.asc
依赖项
~1–1.3MB
~24K SLoC