Skip to content

Commit 6d722ba

Browse files
authored
bigint2 acceleration patch to 0.9.7 (#5)
* Add Zirgen-based acceleration (#1) Use the new RSA extern (#2) --------- Co-authored-by: Frank Laub <[email protected]> Use risc0-bigint2 (#3) * Use risc0-bigint2 * Use num-bigint-dig feature * Update lockfile * Update ref * Update ref * Update git ref Update bigint2 impl with 4096 bit support (#4) * update acceleration to use latest version of bigint2 (with 4096 bit support) * bump version * bump to 1.2 * gate prop tests behind cfg to enable cargo risczero test
1 parent 551f6e5 commit 6d722ba

File tree

7 files changed

+87
-14
lines changed

7 files changed

+87
-14
lines changed

Cargo.lock

Lines changed: 59 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,12 @@ sha1 = { version = "0.10.5", optional = true, default-features = false, features
3131
sha2 = { version = "0.10.6", optional = true, default-features = false, features = ["oid"] }
3232
serde = { version = "1.0.184", optional = true, default-features = false, features = ["derive"] }
3333

34+
[target.'cfg(all(target_os = "zkvm", target_arch = "riscv32"))'.dependencies]
35+
risc0-bigint2 = { version = "1.2.0", default-features = false, features = ["num-bigint-dig", "unstable"] }
36+
3437
[dev-dependencies]
3538
base64ct = { version = "1", features = ["alloc"] }
3639
hex-literal = "0.4.1"
37-
proptest = "1"
3840
serde_test = "1.0.89"
3941
rand_xorshift = "0.3"
4042
rand_chacha = "0.3"
@@ -44,6 +46,13 @@ sha1 = { version = "0.10.5", default-features = false, features = ["oid"] }
4446
sha2 = { version = "0.10.6", default-features = false, features = ["oid"] }
4547
sha3 = { version = "0.10.7", default-features = false, features = ["oid"] }
4648

49+
[target.'cfg(not(all(target_os = "zkvm", target_arch = "riscv32")))'.dev-dependencies]
50+
proptest = "1"
51+
52+
[target.'cfg(all(target_os = "zkvm", target_arch = "riscv32"))'.dev-dependencies]
53+
# getrandom impl for zkvm needed for tests
54+
risc0-zkvm-platform = { version = "1.2.0", features = ["getrandom", "unstable"] }
55+
4756
[[bench]]
4857
name = "key"
4958

src/algorithms/rsa.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,19 @@ use crate::traits::{PrivateKeyParts, PublicKeyParts};
1919
/// or signature scheme. See the [module-level documentation][crate::hazmat] for more information.
2020
#[inline]
2121
pub fn rsa_encrypt<K: PublicKeyParts>(key: &K, m: &BigUint) -> Result<BigUint> {
22+
#[cfg(target_os = "zkvm")]
23+
{
24+
use risc0_bigint2::ToBigInt2Buffer;
25+
// If we're in the RISC Zero zkVM, try to use an accelerated version.
26+
if *key.e() == BigUint::new(vec![65537]) {
27+
let m = m.to_u32_array();
28+
let n = key.n().to_u32_array();
29+
let mut result = [0u32; 128];
30+
risc0_bigint2::rsa::modpow_65537(&m, &n, &mut result);
31+
return Ok(BigUint::from_u32_array(result));
32+
}
33+
// Fall through when the exponent does not match the accelerator
34+
}
2235
Ok(m.modpow(key.e(), key.n()))
2336
}
2437

src/pkcs1v15/signature.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#[allow(unused_imports)]
12
pub use ::signature::{
23
hazmat::{PrehashSigner, PrehashVerifier},
34
DigestSigner, DigestVerifier, Error, Keypair, RandomizedDigestSigner, RandomizedSigner, Result,

src/pss.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,8 @@ mod test {
593593
}
594594
}
595595

596+
// Ignore test in zkvm, it's too large (can test manually)
597+
#[cfg(not(all(target_os = "zkvm", target_arch = "riscv32")))]
596598
#[test]
597599
// Tests the corner case where the key is multiple of 8 + 1 bits long
598600
fn test_sign_and_verify_2049bit_key() {

src/pss/signature.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#[allow(unused_imports)]
12
pub use ::signature::{
23
hazmat::{PrehashSigner, PrehashVerifier},
34
DigestSigner, DigestVerifier, Error, Keypair, RandomizedDigestSigner, RandomizedSigner, Result,

tests/proptests.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
//! Property-based tests.
2+
#![cfg(not(all(target_os = "zkvm", target_arch = "riscv32")))]
23

34
use proptest::prelude::*;
45
use rand_chacha::ChaCha8Rng;

0 commit comments

Comments
 (0)