Skip to content

Commit

Permalink
feat: switch from num-bigint-dig to crypto-bigint´
Browse files Browse the repository at this point in the history
The biggest refactor (to date)

Replaces all usage of `num-bigint-dig` based `BigInt` usage with the new
`crypto-bigint` crate, using `BoxedUint`


Current known issue is that we do have a performance regression, which
will be able to get rid of over time:

```
# crypto-bigint

# macbook m1
test bench_rsa_2048_pkcsv1_decrypt      ... bench:   7,184,387.50 ns/iter (+/- 425,598.69)
test bench_rsa_2048_pkcsv1_sign_blinded ... bench:  13,453,579.10 ns/iter (+/- 686,276.31)

# AMD
test bench_rsa_2048_pkcsv1_decrypt      ... bench:   9,260,832.80 ns/iter (+/- 30,013.38)
test bench_rsa_2048_pkcsv1_sign_blinded ... bench:  16,610,079.40 ns/iter (+/- 251,292.53)

# master

# macbook m1
test bench_rsa_2048_pkcsv1_decrypt      ... bench:   1,117,479.15 ns/iter (+/- 31,334.30)
test bench_rsa_2048_pkcsv1_sign_blinded ... bench:   1,337,437.55 ns/iter (+/- 88,624.39)

# AMD
test bench_rsa_2048_pkcsv1_decrypt      ... bench:   1,414,348.80 ns/iter (+/- 12,585.71)
test bench_rsa_2048_pkcsv1_sign_blinded ... bench:   1,685,650.00 ns/iter (+/- 11,105.71)
```

## TODOs

- [x] switch internal storage for `RsaPrivateKey`
- [x] switch internal storage for `RsaPublicKey`
- [x] switch all code to use the new `decrypt` implementation
- [x] update public traits using `BigUint` to return owned versions
- [x] fix blinding implementation
- [x] switch decryption algorithm with precompute to use crypto-bigint
ops
- [x] go through other algorithms and update what can be done without
having primality checks implemented
- [x] review & update code for constant time operation
- [x] review & update code for performance
- [x] benchmarks

---------

Co-authored-by: Fethbita <[email protected]>
  • Loading branch information
dignifiedquire and Fethbita authored Feb 13, 2025
1 parent b019aa1 commit f7d1214
Show file tree
Hide file tree
Showing 31 changed files with 1,213 additions and 945 deletions.
7 changes: 3 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
strategy:
matrix:
rust:
- 1.81.0 # MSRV
- 1.83.0 # MSRV
- stable
target:
- thumbv7em-none-eabi
Expand All @@ -35,7 +35,7 @@ jobs:
strategy:
matrix:
rust:
- 1.81.0 # MSRV
- 1.83.0 # MSRV
- stable
steps:
- uses: actions/checkout@v4
Expand All @@ -44,7 +44,7 @@ jobs:
with:
toolchain: ${{ matrix.rust }}
- uses: RustCrypto/actions/cargo-hack-install@master
- run: cargo hack test --release --feature-powerset --exclude-features nightly,getrandom,serde
- run: cargo hack test --release --feature-powerset --exclude-features getrandom,serde
- run: cargo test --release --features getrandom
- run: cargo test --release --features serde

Expand All @@ -66,5 +66,4 @@ jobs:
- uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly-2024-10-06
- run: cargo test --release --features nightly
- run: cargo build --benches
4 changes: 2 additions & 2 deletions .github/workflows/workspace.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- uses: RustCrypto/actions/cargo-cache@master
- uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.81.0
toolchain: 1.83.0
components: clippy
- run: cargo clippy --all -- -D warnings

Expand All @@ -40,7 +40,7 @@ jobs:
- uses: dtolnay/rust-toolchain@master
with:
# We need Nightly for doc_auto_cfg
toolchain: nightly-2024-06-25
toolchain: nightly-2024-11-30
- uses: Swatinem/rust-cache@v2
- env:
RUSTDOCFLAGS: "-Dwarnings --cfg docsrs"
Expand Down
Loading

0 comments on commit f7d1214

Please sign in to comment.