Skip to content

Conversation

@tarcieri
Copy link
Member

This came up with elliptic-curve and sec1 as I was working on dhkem:

error[E0277]: `<C as elliptic_curve::Curve>::FieldBytesSize` doesn't implement `Debug`
  --> dhkem/src/ecdh_kem.rs:80:5
     |
     80 | /     fn encapsulate_with_rng<R: TryCryptoRng + ?Sized>(
     81 | |         &self,
     82 | |         rng: &mut R,
     83 | |     ) -> Result<(PublicKey<C>, SharedSecret<C>),
     Self::Error> {
        |
        |_____________________________________________________________^
        the trait `Debug` is not implemented for `<C as
        elliptic_curve::Curve>::FieldBytesSize`

sec1::point::ModulusSize bounds on Debug, but elliptic_curve::Curve::FieldBytesSize does not. Yet for whatever reason in elliptic-curve it's able to get away with:

FieldBytesSize<C>: ModulusSize

Instead of adding a Debug bound to Curve::FieldBytesSize I thought I would add it here instead to solve this problem for good.

This shouldn't be breaking, because ArraySize bounds on typenum::Unsigned, which means it's impossible for 3rd party crates to impl as they would need to add impls to a foreign type which isn't allowed by the orphan rules.

This came up with `elliptic-curve` and `sec1` as I was working on
`dhkem`:

error[E0277]: `<C as elliptic_curve::Curve>::FieldBytesSize` doesn't
implement `Debug`
  --> dhkem/src/ecdh_kem.rs:80:5
     |
     80 | /     fn encapsulate_with_rng<R: TryCryptoRng + ?Sized>(
     81 | |         &self,
     82 | |         rng: &mut R,
     83 | |     ) -> Result<(PublicKey<C>, SharedSecret<C>),
     Self::Error> {
        |
        |_____________________________________________________________^
        the trait `Debug` is not implemented for `<C as
        elliptic_curve::Curve>::FieldBytesSize`

`sec1::point::ModulusSize` bounds on `Debug`, but
`elliptic_curve::Curve::FieldBytesSize` does not. Yet for whatever
reason in `elliptic-curve` it's able to get away with:

    FieldBytesSize<C>: ModulusSize

Instead of adding a `Debug` bound to `Curve::FieldBytesSize` I thought I
would add it here instead to solve this problem for good.

This shouldn't be breaking, because `ArraySize` bounds on
`typenum::Unsigned`, which means it's impossible for 3rd party crates to
impl as they would need to add impls to a foreign type which isn't
allowed by the orphan rules.
@tarcieri tarcieri merged commit ae8af5f into master Jan 22, 2026
14 checks passed
@tarcieri tarcieri deleted the add-debug-bound-to-array-size branch January 22, 2026 20:59
@tarcieri tarcieri mentioned this pull request Jan 22, 2026
tarcieri added a commit that referenced this pull request Jan 22, 2026
### Added
- Optional dependency on `zerocopy` with impls for `Array` (#162)
- `Debug` bound to `ArraySize` (#165)
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.

2 participants