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