Skip to content

Add kem::{TryKeyInit + KeyExport} impls for encapsulation keys#188

Merged
tarcieri merged 1 commit intomasterfrom
kem/encapsulation-key-encoding
Jan 23, 2026
Merged

Add kem::{TryKeyInit + KeyExport} impls for encapsulation keys#188
tarcieri merged 1 commit intomasterfrom
kem/encapsulation-key-encoding

Conversation

@tarcieri
Copy link
Copy Markdown
Member

Also adds a KeySizeUser impl.

This is a companion PR to RustCrypto/traits#2215 which added a bound to the Encapsulate trait for TryKeyInit + KeyExport from crypto-common.

These traits both have a supertrait bound on KeySizeUser, which defines an ArraySize for a fixed-size key.

The other two provide common traits for fallible decoding and encoding respectively, where the former uses the common InvalidKey type also defined in the crypto-common crate.

This was one big missing gap for generic KEM use.

Some traits we need aren't being re-exported from kem and it doesn't do a re-export of crypto-common so this has a few TODOs to follow up on that. We need to get this landed first though.

Also adds a `KeySizeUser` impl.

This is a companion PR to RustCrypto/traits#2215 which added a bound to
the `Encapsulate` trait for `TryKeyInit + KeyExport` from
`crypto-common`.

These traits both have a supertrait bound on `KeySizeUser`, which
defines an `ArraySize` for a fixed-size key.

The other two provide common traits for fallible decoding and encoding
respectively, where the former uses the common `InvalidKey` type also
defined in the `crypto-common` crate.

This was one big missing gap for generic KEM use.

Some traits we need aren't being re-exported from `kem` and it doesn't
do a re-export of `crypto-common` so this has a few TODOs to follow up
on that. We need to get this landed first though.
@tarcieri tarcieri force-pushed the kem/encapsulation-key-encoding branch from d6371cc to bf37185 Compare January 23, 2026 02:04
@tarcieri tarcieri merged commit 91855ea into master Jan 23, 2026
39 checks passed
@tarcieri tarcieri deleted the kem/encapsulation-key-encoding branch January 23, 2026 02:08
@tarcieri tarcieri mentioned this pull request Apr 28, 2026
tarcieri added a commit that referenced this pull request Apr 28, 2026
## Added
- `Seed` support e.g. `DecapsulationKey::from_seed` (#133, #138)
- PKCS#8 support (#135)
- `KeyInit`, `KeySizeUser`, and `KeyExport` impls for decapsulation keys
  (#156, #228)
- Parameter set modules: `ml_kem_512`, `mk_kem_768`, `mk_kem_1024`
  (#162)
- `DecapsulationKey::from_expanded` deprecated compatibility support
  (#163)
- `TryKeyInit` and `KeyExport` impls for encapsulation keys (#188)
- Validations against Wycheproof test vectors (#213, #214, #215,
  #217)
- Implement `kem::Kem` trait (#223)
- Support for `kem::FromSeed` trait (#255)

## Changed
- Edition changed to 2024 and MSRV bumped to 1.85 (#118)
- Relax MSRV policy and allow MSRV bumps in patch releases
- Upgrade `hybrid-array` dependency to 0.4 (#129)
- Extract `module-lattice` crate (#199, #202, #204, #209,
  #210, #211, #212, #218, #219, #220)
- Replace `EncodedSizeUser` with `ExpandedKeyEncoding` (#226)
- Bump `getrandom` to v0.4 (#245)
- Bump `rand_core` to v0.10 (#245)
- Migrate from `subtle` to `ctutils` (#277)
- Bump `sha3` dependency to v0.11 (#282)
- Bump `kem` dependency to v0.3 (#283)
- Bump `pkcs8` dependency to v0.11 (#291)

## Fixed
- Validate encryption/encapsulation keys (#179)
- Validate expanded decapsulation key hash (#207)

## Removed
- `Kem` struct and `KemCore` trait - replaced by `kem::Kem` (#223)
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