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次下载

Unlicense/MIT

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生成的素数非常相似

  1. 创建一个给定位长的大候选数。所有Primes必须至少是512位长。

  2. 将候选数除以前1000个素数。

  3. 使用费马小定理测试候选数。

  4. 最后,进行五次Miller-Rabin素性测试

Primes通过rand::OsRng进行播种,它通过操作系统的熵源(例如/dev/urandom)接收熵。因此,因为我们有信心生成的候选数是真正随机的(或尽可能接近真正随机),所以我们不需要进行超过五次Miller-Rabin测试来确保素性。

Primes是简单的“newtype”结构;也就是说,它是一个类似于元组的结构,包围着rampInt类型。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