Add newer HPKE configuration to Rust wrappers. Change-Id: I911d6a1b8430aba57dd8ff74fd0b6fc4e9a5ea37 Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/82507 Commit-Queue: David Benjamin <davidben@google.com> Reviewed-by: David Benjamin <davidben@google.com> Auto-Submit: Adam Langley <agl@google.com>
diff --git a/rust/bssl-crypto/src/hpke.rs b/rust/bssl-crypto/src/hpke.rs index 82bb1c1..72bc31a 100644 --- a/rust/bssl-crypto/src/hpke.rs +++ b/rust/bssl-crypto/src/hpke.rs
@@ -82,6 +82,12 @@ P256HkdfSha256 = 16, // 0x0010 /// KEM using DHKEM X25519 and HKDF-SHA256. X25519HkdfSha256 = 32, // 0x0020 + /// X-Wing hybrid KEM. + XWing = 25722, // 0x647a + /// ML-KEM-768. + MlKem768 = 65, // 0x0041 + /// ML-KEM-1024. + MlKem1024 = 66, // 0x0042 } impl Kem { @@ -91,6 +97,9 @@ match self { Kem::P256HkdfSha256 => bssl_sys::EVP_hpke_p256_hkdf_sha256(), Kem::X25519HkdfSha256 => bssl_sys::EVP_hpke_x25519_hkdf_sha256(), + Kem::XWing => bssl_sys::EVP_hpke_xwing(), + Kem::MlKem768 => bssl_sys::EVP_hpke_mlkem768(), + Kem::MlKem1024 => bssl_sys::EVP_hpke_mlkem1024(), } } } @@ -99,6 +108,9 @@ match n { n if n == Kem::P256HkdfSha256 as u16 => Some(Self::P256HkdfSha256), n if n == Kem::X25519HkdfSha256 as u16 => Some(Self::X25519HkdfSha256), + n if n == Kem::XWing as u16 => Some(Self::XWing), + n if n == Kem::MlKem768 as u16 => Some(Self::MlKem768), + n if n == Kem::MlKem1024 as u16 => Some(Self::MlKem1024), _ => None, } } @@ -552,7 +564,7 @@ #[test] fn all_algorithms() { - let kems = vec![Kem::X25519HkdfSha256, Kem::P256HkdfSha256]; + let kems = vec![Kem::X25519HkdfSha256, Kem::P256HkdfSha256, Kem::XWing, Kem::MlKem768, Kem::MlKem1024]; let kdfs = vec![Kdf::HkdfSha256]; let aeads = vec![Aead::Aes128Gcm, Aead::Aes256Gcm, Aead::Chacha20Poly1305]; let plaintext: &[u8] = b"plaintext"; @@ -590,7 +602,7 @@ #[test] fn kem_public_from_private() { - let kems = vec![Kem::X25519HkdfSha256, Kem::P256HkdfSha256]; + let kems = vec![Kem::X25519HkdfSha256, Kem::P256HkdfSha256, Kem::XWing, Kem::MlKem768, Kem::MlKem1024]; for kem in &kems { let (pub_key, priv_key) = kem.generate_keypair(); assert_eq!(kem.public_from_private(&priv_key), Some(pub_key));