12893 Commits

Author SHA1 Message Date
Brian Smith
0395743dc1 cpu: Always use #[cfg] for target-arch-specific tests.
Previously we were relying in part on the compiler and linker to work
together to inline always-false guards around calls to architecture-
specific functions that might not even exist. However, this isn't
guaranteed to work, though so far it always has. Instead, use
compile-time logic to guard all architecture-specific calls.

To help ensure tihs happens, only expose `cpu::intel` on Intel targets
and similarly only expose `cpu::arm` on ARM targets.
2023-12-11 11:40:45 -08:00
Brian Smith
2d974347e0 cpu: Hide dead code warning on 32-bit x86. 2023-12-11 11:40:45 -08:00
Brian Smith
89d22e23fa digest: Remove CPU features from the digest context.
Take a step towards refactoring the CPU feature detection.
2023-12-11 11:24:23 -08:00
Brian Smith
5b437d514f digest internals: Call block_data_order from one point.
Step towards future memory safety clarifications.
2023-12-11 11:24:23 -08:00
Brian Smith
6347be9634 bigint: Remove cpu::Features from OwnedModulus.
Since all the arithmetic is actually done on `Modulus` now,
`OwnedModulus` doesn't need access to the CPU features.
2023-12-06 10:36:09 -08:00
Brian Smith
71a7271209 biging tests: DRY m.modulus() calls. 2023-12-06 10:36:09 -08:00
Brian Smith
bf966622c9 AEAD: Don't store cpu::Features in the key.
Have the inner AEAD API take `cpu::features()` for all operations.
Then we will be able to write CPU-capability-based tests using (a
variation of) the inner API, which will (when implemented) eliminate
the need to use SDE and the other various hacks we use for testing all
the implementations.
2023-12-06 10:13:49 -08:00
Brian Smith
a4127d0a3c CI: Update versions of cargo-audit and cargo-deny. 2023-12-05 20:21:41 -08:00
Brian Smith
ae3b83042f CI: Remove unnecessary RUSTFLAGS for aarch64-pc-windows-msvc.
This isn't necessary though it may be useful.
2023-12-05 20:21:16 -08:00
Brian Smith
0006e3d64a CI: Run rustup --version as the first step in package job.
Be consistent with the other jobs.
2023-12-05 20:21:16 -08:00
Brian Smith
2be687bebd 0.17.7. 2023-12-05 14:28:41 -08:00
Brian Smith
317a062bf4 ec suite_b: De-duplicate to_mont. 2023-12-04 14:36:50 -08:00
Brian Smith
c89b5c6e28 ec suite_b: Split scalar inversion API into variable- and constant- time. 2023-12-04 14:36:50 -08:00
Brian Smith
ed2b1d7054 ec suite_b: Make oneRR_mod_n private. 2023-12-04 14:36:50 -08:00
Brian Smith
f55712e909 ec suite_b: Make CommonOps::num_limbs and ops::elem::Elem::* private. 2023-12-04 13:53:55 -08:00
Brian Smith
e952c64eba ec suite_b: Hide COMMON_OPS.n and reduce direct use of .num_limbs. 2023-12-04 13:53:55 -08:00
Brian Smith
2926ebb500 ec suite_b: Calculate elem/scalar byte length in one place. 2023-12-04 13:53:55 -08:00
Brian Smith
16c3e19f71 montgomery: Encapsulate Rust uses of bn_mul_mont.
Have all calls from Rust go through `mul_mont`, which ensures
CPU feature detection has been done.
2023-12-03 10:56:49 -08:00
Brian Smith
40e147dfe8 arithmetic: Move bn_mul_mont declaration to montgomery. 2023-12-02 12:10:56 -08:00
Brian Smith
af471c9351 arithmetic: Allow use of N0 from outside of arithmetic.
Allow N0 to be const-constructed and expose it outside of `arithmetic`
so that `ec` can start using it.
2023-12-02 12:10:56 -08:00
Brian Smith
ad1204ec11 CI: Update comment about not running aarch64-apple-ios tests. 2023-12-01 19:17:31 -08:00
Brian Smith
b2cb243a7c CI: Run tests on aarch64-apple-darwin in GitHub Actions. 2023-12-01 19:17:31 -08:00
Brian Smith
0227a0614c CI: Use macOS 13 in GitHub Actions. 2023-12-01 19:17:31 -08:00
Brian Smith
febe76dc77 cpu arm: Fix static feature detection initialization.
Commit f932b941bd1f59782cb3db8f7cd7b8b2c9842ee9 was incomplete and
wrong. On targets where we do any static or dynamic feature detection
and where we have these global variables, we need to unconditionally
write the detected features to the global variable so that assembly
can see them. Since we do static feature detection regardless of
operating system, the initialization of the global most be done
without any conditions on the operating system.
2023-12-01 17:57:15 -08:00
Brian Smith
ff1050e161 Silent unused macro warning on Aarch64. 2023-12-01 17:55:56 -08:00
Brian Smith
e530025acd CI: Use briansmith/actions-cache@v3. 2023-11-30 15:43:06 -08:00
Brian Smith
83979189b3 CI: Use briansmith/actions-checkout@v4.
briansmith/actions-checkout was updated from actions/checkout.
2023-11-30 15:21:38 -08:00
Brian Smith
6bd1a210e3 CI: Use rustup directly to install toolchains. 2023-11-30 14:39:25 -08:00
Brian Smith
b349cecd06 CI: Avoid actions-rs/toolchain when we only need to use stable Rust.
GitHub Actions runners already have rustup with the stable toolchain
installed, apparently. actions-rs is going away and we don't want to
keep maintaining a fork with an unsupported upstream, so start the
process of dropping it.
2023-11-30 13:07:34 -08:00
Adolfo Ochagavía
dc035d9fc3 bench aead: Do Cartesian product, not zip
It looks like this was missed by 6cda863
2023-11-30 12:20:45 -08:00
Brian Smith
464d367252 0.17.6. 2023-11-28 13:19:11 -08:00
Brian Smith
f932b941bd Stop exporting unmangled symbols on ARM/AArch64.
We want all of our internal symbols to be internal so that none of
these internal symbols leak from a static/dynamic library that is
built with *ring* inside.
2023-11-27 12:57:54 -08:00
Brian Smith
b3d0b6f4b3 AES-GCM: Clarify that we need AVX (AVX1), not AVX2.
The function was named `is_avx2()` but the test is for AVX1. Fix the name.
2023-11-27 10:59:38 -08:00
Brian Smith
6c29bf61cd bigint: Remove Nonnegative.
Inline and simplify the logic into the one test-only function that
uses it.
2023-11-24 19:19:47 -08:00
Brian Smith
fbb8cf62f5 bigint: Fold Modulus constructors together.
Now we have exactly one way to construct a `Modulus` so we can
simplify the constructors.
2023-11-24 19:19:47 -08:00
Brian Smith
dc99f6681b RSA: Stop deriving Clone and Copy for P, Q, and N.
This was an artifact of some old logic that's no longer needed.
2023-11-24 19:19:47 -08:00
Brian Smith
76ce919997 rsa: Stop using Nonnegative in RsaKeyPair to check d.
Check `d` by processing it as a `OwnedModulus` like we do for the
other moduli. This should make the checking more consistent.

As a nice side effect, this eliminates the last non-test usage of
`Nonnegative` and elimnates more now-dead `Nonnegative` code.
2023-11-24 18:31:33 -08:00
Brian Smith
2ad2fcb912 rsa: Use dynamic checks for widening conversions.
Remove `SmallerModulus` and instead do the check dynamically. This
eliminates the last `unsafe impl` regarding the modulus
relationships. The uses of `elem_widen` won't ever fail but since
they are in an already-fallible function they wo't hurt.
2023-11-24 17:39:13 -08:00
Brian Smith
1855573098 rsa: Replace use of SmallerModulus with dynamic checks.
The dynamic checks should never fail but since they are added in
already-fallible functions they won't cause any trouble. This
facilitates future changes where the dynmic checks are required.
2023-11-24 17:39:13 -08:00
Jose Quintana
ae02e961cf Docs: Add clang path for Windows ARM64 hosts [skip ci] 2023-11-24 09:41:08 -08:00
Brian Smith
3145a7928a RSA: Precompute R**3 and store it instead of R**2.
This saves two private-modulus-length multiplications per RSA
private key operation at the cost of two private-modulus-length
squarings per `RsaKeyPair` construction.
2023-11-22 19:16:40 -08:00
Brian Smith
9b8d4d7b14 rsa: Split PrivatePrime construction.
Split the checking of the private modulus from the checking of the
private exponent so that we can do things in the order recommended
in the NIST spec.

This also facilitates storing R**3 instead of R**2 in the
`RsaKeyPair`. (We need R**2 during `RsaKeyPair` construction, but
R**3 afterwards.)
2023-11-22 19:16:40 -08:00
Brian Smith
ca043567e6 bigint: Stop implementing Debug for OwnedModulus.
This was necessary at some point in the past, but no longer is. It is
better to avoid depending on any of the `core::fmt` machinery in these
lower layers if we can avoid it.
2023-11-22 19:15:58 -08:00
Brian Smith
6de27244ff bigint: NFC: Take oneRR out of OwnedModulus.
`PublicModulus` and `PrivatePrime` are basically duplicates of
`OwnedModulusWithOne`. In the future we would like to create an
`OwnedModulus` that doesn't need 1RR to be calculated. Also in the
future we'd like to be able to "take" 1RR from a public modulus.
This change is a step towards those ends.
2023-11-22 18:07:16 -08:00
Brian Smith
986fe1f5ff rsa: NFC: Eliminate unnecessary Nonnegative -> Modulus conversion.
After 5ed0a45c65074a0640e6f9e21512a8c4d9540f1e we no longer needs `p`
or `q` in `Nonnegative` form.
2023-11-22 15:32:41 -08:00
Brian Smith
bc00f7e58c ec: NFC: Refactor scalar_sum to eliminate LIMBS_add_mod use.
Use the pattern we typically use where one argument is passed by value.

This lets us use `limbs_add_assign_mod`, eliminating the `unsafe`
direct use of `LIMBS_add_mod`. This will make future refactoring easier.

This also eliminates the need to construct and zeroize a new scalar `r`
for the result.
2023-11-22 14:38:39 -08:00
Brian Smith
3afbcc5dc5 Refactor away parse_big_endian_in_range_partially_reduced_and_pad_consttime.
It only had one caller and it contained unreached code.
2023-11-22 12:58:26 -08:00
Brian Smith
57fc4860d0 Remove ArrayEncoding usage from Digest and delete ArrayEncoding.
Note: I originally tried an alternative implementation using `flat_map` that
ended up being materially slower. To fix that performance regression I had to
make the following change:

```
     let mut output = Output([0; MAX_OUTPUT_LEN]);
     output
         .0
-        .iter_mut()
-        .zip(input.iter().copied().flat_map(|Wrapping(w)| f(w)))
+        .chunks_mut(N)
+        .zip(input.iter().copied().map(|Wrapping(w)| f(w)))
         .for_each(|(o, i)| {
-            *o = i;
+            o.copy_from_slice(&i);
         });
     output
 }
```

I verified that this generates the same assembly code as the original code
on x86-64 using Rust 1.74.0, except that there are two additional 128-bit
moves in `sha256_formta_output` to zero out the latter half of `Output`,
which was intended.
2023-11-22 09:35:47 -08:00
Brian Smith
ff0ed4ca9d Digest: Remove repr(c) from Output union. 2023-11-22 09:35:47 -08:00
Brian Smith
1598583c82 bench: Add digest overhead benchmarks. 2023-11-21 13:26:02 -08:00