Skip to content

fix: Fr::from_u64 big-endian encoding to match C++ msgpack format#22233

Merged
ludamad merged 1 commit intomerge-train/barretenbergfrom
claudebox/fix-merge-train-bb-ci
Apr 6, 2026
Merged

fix: Fr::from_u64 big-endian encoding to match C++ msgpack format#22233
ludamad merged 1 commit intomerge-train/barretenbergfrom
claudebox/fix-merge-train-bb-ci

Conversation

@AztecBot
Copy link
Copy Markdown
Collaborator

@AztecBot AztecBot commented Apr 1, 2026

Summary

Fixes bb-rs test failure introduced by #22311 (graceful failures in verifier code paths).

Fr::from_u64 was storing values in little-endian, but the C++ field::msgpack_unpack expects big-endian (network byte order). This was masked before because the C++ side silently reduced non-canonical values via to_montgomery_form_reduced(). After #22311 added strict non-canonical field validation (throwing for values >= modulus), values like Fr::from_u64(123) produce 0x7B<<248 which exceeds the BN254 Fr modulus (0x30644e72...) and cause a C++ exception that propagates through the FFI boundary, aborting the Rust test process with "Rust cannot catch foreign exceptions".

Fix

One-line change: store the u64 value in bytes 24..32 as big-endian instead of bytes 0..8 as little-endian.

Test plan

  • Reproduced failure locally — test_pedersen_commit_deterministic crashes with SIGABRT
  • Applied fix — all 70 bb-rs tests pass (3 perf tests ignored)
  • ./bootstrap.sh ci running

@AztecBot AztecBot added ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR. labels Apr 1, 2026
…ormat

Fr::from_u64 was storing values in little-endian, but the C++ field::msgpack_unpack
expects big-endian (network byte order). This was masked before because the C++ side
silently reduced non-canonical values via to_montgomery_form_reduced(). After #22311
added strict non-canonical field validation (throwing for values >= modulus), values
like Fr::from_u64(123) produce 0x7B<<248 which exceeds the BN254 Fr modulus (0x30...)
and cause a C++ exception that propagates through the FFI boundary, aborting the Rust
test process.
@AztecBot AztecBot force-pushed the claudebox/fix-merge-train-bb-ci branch from 33710f9 to eff1e11 Compare April 6, 2026 15:04
@AztecBot AztecBot changed the title fix: guard peak_rss_bytes() in memory_profile.cpp for WASM builds fix: Fr::from_u64 big-endian encoding to match C++ msgpack format Apr 6, 2026
@ludamad ludamad marked this pull request as ready for review April 6, 2026 15:09
@ludamad ludamad enabled auto-merge (squash) April 6, 2026 15:09
@ludamad ludamad merged commit 30bcb23 into merge-train/barretenberg Apr 6, 2026
16 of 20 checks passed
@ludamad ludamad deleted the claudebox/fix-merge-train-bb-ci branch April 6, 2026 15:19
ludamad pushed a commit that referenced this pull request Apr 6, 2026
…nical field encoding (#22333)

## Summary

Fixes CI failure in `merge-train/barretenberg` caused by the interaction
of #22233 (Fr::from_u64 big-endian encoding) and #22311 (strict
non-canonical field validation).

The `corruptProofFields()` test helper was flipping high-order bytes
(indices 0,1) of field elements, creating values exceeding the BN254 Fr
modulus. The strict validation now rejects these at deserialization time
with `non-canonical encoding (value >= modulus)` before they reach the
verifier.

**Fix**: Flip low-order bytes (indices 30,31) instead — still corrupts
the proof but keeps field values canonical.

## Test plan
- [x] `batch_verifier.test.ts` — all 4 tests pass locally (previously 1
failing)

ClaudeBox log: https://claudebox.work/s/e5146dc92fea29dd?run=1
github-merge-queue bot pushed a commit that referenced this pull request Apr 6, 2026
BEGIN_COMMIT_OVERRIDE
fix: reject VK with log_circuit_size=0 in UltraKeccak verifier (#22319)
chore: merkle tree audit 2 (#21475)
fix: graceful failures in verifier code paths + other fixes (#22311)
fix: Fr::from_u64 big-endian encoding to match C++ msgpack format
(#22233)
fix: corrupt low-order bytes in batch verifier test to avoid
non-canonical field encoding (#22333)
fix: skip MsgpackRejectsNonCanonical test in WASM builds (#22335)
END_COMMIT_OVERRIDE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-draft Run CI on draft PRs. claudebox Owned by claudebox. it can push to this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants