21个版本 (9个破坏性更新)
0.10.1 | 2024年6月12日 |
---|---|
0.9.0 | 2024年5月6日 |
0.8.0 | 2024年2月13日 |
0.7.0 | 2023年12月28日 |
0.2.3 | 2021年7月21日 |
#975 在 加密学 中
每月191次下载
在 3 个crate中使用 (直接使用2个)
115KB
3K SLoC
unknown_order
处理未知阶群组的crate。
我在多个项目中看到,当它们需要一个高精度库时,通常会使用以下三个库之一: Gnu MP BigNum库、OpenSSL的大数库 和 Rust的大整数库,具体取决于需求和要求(许可、性能、平台目标、常数时间)。
默认情况下,使用纯Rust选项,不使用任何外部C绑定。这个版本也友好地支持WASM。
要使用OpenSSL的大数库,您必须在路径中具有libcrypto和libssl。在您的 Cargo.toml
中添加以下内容。
unknown_order = { version = "0.9", default-features = false, features = ["openssl"] }
要使用Gnu MP大数库,您必须在路径中具有libgmp。在您的 Cargo.toml
中添加以下内容。
unknown_order = { version = "0.9", default-features = false, features = ["gmp"] }
此库将它们都包装在一个公共API中,因此它们可以互换使用。
未知阶的群组需要使用由两个大素数组成的模数。此库旨在简化这些用例,如RSA、Paillier、超椭圆曲线、累加器、CL签名等。
模数在编译时是未知的,这排除了使用某些特性,如 ff::PrimeField
,因此不幸的是,调用者需要记住使用以 mod
前缀的方法来达到预期的结果。
此库一次只能有一个实现处于活动状态。不同实现之间的混合并不一定是问题,但大量注入依赖和混合许可证并不是一个好主意。这也迫使用户在选择特定实现时了解他们所做出的权衡。例如,某些实现可能不是常数时间,而其他实现则非常重要,特别是在用于加密目的时。
当使用 features=openssl
或 features=gmp
时,如果可用,将使用常数时间的实现。
示例
use unknown_order::BigNumber;
fn main() {
// Create a safe group of unknown order
let p = BigNumber::safe_prime(1024);
let q = BigNumber::safe_prime(1024);
let n = p.clone() * q.clone();
// Simulate RSA algorithm, DO NOT USE totally insecure
// Public key
let e = BigNumber::from(65537);
// throw away when done
let totient = (p.clone() - 1) * (q.clone() - 1);
// Secret key
let d = e.invert(&totient).unwrap();
}
许可证
根据您的选择,许可协议为以下之一
任选其一。
贡献
除非您明确声明,否则任何有意提交供包括在您的工作中的贡献,如Apache-2.0许可证中定义,均应双重许可如上,无需任何额外条款或条件。
此软件包是Hyperledger Labs Agora项目的一部分
依赖项
~1–6.5MB
~137K SLoC