github-actions[bot] opened a new issue, #3517: URL: https://github.com/apache/iceberg-rust/issues/3517
> Non-constant-time mask generation and `u128` comparisons | Details | | | ------------------- | ---------------------------------------------- | | Package | `ctutils` | | Version | `0.4.2` | | URL | [https://github.com/RustCrypto/utils/pull/1569](https://github.com/RustCrypto/utils/pull/1569) | | Date | 2026-10-23 | | Patched versions | `>=0.4.4` | ## Summary The `ctutils::Choice` type has mask generation functions for each unsigned integer size (`u8`, `u16`, `u32`, `u64`, `u128`). These are `const fn` and therefore can't reuse the `asm!`-backed mask generation in the `cmov` crate that's otherwise used to ensure constant-time. In releases prior to v0.4.4, the generated code from these functions could include a branch on commonly used platforms. This has been corrected in this release and now verified on several platforms using BINSEC. Additionally, `u128` comparison operations provided via `ctutils::Choice` and intended to work in constant-time were generating branches on 32-bit targets. This has been resolved via a special case implementation of these functions for such targets. ## Impact Branch instructions on secret values can potentially leak such values via covert channels. This can enable attackers to potentially recover such secrets. ## Resolution This has been resolved by calling `Choice::to_u8()` when generating the mask, which in turn uses `black_box` as an optimization barrier. Verification that this resulted in the desired change in the generated assembly across a variety of target CPU architectures was performed by BINSEC, which now runs automatically in CI using `cargo checkct`. See [advisory page](https://rustsec.org/advisories/RUSTSEC-2026-0385.html) for additional details. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
