4 Commits
Author SHA1 Message Date
vxrenovateandbreakingbread 0d257aaf78 chore: update RustCrypto deps to stable (#8)
Rust CI / cargo fmt (push) Successful in 3s
Rust CI / cargo clippy (push) Successful in 1m25s
Rust CI / test (1.90.0 / no backend / no frontend) (push) Successful in 2m28s
Rust CI / test (stable / no backend / no frontend) (push) Successful in 2m27s
Rust CI / test (1.90.0 / no backend / --features argon2) (push) Successful in 2m32s
Rust CI / test (stable / no backend / --features serde) (push) Successful in 2m53s
Rust CI / test (stable / no backend / --features argon2) (push) Successful in 2m34s
Rust CI / test (1.90.0 / no backend / --features serde) (push) Successful in 2m51s
Rust CI / test (stable / --features curve25519 / no frontend) (push) Successful in 2m28s
Rust CI / test (1.90.0 / --features curve25519 / --features serde) (push) Successful in 2m55s
Rust CI / test (1.90.0 / --features curve25519 / no frontend) (push) Successful in 2m27s
Rust CI / test (1.90.0 / --features curve25519 / --features argon2) (push) Successful in 2m37s
Rust CI / test (stable / --features curve25519 / --features argon2) (push) Successful in 2m36s
Rust CI / test (1.90.0 / --features ecdsa / no frontend) (push) Successful in 2m50s
Rust CI / test (1.90.0 / --features ecdsa / --features argon2) (push) Successful in 2m56s
Rust CI / test (stable / --features curve25519 / --features serde) (push) Successful in 2m56s
Rust CI / test (stable / --features ecdsa / no frontend) (push) Successful in 2m48s
Rust CI / test (stable / --features ecdsa / --features serde) (push) Successful in 3m16s
Rust CI / test (stable / --features ecdsa / --features argon2) (push) Successful in 2m56s
Rust CI / test (1.90.0 / --features ecdsa / --features serde) (push) Successful in 3m17s
Rust CI / test (1.90.0 / --features ed25519 / no frontend) (push) Successful in 2m50s
Rust CI / test (1.90.0 / --features ed25519 / --features argon2) (push) Successful in 2m57s
Rust CI / test (stable / --features ed25519 / --features argon2) (push) Successful in 3m0s
Rust CI / test (stable / --features ed25519 / no frontend) (push) Successful in 2m52s
Rust CI / test (1.90.0 / --features ed25519 / --features serde) (push) Successful in 3m20s
Rust CI / test (1.90.0 / --features ristretto255 / no frontend) (push) Successful in 3m0s
Rust CI / test (stable / --features ed25519 / --features serde) (push) Successful in 3m19s
Rust CI / test (stable / --features ristretto255 / --features argon2) (push) Successful in 3m10s
Rust CI / test (stable / --features ristretto255 / no frontend) (push) Successful in 3m2s
Rust CI / test (1.90.0 / --features ristretto255 / --features argon2) (push) Successful in 3m4s
Rust CI / test (1.90.0 / --features ristretto255 / --features serde) (push) Successful in 3m30s
Rust CI / test (stable / --features ristretto255 / --features serde) (push) Successful in 3m31s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Successful in 5m7s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Successful in 5m19s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Successful in 6m26s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Failing after 10m23s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Failing after 19m30s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Failing after 51s
Rust CI / test (stable / --features ristretto255,kem / no frontend) (push) Successful in 3m49s
Rust CI / test (1.90.0 / --features ristretto255,kem / no frontend) (push) Failing after 1m7s
Rust CI / test (stable / --features ristretto255,kem / --features argon2) (push) Successful in 3m55s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features argon2) (push) Successful in 3m57s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features serde) (push) Successful in 4m21s
Rust CI / test (stable / --features ristretto255,kem / --features serde) (push) Successful in 4m23s
Rust CI / test simple_login example (push) Successful in 19s
Rust CI / test digital_locker example (push) Successful in 17s
Rust CI / cargo bench compilation () (push) Successful in 1m41s
Rust CI / cargo bench compilation (--features ristretto255) (push) Successful in 1m52s
Rust CI / cargo bench compilation (--features ristretto255,kem) (push) Successful in 2m26s
Rust CI / no-std (wasm32-unknown-unknown / no backend) (push) Successful in 27s
Rust CI / no-std (thumbv6m-none-eabi / ecdsa) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / ecdsa) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255,curve25519,ecdsa,ed25519) (push) Successful in 17s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255,curve25519,ecdsa,ed25519) (push) Successful in 18s
Rust CI / cargo audit (push) Successful in 5s
Rust CI / no-std (thumbv6m-none-eabi / no backend) (push) Successful in 27s
Rust CI / no-std (thumbv6m-none-eabi / curve25519) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / curve25519) (push) Successful in 28s
Rust CI / no-std (wasm32-unknown-unknown / ed25519) (push) Successful in 27s
Rust CI / no-std (thumbv6m-none-eabi / ed25519) (push) Successful in 28s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255) (push) Successful in 27s
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [curve25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek) ([source](https://github.com/dalek-cryptography/curve25519-dalek/tree/HEAD/curve25519-dalek)) | dependencies | patch | `5.0.0-rc.1` → `5.0.0` |
| [ed25519-dalek](https://github.com/dalek-cryptography/curve25519-dalek) ([source](https://github.com/dalek-cryptography/curve25519-dalek/tree/HEAD/ed25519-dalek)) | dependencies | patch | `3.0.0-rc.1` → `3.0.0` |
| [p256](https://github.com/RustCrypto/elliptic-curves/tree/master/p256) ([source](https://github.com/RustCrypto/elliptic-curves)) | dev-dependencies | patch | `0.14.0-rc.15` → `0.14.0` |
| [p384](https://github.com/RustCrypto/elliptic-curves/tree/master/p384) ([source](https://github.com/RustCrypto/elliptic-curves)) | dev-dependencies | patch | `0.14.0-rc.15` → `0.14.0` |

---

### Release Notes

<details>
<summary>dalek-cryptography/curve25519-dalek (curve25519-dalek)</summary>

### [`v5.0.0`](https://github.com/dalek-cryptography/curve25519-dalek/blob/HEAD/curve25519-dalek/CHANGELOG.md#500---2026-07-06)

##### Breaking Changes

- Update edition to 2024
- Update the MSRV from 1.60 to 1.85
- Remove `group-bits` feature due to soundness issues with underlying trait ([#&#8203;909](https://github.com/dalek-cryptography/curve25519-dalek/pull/909))
- Re-export `rand_core` ([#&#8203;908](https://github.com/dalek-cryptography/curve25519-dalek/pull/908))
- Rename `Scalar::batch_invert` -> `Scalar::invert_batch` for consistency. Also make it no-alloc. ([#&#8203;789](https://github.com/dalek-cryptography/curve25519-dalek/pull/789))
- Remove deprecated functions `FieldElement::as_bytes()` and `EdwardsPoint::nonspec_map_to_curve()` ([#&#8203;778](https://github.com/dalek-cryptography/curve25519-dalek/pull/778))
- Upgrade `rand_core` dependency to v0.10.0
- Upgrade `digest` and `sha2` deps

##### Other Changes

- Perf: Use maximum available NAF window size in `VartimePrecomputedStraus` ([#&#8203;848](https://github.com/dalek-cryptography/curve25519-dalek/pull/848))
- Perf: Skip checking 8 candidate points in `RistrettoPoint::lizard_decode` ([#&#8203;882](https://github.com/dalek-cryptography/curve25519-dalek/pull/882))
- Add Lizard bytes-to-point injection for Ristretto. Gated under `lizard` feature. ([#&#8203;826](https://github.com/dalek-cryptography/curve25519-dalek/pull/826))
- Add an allocating batch inversion called `Scalar::invert_batch_alloc` ([#&#8203;789](https://github.com/dalek-cryptography/curve25519-dalek/pull/789))
- Add `Scalar::div_by_2` ([#&#8203;805](https://github.com/dalek-cryptography/curve25519-dalek/pull/805))
- Add `EdwardsPoint::hash_to_curve` ([#&#8203;786](https://github.com/dalek-cryptography/curve25519-dalek/pull/786))
- Undeprecate `Scalar::from_bits()` ([#&#8203;780](https://github.com/dalek-cryptography/curve25519-dalek/pull/780))
- Use constant-time equality testing for compressed Ristretto and Edwards points, rather than autoderived equality

</details>

<details>
<summary>dalek-cryptography/curve25519-dalek (ed25519-dalek)</summary>

### [`v3.0.0`](https://github.com/dalek-cryptography/curve25519-dalek/blob/HEAD/ed25519-dalek/CHANGELOG.md#300---2026-07-06)

##### Breaking Changes

- Update edition to 2024
- Update the MSRV from 1.60 to 1.85
- Remove `std` feature now that `error::Error` is in `core`
- Make signing and verifying keys use `pkcs8::spki::SignatureAlgorithmIdentifier` instead of `DynSignatureAlgorithmIdentifier` ([#&#8203;779](https://github.com/dalek-cryptography/curve25519-dalek/pull/779))
- Upgrade `ed25519` dependency to v3.0.0
- Upgrade `signature` dependency to v3.0.0
- Upgrade `sha2` and `sha3` dependencies to v0.11
- Upgrade `getrandom` dependency to v0.4
- Upgrade `chacha20` dependency to v0.10
- Upgrade `rand_core` dependency to v0.10.0

##### Other Changes

- Re-export `rand_core` ([#&#8203;908](https://github.com/dalek-cryptography/curve25519-dalek/pull/908))
- Add allocation-free `EdwardsPoint::compress_batch` ([#&#8203;832](https://github.com/dalek-cryptography/curve25519-dalek/pull/832))
- Add `strobe-rs` dependency and delete vendored STROBE impl ([#&#8203;895](https://github.com/dalek-cryptography/curve25519-dalek/pull/895))
- Impl `MultipartSigner` and `MultipartVerifier` for `SigningKey` and `VerifyingKey` ([#&#8203;764](https://github.com/dalek-cryptography/curve25519-dalek/pull/764))
- Impl `KeySizeUser`, `TryKeyInit`, and `Generate` for `SigningKey`. Also impl `KeySizeUser` for `VerifyingKey` [#&#8203;733](https://github.com/dalek-cryptography/curve25519-dalek/pull/733)

</details>

---

### Configuration

📅 **Schedule**: (UTC)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNTIuMSIsInVwZGF0ZWRJblZlciI6IjQzLjI1Mi4xIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbXX0=-->

---------

Co-authored-by: UneBaguette <[email protected]>
Reviewed-on: #8
Co-authored-by: Renovate Bot <[email protected]>
Co-committed-by: Renovate Bot <[email protected]>
2026-07-08 23:43:23 +02:00
breakingbread 0e9eeb10b2 chore: commit Cargo.lock, update gitignore per current Cargo guidance
Rust CI / cargo clippy (push) Successful in 1m35s
Rust CI / cargo fmt (push) Successful in 14s
Rust CI / test (1.90.0 / no backend / --features argon2) (push) Successful in 2m30s
Rust CI / test (1.90.0 / no backend / no frontend) (push) Successful in 2m25s
Rust CI / test (stable / no backend / no frontend) (push) Successful in 2m26s
Rust CI / test (stable / no backend / --features argon2) (push) Successful in 2m33s
Rust CI / test (1.90.0 / no backend / --features serde) (push) Successful in 2m53s
Rust CI / test (stable / no backend / --features serde) (push) Successful in 2m49s
Rust CI / test (1.90.0 / --features curve25519 / no frontend) (push) Successful in 2m28s
Rust CI / test (stable / --features curve25519 / no frontend) (push) Successful in 2m28s
Rust CI / test (1.90.0 / --features curve25519 / --features argon2) (push) Successful in 2m34s
Rust CI / test (stable / --features curve25519 / --features argon2) (push) Successful in 2m34s
Rust CI / test (1.90.0 / --features curve25519 / --features serde) (push) Successful in 2m57s
Rust CI / test (stable / --features curve25519 / --features serde) (push) Successful in 2m56s
Rust CI / test (1.90.0 / --features ecdsa / no frontend) (push) Successful in 2m47s
Rust CI / test (stable / --features ecdsa / no frontend) (push) Successful in 2m48s
Rust CI / test (1.90.0 / --features ecdsa / --features argon2) (push) Successful in 2m55s
Rust CI / test (stable / --features ecdsa / --features argon2) (push) Successful in 2m57s
Rust CI / test (1.90.0 / --features ecdsa / --features serde) (push) Successful in 3m16s
Rust CI / test (stable / --features ecdsa / --features serde) (push) Successful in 3m17s
Rust CI / test (1.90.0 / --features ed25519 / no frontend) (push) Successful in 2m50s
Rust CI / test (1.90.0 / --features ed25519 / --features argon2) (push) Successful in 2m55s
Rust CI / test (stable / --features ed25519 / no frontend) (push) Successful in 2m51s
Rust CI / test (1.90.0 / --features ristretto255 / no frontend) (push) Successful in 3m0s
Rust CI / test (stable / --features ristretto255 / no frontend) (push) Successful in 3m1s
Rust CI / test (stable / --features ed25519 / --features argon2) (push) Successful in 2m57s
Rust CI / test (1.90.0 / --features ed25519 / --features serde) (push) Successful in 3m17s
Rust CI / test (stable / --features ed25519 / --features serde) (push) Successful in 3m18s
Rust CI / test (1.90.0 / --features ristretto255 / --features argon2) (push) Successful in 3m5s
Rust CI / test (stable / --features ristretto255 / --features argon2) (push) Successful in 3m8s
Rust CI / test (1.90.0 / --features ristretto255 / --features serde) (push) Successful in 3m25s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Successful in 5m16s
Rust CI / test (stable / --features ristretto255 / --features serde) (push) Successful in 3m30s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Successful in 5m4s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Successful in 6m6s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Successful in 5m10s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Successful in 5m56s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Successful in 5m41s
Rust CI / test (stable / --features ristretto255,kem / --features argon2) (push) Successful in 3m56s
Rust CI / test (1.90.0 / --features ristretto255,kem / no frontend) (push) Successful in 3m49s
Rust CI / test (stable / --features ristretto255,kem / no frontend) (push) Successful in 3m48s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features argon2) (push) Successful in 3m56s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features serde) (push) Successful in 4m23s
Rust CI / test (stable / --features ristretto255,kem / --features serde) (push) Successful in 4m26s
Rust CI / test simple_login example (push) Successful in 19s
Rust CI / test digital_locker example (push) Successful in 17s
Rust CI / cargo bench compilation (--features ristretto255) (push) Successful in 1m50s
Rust CI / cargo bench compilation () (push) Successful in 1m43s
Rust CI / cargo bench compilation (--features ristretto255,kem) (push) Successful in 2m30s
Rust CI / cargo audit (push) Successful in 6s
Rust CI / no-std (wasm32-unknown-unknown / ed25519) (push) Successful in 17s
Rust CI / no-std (thumbv6m-none-eabi / no backend) (push) Successful in 17s
Rust CI / no-std (wasm32-unknown-unknown / no backend) (push) Successful in 17s
Rust CI / no-std (thumbv6m-none-eabi / ecdsa) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / ecdsa) (push) Successful in 27s
Rust CI / no-std (thumbv6m-none-eabi / ed25519) (push) Successful in 28s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255) (push) Successful in 28s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255,curve25519,ecdsa,ed25519) (push) Successful in 28s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255,curve25519,ecdsa,ed25519) (push) Successful in 28s
Rust CI / no-std (thumbv6m-none-eabi / curve25519) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / curve25519) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255) (push) Successful in 27s
2026-07-05 00:15:13 +02:00
breakingbread 09286d34fc feat: replace deprecated ExpandedKeyEncoding with seed serialization, derive ZeroizeOnDrop (#7)
Rust CI / cargo clippy (push) Successful in 1m23s
Rust CI / cargo fmt (push) Successful in 3s
Rust CI / test (1.90.0 / no backend / no frontend) (push) Successful in 2m24s
Publish / publish (release) Successful in 57s
Rust CI / test (stable / no backend / no frontend) (push) Successful in 2m24s
Rust CI / test (1.90.0 / no backend / --features serde) (push) Successful in 2m51s
Rust CI / test (1.90.0 / no backend / --features argon2) (push) Successful in 2m32s
Rust CI / test (stable / no backend / --features argon2) (push) Successful in 2m33s
Rust CI / test (1.90.0 / --features curve25519 / no frontend) (push) Successful in 2m30s
Rust CI / test (stable / no backend / --features serde) (push) Successful in 2m53s
Rust CI / test (stable / --features curve25519 / no frontend) (push) Successful in 2m28s
Rust CI / test (1.90.0 / --features curve25519 / --features argon2) (push) Successful in 2m35s
Rust CI / test (stable / --features curve25519 / --features argon2) (push) Successful in 2m37s
Rust CI / test (1.90.0 / --features curve25519 / --features serde) (push) Successful in 2m57s
Rust CI / test (stable / --features curve25519 / --features serde) (push) Successful in 2m58s
Rust CI / test (1.90.0 / --features ecdsa / no frontend) (push) Successful in 2m50s
Rust CI / test (stable / --features ecdsa / no frontend) (push) Successful in 2m49s
Rust CI / test (1.90.0 / --features ecdsa / --features argon2) (push) Successful in 2m58s
Rust CI / test (stable / --features ecdsa / --features serde) (push) Successful in 3m20s
Rust CI / test (stable / --features ecdsa / --features argon2) (push) Successful in 2m59s
Rust CI / test (1.90.0 / --features ecdsa / --features serde) (push) Successful in 3m19s
Rust CI / test (1.90.0 / --features ed25519 / no frontend) (push) Successful in 2m52s
Rust CI / test (1.90.0 / --features ed25519 / --features argon2) (push) Successful in 2m58s
Rust CI / test (stable / --features ed25519 / no frontend) (push) Successful in 2m53s
Rust CI / test (stable / --features ed25519 / --features argon2) (push) Successful in 3m0s
Rust CI / test (1.90.0 / --features ed25519 / --features serde) (push) Successful in 3m20s
Rust CI / test (stable / --features ed25519 / --features serde) (push) Successful in 3m18s
Rust CI / test (1.90.0 / --features ristretto255 / no frontend) (push) Successful in 2m59s
Rust CI / test (stable / --features ristretto255 / no frontend) (push) Successful in 3m3s
Rust CI / test (1.90.0 / --features ristretto255 / --features argon2) (push) Successful in 3m8s
Rust CI / test (stable / --features ristretto255 / --features argon2) (push) Successful in 3m13s
Rust CI / test (1.90.0 / --features ristretto255 / --features serde) (push) Successful in 3m28s
Rust CI / test (stable / --features ristretto255 / --features serde) (push) Successful in 3m32s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Successful in 5m20s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Successful in 5m9s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Successful in 5m29s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Successful in 5m12s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Successful in 5m53s
Rust CI / test (1.90.0 / --features ristretto255,kem / no frontend) (push) Successful in 3m54s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Successful in 5m45s
Rust CI / test (stable / --features ristretto255,kem / no frontend) (push) Successful in 3m51s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features argon2) (push) Successful in 4m1s
Rust CI / test (stable / --features ristretto255,kem / --features argon2) (push) Successful in 3m58s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features serde) (push) Successful in 4m25s
Rust CI / test (stable / --features ristretto255,kem / --features serde) (push) Successful in 4m23s
Rust CI / test simple_login example (push) Successful in 18s
Rust CI / test digital_locker example (push) Successful in 17s
Rust CI / cargo bench compilation () (push) Successful in 1m44s
Rust CI / cargo bench compilation (--features ristretto255) (push) Successful in 1m54s
Rust CI / cargo bench compilation (--features ristretto255,kem) (push) Successful in 2m28s
Rust CI / cargo audit (push) Successful in 8s
Rust CI / no-std (wasm32-unknown-unknown / curve25519) (push) Successful in 18s
Rust CI / no-std (thumbv6m-none-eabi / ed25519) (push) Successful in 30s
Rust CI / no-std (wasm32-unknown-unknown / ed25519) (push) Successful in 29s
Rust CI / no-std (thumbv6m-none-eabi / no backend) (push) Successful in 17s
Rust CI / no-std (wasm32-unknown-unknown / ecdsa) (push) Successful in 18s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255) (push) Successful in 18s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255,curve25519,ecdsa,ed25519) (push) Successful in 29s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255) (push) Successful in 28s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255,curve25519,ecdsa,ed25519) (push) Successful in 19s
Rust CI / no-std (thumbv6m-none-eabi / curve25519) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / no backend) (push) Successful in 19s
Rust CI / no-std (thumbv6m-none-eabi / ecdsa) (push) Successful in 27s
- Add ZeroizeOnDrop bound to Hash trait
- Replace manual Drop impls on Ke2Builder and KemKe2Builder with derive_where
- Migrate KEM decapsulation key serialization from expanded form to 64-byte seed (KeyInit/KeyExport)
- Fix voprf deserialization to pass exact-length slices
- Bump voprf-vx to 1.0.0-rc.1
- Regenerate test vectors

Reviewed-on: #7
Co-authored-by: UneBaguette <[email protected]>
Co-committed-by: UneBaguette <[email protected]>
2026-07-03 13:06:30 +02:00
breakingbread b9b8699ee7 chore: bump to v1.0.0-rc.0, fix doc (#6)
Rust CI / cargo fmt (push) Successful in 3s
Rust CI / test (1.90.0 / no backend / --features argon2) (push) Has been cancelled
Rust CI / test (stable / no backend / --features argon2) (push) Has been cancelled
Rust CI / test (1.90.0 / no backend / --features serde) (push) Has been cancelled
Rust CI / test (stable / no backend / --features serde) (push) Has been cancelled
Rust CI / test (1.90.0 / --features curve25519 / no frontend) (push) Has been cancelled
Rust CI / cargo clippy (push) Successful in 1m27s
Rust CI / test (1.90.0 / no backend / no frontend) (push) Failing after 1m35s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Has been cancelled
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ristretto255,kem / no frontend) (push) Has been cancelled
Rust CI / test (stable / --features ristretto255,kem / no frontend) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ristretto255,kem / --features argon2) (push) Has been cancelled
Rust CI / test (stable / --features ristretto255,kem / --features argon2) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ristretto255,kem / --features serde) (push) Has been cancelled
Rust CI / test (stable / --features ristretto255,kem / --features serde) (push) Has been cancelled
Rust CI / test simple_login example (push) Has been cancelled
Rust CI / test digital_locker example (push) Has been cancelled
Rust CI / test (stable / --features curve25519 / no frontend) (push) Has been cancelled
Rust CI / test (1.90.0 / --features curve25519 / --features argon2) (push) Has been cancelled
Rust CI / test (stable / --features curve25519 / --features argon2) (push) Has been cancelled
Rust CI / test (1.90.0 / --features curve25519 / --features serde) (push) Has been cancelled
Rust CI / test (stable / --features curve25519 / --features serde) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ecdsa / no frontend) (push) Has been cancelled
Rust CI / test (stable / --features ecdsa / no frontend) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ecdsa / --features argon2) (push) Has been cancelled
Rust CI / test (stable / --features ecdsa / --features argon2) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ecdsa / --features serde) (push) Has been cancelled
Rust CI / test (stable / --features ecdsa / --features serde) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ed25519 / no frontend) (push) Has been cancelled
Rust CI / test (stable / --features ed25519 / no frontend) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ed25519 / --features argon2) (push) Has been cancelled
Rust CI / test (stable / --features ed25519 / --features argon2) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ed25519 / --features serde) (push) Has been cancelled
Rust CI / test (stable / --features ed25519 / --features serde) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ristretto255 / no frontend) (push) Has been cancelled
Rust CI / test (stable / --features ristretto255 / no frontend) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ristretto255 / --features argon2) (push) Has been cancelled
Rust CI / test (stable / --features ristretto255 / --features argon2) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ristretto255 / --features serde) (push) Has been cancelled
Rust CI / test (stable / --features ristretto255 / --features serde) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Has been cancelled
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Has been cancelled
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Has been cancelled
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Has been cancelled
Rust CI / cargo bench compilation () (push) Has been cancelled
Rust CI / cargo bench compilation (--features ristretto255) (push) Has been cancelled
Rust CI / cargo bench compilation (--features ristretto255,kem) (push) Has been cancelled
Rust CI / cargo audit (push) Has been cancelled
Rust CI / no-std (thumbv6m-none-eabi / ed25519) (push) Has been cancelled
Rust CI / test (stable / no backend / no frontend) (push) Has been cancelled
Rust CI / no-std (wasm32-unknown-unknown / ecdsa) (push) Has been cancelled
Rust CI / no-std (wasm32-unknown-unknown / ristretto255) (push) Has been cancelled
Rust CI / no-std (wasm32-unknown-unknown / ristretto255,curve25519,ecdsa,ed25519) (push) Has been cancelled
Rust CI / no-std (wasm32-unknown-unknown / curve25519) (push) Has been cancelled
Rust CI / no-std (thumbv6m-none-eabi / ecdsa) (push) Has been cancelled
Rust CI / no-std (wasm32-unknown-unknown / ed25519) (push) Has been cancelled
Rust CI / no-std (thumbv6m-none-eabi / no backend) (push) Has been cancelled
Rust CI / no-std (wasm32-unknown-unknown / no backend) (push) Has been cancelled
Rust CI / no-std (thumbv6m-none-eabi / curve25519) (push) Has been cancelled
Rust CI / no-std (thumbv6m-none-eabi / ristretto255) (push) Has been cancelled
Rust CI / no-std (thumbv6m-none-eabi / ristretto255,curve25519,ecdsa,ed25519) (push) Has been cancelled
Reviewed-on: #6
Co-authored-by: UneBaguette <[email protected]>
Co-committed-by: UneBaguette <[email protected]>
2026-07-02 23:21:28 +02:00
13 changed files with 2513 additions and 640 deletions
+11 -5
View File
@@ -1,6 +1,12 @@
.vs
.vscode/
src/.DS_Store
/target
Cargo.lock
# Generated by Cargo
# will have compiled files and executables
debug/
target/
pkg/
demo/
# These are backup files generated by rustfmt
**/*.rs.bk
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
+14 -2
View File
@@ -1,12 +1,24 @@
# Changelog
## 1.0.0-pre.1 (July 1, 2026)
## 1.0.0-rc.0 (July 3, 2026)
* Fixed doc showing incorrect MSRV
* Fixed readme incorrect doc link
* Bump `ecdsa` to `0.17`
* Bump `voprf-vx` to `1.0.0-rc.1`
* Added `ZeroizeOnDrop` bound to `Hash` trait
* Replaced manual `Drop` impls on `Ke2Builder` and `KemKe2Builder` with `#[derive_where(ZeroizeOnDrop)]`
* Replaced deprecated `ExpandedKeyEncoding` with seed-based serialization (`KeyInit` / `KeyExport`) for KEM decapsulation keys
* Fixed deserialization of `voprf` types to pass exact-length slices (compatibility with `voprf` trailing bytes rejection)
* Regenerated test vectors
## 1.0.0-pre.1 (July 2, 2026)
* Fixed README package name
* Implement `zeroize` feature on `argon2`, `ed25519-dalek`, `hmac`, `chacha20poly1305` and `sha2`
* Removed `rand_core` dependency to use it through `rand` re-export
## 1.0.0-pre.0 (June 29, 2026)
## 1.0.0-pre.0 (July 1, 2026)
Forked from [facebook/opaque-ke](https://github.com/facebook/opaque-ke/) at `4.1.0-pre.2`.
Generated
+1903
View File
File diff suppressed because it is too large Load Diff
+8 -8
View File
@@ -14,7 +14,7 @@ name = "opaque-vx"
readme = "README.md"
repository = "https://github.com/vexahub/opaque-vx"
rust-version = "1.90"
version = "1.0.0-pre.1"
version = "1.0.0-rc.0"
[features]
argon2 = ["dep:argon2"]
@@ -38,20 +38,20 @@ serde = [
std = ["dep:getrandom", "rand/std"]
[dependencies]
argon2 = { version = "0.6.0-rc", default-features = false, features = [
argon2 = { version = "0.6.0-rc.8", default-features = false, features = [
"zeroize",
"alloc",
], optional = true }
curve25519-dalek = { version = "5.0.0-rc", default-features = false, features = [
curve25519-dalek = { version = "5", default-features = false, features = [
"zeroize",
], optional = true }
derive-where = { version = "1.6", features = ["zeroize-on-drop"] }
digest = { version = "0.11", features = ["zeroize"] }
displaydoc = { version = "0.2", default-features = false }
ecdsa = { version = "0.17.0-rc.23", default-features = false, features = [
ecdsa = { version = "0.17", default-features = false, features = [
"algorithm",
], optional = true }
ed25519-dalek = { version = "3.0.0-rc", default-features = false, features = [
ed25519-dalek = { version = "3", default-features = false, features = [
"zeroize",
"digest",
"hazmat",
@@ -69,7 +69,7 @@ serde = { version = "1", default-features = false, features = [
"derive",
], optional = true }
subtle = { version = "2.6", default-features = false }
voprf = { package = "voprf-vx", version = "1.0.0-pre.1", default-features = false, features = [
voprf = { package = "voprf-vx", version = "1.0.0-rc.1", default-features = false, features = [
"danger",
] }
zeroize = { version = "1.9", features = ["zeroize_derive"] }
@@ -85,13 +85,13 @@ criterion = "0.8"
cryptoki = "0.12"
elliptic-curve = { version = "0.14", features = ["alloc", "pkcs8"] }
hex = "0.4"
p256 = { version = "0.14.0-rc.15", default-features = false, features = [
p256 = { version = "0.14", default-features = false, features = [
"ecdsa",
"hash2curve",
"pkcs8",
"oprf",
] }
p384 = { version = "0.14.0-rc.15", default-features = false, features = [
p384 = { version = "0.14", default-features = false, features = [
"hash2curve",
"pkcs8",
"oprf",
+2 -2
View File
@@ -20,7 +20,7 @@ OPAQUE is a PKI-free aPAKE that is secure against pre-computation attacks and ca
Documentation
-------------
The API can be found [here](https://docs.rs/opaque-ke-vx/) along with an example for usage. More examples can be found
The API can be found [here](https://docs.rs/opaque-vx/) along with an example for usage. More examples can be found
in
the [examples](./examples) directory.
@@ -30,7 +30,7 @@ Installation
Add the following line to the dependencies of your `Cargo.toml`:
```
opaque-ke = { package = "opaque-vx", version = "1.0.0-pre.0" }
opaque-vx = "1.0.0-rc.0"
```
### Minimum Supported Rust Version
+3 -1
View File
@@ -48,6 +48,7 @@ pub trait Hash:
+ FixedOutputReset
+ CoreProxy
+ Clone
+ zeroize::ZeroizeOnDrop
where
<Self as CoreProxy>::Core: ProxyHash,
<<Self as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: IsLess<U256>,
@@ -64,7 +65,8 @@ impl<
+ BlockSizeUser
+ FixedOutputReset
+ CoreProxy
+ Clone,
+ Clone
+ zeroize::ZeroizeOnDrop,
> Hash for T
where
<T as CoreProxy>::Core: ProxyHash,
+3 -36
View File
@@ -14,7 +14,6 @@ use generic_array::typenum::{IsLess, Le, NonZero, Sum, U256};
use generic_array::{ArrayLength, GenericArray};
use rand::{CryptoRng, Rng};
use subtle::{ConstantTimeEq, CtOption};
use zeroize::{Zeroize, ZeroizeOnDrop};
use super::{
Deserialize, GenerateKe1Result, GenerateKe2Result, GenerateKe3Result, KeyExchange, Serialize,
@@ -69,7 +68,7 @@ pub struct Ke2State<H: OutputSizeUser> {
serialize = "H: serde::Serialize, PublicKey<G>: serde::Serialize",
))
)]
#[derive_where(Clone)]
#[derive_where(Clone, ZeroizeOnDrop)]
#[derive_where(Debug, Eq, Hash, PartialEq; H, PublicKey<G>)]
pub struct Ke2Builder<G: Group, H: Hash>
where
@@ -80,7 +79,9 @@ where
{
server_nonce: GenericArray<u8, NonceLen>,
transcript_hasher: H,
#[derive_where(skip(Zeroize))]
client_e_pk: PublicKey<G>,
#[derive_where(skip(Zeroize))]
server_e_pk: PublicKey<G>,
shared_secret_1: GenericArray<u8, G::PkLen>,
shared_secret_3: GenericArray<u8, G::PkLen>,
@@ -352,40 +353,6 @@ where
}
}
/// TODO: implement via derive after `Hash` gets `Zeroize` support.
impl<G: Group, H: Hash> Drop for Ke2Builder<G, H>
where
H::Core: ProxyHash,
<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: IsLess<U256>,
Le<<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize, U256>: NonZero,
OutputSize<H>: ArrayLength,
{
fn drop(&mut self) {
let Self {
server_nonce,
transcript_hasher,
client_e_pk: _,
server_e_pk: _,
shared_secret_1,
shared_secret_3,
} = self;
server_nonce.zeroize();
digest::Reset::reset(transcript_hasher);
shared_secret_1.zeroize();
shared_secret_3.zeroize();
}
}
impl<G: Group, H: Hash> ZeroizeOnDrop for Ke2Builder<G, H>
where
H::Core: ProxyHash,
<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: IsLess<U256>,
Le<<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize, U256>: NonZero,
OutputSize<H>: ArrayLength,
{
}
impl<G: Group, H: Hash> Deserialize for Ke2Message<G, H>
where
H::Core: ProxyHash,
+12 -49
View File
@@ -24,15 +24,12 @@ use digest::block_api::{CoreProxy, SmallBlockSizeUser};
use generic_array::typenum::{Cmp, IsLess, Le, NonZero, Sum, U256};
use generic_array::{ArrayLength, GenericArray};
use hybrid_array::ArraySize;
#[allow(deprecated)]
use ml_kem::ExpandedKeyEncoding;
use ml_kem::kem::{
Ciphertext as MlKemCiphertext, Decapsulate, Encapsulate, Kem as MlKemTrait, KeyExport,
Ciphertext as MlKemCiphertext, Decapsulate, Encapsulate, Kem as MlKemTrait, KeyExport, KeyInit,
KeySizeUser, TryKeyInit,
};
use rand::{CryptoRng, Rng};
use subtle::{ConstantTimeEq, CtOption};
use zeroize::{Zeroize, ZeroizeOnDrop};
use super::shared::{self, Ke1Message, Ke1State, NonceLen};
use super::{
@@ -55,7 +52,7 @@ pub trait KemCoreWrapper {
type EncapsulationKey: Clone;
/// Secret key type used for decapsulation operations.
type DecapsulationKey: Clone + ZeroizeOnDrop;
type DecapsulationKey: Clone + zeroize::ZeroizeOnDrop;
/// Length (in bytes) of the serialized public key.
type EncapsulationKeyLen: ArrayLength + ArraySize;
@@ -136,18 +133,16 @@ impl<R: Rng> rand::rand_core::TryRng for RngCompat<'_, R> {
impl<R: Rng + CryptoRng> rand::rand_core::TryCryptoRng for RngCompat<'_, R> {}
type RcEncapsulationKeyLen<K> = <<K as MlKemTrait>::EncapsulationKey as KeySizeUser>::KeySize;
#[allow(deprecated)]
type RcDecapsulationKeyLen<K> =
<<K as MlKemTrait>::DecapsulationKey as ExpandedKeyEncoding>::EncodedSize;
type RcDecapsulationKeyLen<K> = <<K as MlKemTrait>::DecapsulationKey as KeySizeUser>::KeySize;
type RcCiphertextLen<K> = <K as MlKemTrait>::CiphertextSize;
type RcSharedSecretLen<K> = <K as MlKemTrait>::SharedKeySize;
#[allow(deprecated)]
impl<K> KemCoreWrapper for K
where
K: MlKemTrait,
K::EncapsulationKey: Encapsulate<Kem = K> + KeyExport + TryKeyInit + Clone,
K::DecapsulationKey: Decapsulate<Kem = K> + ExpandedKeyEncoding + Clone + ZeroizeOnDrop,
K::DecapsulationKey:
Decapsulate<Kem = K> + KeyExport + KeyInit + Clone + zeroize::ZeroizeOnDrop,
RcEncapsulationKeyLen<K>: ArrayLength + ArraySize,
RcDecapsulationKeyLen<K>: ArrayLength + ArraySize,
RcCiphertextLen<K>: ArrayLength + ArraySize,
@@ -185,7 +180,7 @@ where
fn serialize_decapsulation_key(
key: &Self::DecapsulationKey,
) -> GenericArray<u8, Self::DecapsulationKeyLen> {
GenericArray::from_slice(key.to_expanded_bytes().as_slice()).clone()
GenericArray::from_slice(key.to_bytes().as_slice()).clone()
}
fn deserialize_decapsulation_key(
@@ -193,10 +188,9 @@ where
) -> Result<Self::DecapsulationKey, ProtocolError> {
let bytes: GenericArray<u8, RcDecapsulationKeyLen<K>> =
input.take_array("kem decapsulation key")?;
let key = ml_kem::array::Array::try_from(bytes.as_slice())
let seed = ml_kem::array::Array::try_from(bytes.as_slice())
.map_err(|_| ProtocolError::SerializationError)?;
K::DecapsulationKey::from_expanded_bytes(&key)
.map_err(|_| ProtocolError::SerializationError)
Ok(KeyInit::new(&seed))
}
fn encapsulate<R: Rng + CryptoRng>(
@@ -289,7 +283,7 @@ where
/// Server builder placeholder capturing the data needed to finish the KEM
/// exchange.
#[derive_where(Clone)]
#[derive_where(Clone, ZeroizeOnDrop)]
pub struct KemKe2Builder<G: Group, H: Hash, K: KemCoreWrapper>
where
H::Core: ProxyHash,
@@ -300,10 +294,13 @@ where
{
server_nonce: GenericArray<u8, NonceLen>,
transcript_hasher: H,
#[derive_where(skip(Zeroize))]
client_e_pk: PublicKey<G>,
#[derive_where(skip(Zeroize))]
server_e_pk: PublicKey<G>,
shared_secret_1: GenericArray<u8, G::PkLen>,
shared_secret_3: GenericArray<u8, G::PkLen>,
#[derive_where(skip(Zeroize))]
kem_encapsulation_key: GenericArray<u8, K::EncapsulationKeyLen>,
kem_ciphertext: GenericArray<u8, K::CiphertextLen>,
kem_shared_secret: GenericArray<u8, K::SharedSecretLen>,
@@ -335,40 +332,6 @@ where
/// Third message remains the same as `TripleDH`.
pub type KemKe3Message<H> = super::tripledh::Ke3Message<H>;
impl<G, H, K> Drop for KemKe2Builder<G, H, K>
where
G: Group,
H: Hash,
H::Core: ProxyHash,
<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: IsLess<U256>,
Le<<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize, U256>: NonZero,
<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: Cmp<U256>,
OutputSize<H>: ArrayLength,
K: KemCoreWrapper,
{
fn drop(&mut self) {
self.server_nonce.zeroize();
digest::Digest::reset(&mut self.transcript_hasher);
self.shared_secret_1.zeroize();
self.shared_secret_3.zeroize();
self.kem_shared_secret.zeroize();
self.kem_ciphertext.zeroize();
}
}
impl<G, H, K> ZeroizeOnDrop for KemKe2Builder<G, H, K>
where
G: Group,
H: Hash,
H::Core: ProxyHash,
<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: IsLess<U256>,
Le<<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize, U256>: NonZero,
<<H as CoreProxy>::Core as SmallBlockSizeUser>::_BlockSize: Cmp<U256>,
OutputSize<H>: ArrayLength,
K: KemCoreWrapper,
{
}
impl<G, H, K> KeyExchange for TripleDhKem<G, H, K>
where
G: Group + 'static,
+1 -1
View File
@@ -7,7 +7,7 @@
//!
//! ### Minimum Supported Rust Version
//!
//! Rust **1.87** or higher.
//! Rust **1.90** or higher.
//!
//! # Overview
//!
+22 -6
View File
@@ -233,6 +233,10 @@ impl<CS: CipherSuite> RegistrationRequest<CS> {
/// Deserialization from bytes
pub fn deserialize(input: &[u8]) -> Result<Self, ProtocolError> {
let elem_len = <OprfGroup<CS> as voprf::Group>::ElemLen::USIZE;
if input.len() < elem_len {
return Err(ProtocolError::SerializationError);
}
Ok(Self {
blinded_element: BlindedElement::deserialize(input)?,
})
@@ -260,8 +264,12 @@ impl<CS: CipherSuite> RegistrationResponse<CS> {
/// Deserialization from bytes
pub fn deserialize(mut input: &[u8]) -> Result<Self, ProtocolError> {
let evaluation_element = EvaluationElement::deserialize(input)?;
input = &input[EvaluationElementLen::<CS::OprfCs>::USIZE..];
let elem_len = EvaluationElementLen::<CS::OprfCs>::USIZE;
if input.len() < elem_len {
return Err(ProtocolError::SerializationError);
}
let evaluation_element = EvaluationElement::deserialize(&input[..elem_len])?;
input = &input[elem_len..];
Ok(Self {
evaluation_element,
@@ -360,8 +368,12 @@ impl<CS: CipherSuite> CredentialRequest<CS> {
where
<CS::KeyExchange as KeyExchange>::KE1Message: Deserialize,
{
let blinded_element = BlindedElement::deserialize(input)?;
*input = &input[BlindedElementLen::<CS::OprfCs>::USIZE..];
let elem_len = BlindedElementLen::<CS::OprfCs>::USIZE;
if input.len() < elem_len {
return Err(ProtocolError::SerializationError);
}
let blinded_element = BlindedElement::deserialize(&input[..elem_len])?;
*input = &input[elem_len..];
Ok(Self {
blinded_element,
@@ -415,8 +427,12 @@ impl<CS: CipherSuite> CredentialResponse<CS> {
where
<CS::KeyExchange as KeyExchange>::KE2Message: Deserialize,
{
let evaluation_element = EvaluationElement::deserialize(input)?;
input = &input[EvaluationElementLen::<CS::OprfCs>::USIZE..];
let elem_len = EvaluationElementLen::<CS::OprfCs>::USIZE;
if input.len() < elem_len {
return Err(ProtocolError::SerializationError);
}
let evaluation_element = EvaluationElement::deserialize(&input[..elem_len])?;
input = &input[elem_len..];
Ok(Self {
evaluation_element,
+12 -4
View File
@@ -289,8 +289,12 @@ impl<CS: CipherSuite> ClientRegistration<CS> {
/// Deserialization from bytes
pub fn deserialize(mut input: &[u8]) -> Result<Self, ProtocolError> {
let oprf_client = OprfClient::deserialize(input)?;
input = &input[OprfClientLen::<CS::OprfCs>::USIZE..];
let client_len = OprfClientLen::<CS::OprfCs>::USIZE;
if input.len() < client_len {
return Err(ProtocolError::SerializationError);
}
let oprf_client = OprfClient::deserialize(&input[..client_len])?;
input = &input[client_len..];
let blinded_element = BlindedElement::deserialize(input)?;
@@ -486,8 +490,12 @@ impl<CS: CipherSuite> ClientLogin<CS> {
<CS::KeyExchange as KeyExchange>::KE1Message: Deserialize + Serialize,
<CS::KeyExchange as KeyExchange>::KE1State: Deserialize + Serialize,
{
let oprf_client = OprfClient::deserialize(input)?;
input = &input[OprfClientLen::<CS::OprfCs>::USIZE..];
let client_len = OprfClientLen::<CS::OprfCs>::USIZE;
if input.len() < client_len {
return Err(ProtocolError::SerializationError);
}
let oprf_client = OprfClient::deserialize(&input[..client_len])?;
input = &input[client_len..];
Ok(Self {
oprf_client,
+3 -7
View File
@@ -738,16 +738,12 @@ fn generate_test_vectors() -> Result<(), ProtocolError> {
#[rustfmt::skip]
output.push_str(
"\
// SPDX-License-Identifier: MIT OR Apache-2.0\n\
// Copyright (c) VexaHub and contributors.\n\
// Copyright (c) Meta Platforms, Inc. and affiliates.\n\
//\n\
// This source code is dual-licensed under either the MIT license found in the\n\
// LICENSE-MIT file in the root directory of this source tree or the Apache\n\
// License, Version 2.0 found in the LICENSE-APACHE file in the root directory\n\
// of this source tree. You may select, at your option, one of the above-listed\n\
// licenses.\n\
//\n\
// To regenerate these test vectors, run:\n\
// FULL_TEST_VECTORS_FILE=src/tests/full_test_vectors.rs cargo test --features curve25519,ecdsa,ed25519 -- generate_test_vectors\n\
// FULL_TEST_VECTORS_FILE=src/tests/full_test_vectors.rs cargo test --features curve25519,ecdsa,ed25519,kem -- generate_test_vectors\n\
\n\
#![allow(clippy::duplicated_attributes)]\n\
\n",
File diff suppressed because one or more lines are too long