Skip to content

elliptic-curve: replace FieldBytesEncoding with FIELD_ENDIANNESS#2457

Merged
tarcieri merged 1 commit into
masterfrom
elliptic-curve/refactor-field-bytes-encoding
Jun 21, 2026
Merged

elliptic-curve: replace FieldBytesEncoding with FIELD_ENDIANNESS#2457
tarcieri merged 1 commit into
masterfrom
elliptic-curve/refactor-field-bytes-encoding

Conversation

@tarcieri

Copy link
Copy Markdown
Member

Removes the FieldBytesEncoding trait and replaces it with:

  • Curve::FIELD_ENDIANNESS which defaults to ByteOrder::BigEndian
  • field::{bytes_to_uint, uint_to_bytes} generic free functions

This constant annoyingly duplicates the ones we have elsewhere, but without getting it upstream into ff (zkcrypto/ff#158) there is no single other convenient place to hang it but here.

Ideally this functionality could be phased out completely, but there are still places that need it for now (e.g. legacy rfc6979, ECDSA recovery).

In a future breaking release after the imminent one, we need to refactor everything so the base and scalar fields are treated completely separately. At that point, hopefully this all can and will need to go away, and we will be able to leverage an upstream endianness constant instead of having to stick (another) one in elliptic-curve.

Removes the `FieldBytesEncoding` trait and replaces it with:
- `Curve::FIELD_ENDIANNESS` which defaults to `ByteOrder::BigEndian`
- `field::{bytes_to_uint, uint_to_bytes}` generic free functions

This constant annoyingly duplicates the ones we have elsewhere, but
without getting it upstream into `ff` (zkcrypto/ff#158) there is no
single other convenient place to hang it but here.

Ideally this functionality could be phased out completely, but there are
still places that need it for now (e.g. legacy `rfc6979`, ECDSA
recovery).

In a future breaking release after the imminent one, we need to refactor
everything so the base and scalar fields are treated completely
separately. At that point, hopefully this all can and will need to go
away, and we will be able to leverage an upstream endianness constant
instead of having to stick (another) one in `elliptic-curve`.
@tarcieri tarcieri force-pushed the elliptic-curve/refactor-field-bytes-encoding branch from 9ffc86e to c46c923 Compare June 21, 2026 21:07
@tarcieri

Copy link
Copy Markdown
Member Author

Have the curves migrated locally so I'll go ahead and merge

@tarcieri tarcieri merged commit d1ca96d into master Jun 21, 2026
86 checks passed
@tarcieri tarcieri deleted the elliptic-curve/refactor-field-bytes-encoding branch June 21, 2026 21:22
tarcieri added a commit to RustCrypto/signatures that referenced this pull request Jun 21, 2026
tarcieri added a commit to RustCrypto/signatures that referenced this pull request Jun 21, 2026
tarcieri added a commit to RustCrypto/elliptic-curves that referenced this pull request Jun 21, 2026
tarcieri added a commit to RustCrypto/elliptic-curves that referenced this pull request Jun 21, 2026
@tarcieri tarcieri mentioned this pull request Jun 23, 2026
tarcieri added a commit that referenced this pull request Jun 23, 2026
## Added
- Implement `PartialEq + Eq` for `NonIdentity` and `NonZeroScalar` (#1834)
- Implement `Zeroize` for `NonIdentity` (#1832)
- `NonIdentity::mul_by_generator()` (#1833)
- Implement `Mul<&NonZeroScalar>` for `NonIdentity` (#1852)
- Implement `Mul<NonIdentity>` for `NonZeroScalar` (#1855)
- Expose `AffineCoordinates::y` (#1891)
- Scalar macros originall from `primeorder` (#1894)
- Implement `BatchNormalize` for `NonIdentity` (#1896)
- Re-export `group::Curve` as `CurveGroup` (#1902)
- `NonIdentity`/`NonZeroScalar` casting methods (#1903)
- `AffineCoordinates::from_coordinates` (#1996)
- `getrandom` feature (#2085)
- `ctutils` traits to `arithmetic` bounds (#2166)
- `Retrieve` bound for `C::Scalar` (#2169)
- `crypto_common::Generate` support (#2173, #2208)
- Implement `crypto_common::TryKeyInit` for `SecretKey<C>` (#2174)
- `dev::bench_projective!` macro (#2177)
- Provide `Sec1Point::from/to_sec1_bytes` (#2221)
- Implement `From<SecretKey<C>>` for `PublicKey<C>` (#2247)
- `SecretKey::diffie_hellman` (#2248)
- `LinearCombination::lincomb_vartime` method (#2286)
- `ops::MulVartime` trait and bound `Scalar` (#2379)
- `ops::MulByGeneratorVartime` trait ([#2381])
- `SecretKey::from_pem` (#2387)
- `SecretKey::from_der` (#2408)
- `hazmat` module with `FieldArithmetic` trait (#2458)
- `Double::double_in_place` (#2464)

## Changed
- Migrate from `generic-array` to `hybrid-array` (#1462)
- Rename `LinearCombinationExt` => `LinearCombination`; replacing old
  trait (#1501)
- Edition changed to 2024 and MSRV bumped to 1.85 (#1759)
- Make `SecretKey::new` fallible (#1804)
- Replace `ops::Invert` trait with `crypto_bigint::Invert` (#1839)
- Rename `SecretKey::new` => `::from_scalar` (#1893)
- Replace `Reduce` trait with `crypto_bigint::Reduce` (#1949)
- Bump `serdect` dependency to v0.4 (#1978)
- Use `crypto_bigint::Odd` to represent `Curve::ORDER` (#2006)
- Bound `Curve::Uint` on `Unsigned` (#2007)
- Rename `ScalarPrimitive` => `ScalarValue` (#2008)
- Accept mixed-case hex-encoded strings in `FromStr` impl for
  `ScalarValue` (#2037)
- Deprecate `SecretKey::random` (#2086)
- Move `MockCurve` to `dev::mock_curve` (#2176)
- Bump `rand_core` to v0.10 (#2250)
- Rename `EncodedPoint` => `Sec1Point` (#2264)
- Bump `crypto-bigint` to v0.7 (#2330)
- Bump `digest` to v0.11 (#2331)
- Bump `sec1` to v0.8 (#2339)
- Bump `hkdf` dependency to v0.13 (#2349)
- Use `*Vartime` as a suffix in names (#2378)
- Bump `pkcs8` to v0.11 (#2397)
- Bump `ff` and `group` to v0.14 (#2430, #2431)
- Simplify `BatchInvert` trait (#2455)
- Replace `FieldBytesEncoding` trait with `C::FIELD_ENDIANNESS` (#2457)
- Move `Double` to `ops` module (#2465)

## Removed
- `hazmat` feature (#1599)
- `hash2curve` and `oprf` modules: moved to same-name crates (#1929)
- PKCS#8 blanket impls for SEC1 private key traits (#1930)
- `ShrAssign` bound on `Scalar`s (#1938)
- JWK support: migrated to `jose-jwk` crate (#1963)
- `weierstrass` module (#2005)
- `bits` feature (#2417)

## Fixed
- Include curve OID in SEC1 private keys (#1707, #1933)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant