Skip to content

elliptic-curve: extract NonIdentity/NonZeroScalar casting methods#1903

Merged
tarcieri merged 2 commits into
masterfrom
elliptic-curve/conversion-methods
Jun 14, 2025
Merged

elliptic-curve: extract NonIdentity/NonZeroScalar casting methods#1903
tarcieri merged 2 commits into
masterfrom
elliptic-curve/conversion-methods

Conversation

@tarcieri

@tarcieri tarcieri commented Jun 14, 2025

Copy link
Copy Markdown
Member

These methods encapsulate safely casting references for arrays and slices of NonIdentity<P> to array/slice references to the inner P type, and the same for NonZeroScalar and its inner Scalar<C> type.

Note the choice of method names follows from similar ones in hybrid-array: https://docs.rs/hybrid-array/latest/hybrid_array/struct.Array.html#method.cast_slice_to_core

cc @daxpedda

These methods encapsulate safely casting references to arrays and slices
of `NonIdentity<P>` to array/slice references to the inner `P` type.
Comment on lines -127 to -135
// Ensure `array::map()` can be optimized to a `memcpy`.
debug_assert_eq!(
size_of::<P::AffineRepr>(),
size_of::<NonIdentity<P::AffineRepr>>()
);
debug_assert_eq!(
align_of::<P::AffineRepr>(),
align_of::<NonIdentity<P::AffineRepr>>()
);

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I removed these because these properties should always hold true for a repr(transparent) newtype

@tarcieri tarcieri force-pushed the elliptic-curve/conversion-methods branch from ddb3c70 to 7126544 Compare June 14, 2025 00:36
@tarcieri tarcieri changed the title elliptic-curve: extract NonIdentity casting methods elliptic-curve: extract NonIdentity/NonZeroScalar casting methods Jun 14, 2025
@tarcieri tarcieri merged commit 93974c9 into master Jun 14, 2025
14 checks passed
@tarcieri tarcieri deleted the elliptic-curve/conversion-methods branch June 14, 2025 01:35
@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