5 个版本 (3 个重大更新)
0.4.1 | 2020年5月13日 |
---|---|
0.4.0 | 2020年5月13日 |
0.3.0 | 2020年5月10日 |
0.2.0 | 2020年3月22日 |
0.1.0 | 2019年11月19日 |
#1561 in 数学
27KB
233 行
ramp-primes:大随机合数和质数生成器
此crate提供了一个简单易用的API,用于在Rust中生成大整数,包括但不限于质数。
它充分利用了RAMP crate,该crate通过内联汇编提供高性能大整数,并为用户提供了一个高级、简单易用的接口,同时还包括了允许完全控制大整数的底层组件。
由于使用了ramp和内联汇编,此crate需要使用nightly工具链。
用法
将以下内容添加到您的cargo.toml
ramp-primes= "0.4.0"
ramp= "0.5"
如果您还没有安装,请安装nightly工具链,因为它只能在nightly分支上运行,然后将其设置为默认工具链。
rustuptoolchain install nightly
rustupdefault nightly
质数生成示例
use ramp_primes::Generator;
fn main(){
// Generates two primes (p,q) both of 512 bits
let p = Generator::new_prime(512);
let q = Generator::new_prime(512);
// Generates the modulus n from p and q
let n = p * q;
}
安全质数生成示例
use ramp_primes::Generator;
fn main(){
// Outputs a Large Prime with 64 bits using [(n-1)/2]
let p = Generator::safe_prime(64);
}
随机数生成示例
use ramp_primes::Generator;
fn main(){
// Creates a Large Integer of 1024 bits
let x = Generator::new_uint(1024);
// Prints out the randomly generated number
println!("x: {}",x);
}
质数生成设计
此crate的质数生成和部分代码基于Snips-AI的Medium博客关于质数生成。
尝试保守地判断一个数是否为质数。该数经过生成阶段和3次测试以确定其是否为质数
生成阶段
-
将一个参数传递给生成函数,该参数指示质数的位数。
-
操作系统通过rand crate使用用户空间CSPRNG对种子进行初始化,以生成随机数。
-
生成一个无符号整数,直到它通过质数测试,并在发送到测试之前,将最低有效位(LSB)更改为0以指示其为奇数,并将最高有效位(MSB)更改为1以确保其为指定位长。
-
该数被发送到进行三个测试
质数测试
数字经过多次测试以确定它们是合数还是质数。
-
使用包含前2048个质数的数组来检查数字是否可以被数组中的任何质数整除。
-
执行费马小定理
-
Miller-Rabin素性测试,这是官方RSA文档和NIST推荐的生成素数的黄金标准,使用16次迭代进行,与苹果加密系统使用的相同。
如果数字通过这些测试,则它被认为有很高的可能性是素数。您可以在Wolfram Alpha上自由验证它们,只需输入素数即可。
安全素数
通过检查(p-1)/2是否是使用上述测试确定的素数来生成安全素数。
许可证
根据您的选择,许可如下:
-
Apache License,版本2.0
-
MIT许可证
。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交并包含在作品中的任何贡献,将按照上述方式双重许可,没有任何额外的条款或条件。
依赖项
~1.5MB
~26K SLoC