====== KeyExchange Namespace ======
**Namespace:** ''WvdS.System.Security.Cryptography.KeyExchange''
Contains classes for post-quantum key exchange with ML-KEM.
----
===== Classes =====
^ Class ^ Description ^
| KeyExchangeService | High-level service for client/server key exchange |
| EphemeralKeyPair | Container for ephemeral ML-KEM/ML-DSA key pairs |
| SecureSession | Represents an established secure session |
----
===== Request/Response Classes =====
^ Class ^ Description ^
| KeyExchangeInitRequest | Client initiation message |
| KeyExchangeInitResponse | Server response message |
| KeyExchangeConfirmRequest | Client confirmation message |
| KeyExchangeConfirmResponse | Server confirmation response |
----
===== Protocol Flow =====
Client Server
| |
+- GenerateClientKeysAsync() |
| |
+- CreateInitRequest() ------------->|
| (ML-KEM PubKey + ML-DSA Sig) |
| +- ProcessClientRequest()
| | (Verify, Encapsulate)
|<---------------------- InitResponse -+
| (Ciphertext + ML-DSA Sig) |
| |
+- ProcessServerResponse() |
| (Verify, Decapsulate) |
| |
+- CreateConfirmRequest() ---------->|
| (HMAC Confirmation) |
| +- VerifyConfirmation()
|<---------------- ConfirmResponse --+
| |
v v
SecureSession SecureSession
(Shared Secret) (Shared Secret)
----
===== Example =====
using WvdS.System.Security.Cryptography.KeyExchange;
var kex = new KeyExchangeService();
// === Client ===
var clientKeys = await kex.GenerateClientKeysAsync();
var initRequest = await kex.CreateInitRequestAsync(clientKeys);
// Send initRequest to server...
// === Server ===
var serverKeys = await kex.GenerateServerKeysAsync();
var (response, serverSession) = await kex.ProcessClientRequestAsync(
initRequest, serverKeys);
// Send response to client...
// === Client ===
var clientSession = await kex.ProcessServerResponseAsync(
response, clientKeys);
// Both now have identical shared secret!
----
===== Main Methods =====
==== KeyExchangeService ====
^ Method ^ Description ^
| ''GenerateClientKeysAsync'' | Generate client-side keys |
| ''GenerateServerKeysAsync'' | Generate server-side keys |
| ''CreateInitRequestAsync'' | Create initiation message |
| ''ProcessClientRequestAsync'' | Server processes client request |
| ''ProcessServerResponseAsync'' | Client processes server response |
| ''CreateConfirmRequestAsync'' | Create confirmation message |
| ''VerifyConfirmationAsync'' | Verify confirmation |
----
===== See Also =====
* [[.:encryption|Encryption Namespace]]
* [[.:keyderivation|KeyDerivation Namespace]]
* [[.:start|API Overview]]
{{tag>namespace keyexchange ml-kem}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//