## Uses of Class
net.i2p.crypto.SessionKeyManager

- Packages that use SessionKeyManager
  Package | Description
  --- | ---
  net.i2p | Core I2P package providing fundamental interfaces, version information, and entry points to essential I2P services.
  net.i2p.router | The I2P router application handles I2P network communication.
  net.i2p.router.client | Router-side implementation of the I2CP (I2P Client Protocol) interface for application integration.
  net.i2p.router.crypto | Router-specific cryptographic operations and implementations for I2P security.
  net.i2p.router.crypto.ratchet | Implementation of ECIES-X25519-AEAD-Ratchet cryptographic protocol (I2P proposal 144), providing forward secrecy and enhanced security for I2P transport communications.
  net.i2p.router.dummy | Dummy implementations and stub classes for testing purposes.
  net.i2p.router.message | Garlic message creation, parsing, and source routing for I2P communications.
  net.i2p.router.networkdb.kademlia | Kademlia DHT implementation and floodfill router functionality for I2P.

- - ### Uses of SessionKeyManager in net.i2p

    Fields in net.i2p declared as SessionKeyManager
    Modifier and Type | Field and Description
    --- | ---
    `protected SessionKeyManager` | I2PAppContext.`_sessionKeyManager`

    Methods in net.i2p that return SessionKeyManager
    Modifier and Type | Method and Description
    --- | ---
    `SessionKeyManager` | I2PAppContext.`sessionKeyManager()` The session key manager which coordinates the sessionKey / sessionTag data.

  - ### Uses of SessionKeyManager in net.i2p.router

    Methods in net.i2p.router that return SessionKeyManager
    Modifier and Type | Method and Description
    --- | ---
    `abstract SessionKeyManager` | ClientManagerFacade.`getClientSessionKeyManager(Hash dest)`

  - ### Uses of SessionKeyManager in net.i2p.router.client

    Methods in net.i2p.router.client that return SessionKeyManager
    Modifier and Type | Method and Description
    --- | ---
    `SessionKeyManager` | ClientManager.`getClientSessionKeyManager(Hash dest)` Return the client's SessionKeyManager Use this instead of the RouterContext.sessionKeyManager() to prevent correlation attacks across destinations
    `SessionKeyManager` | ClientManagerFacadeImpl.`getClientSessionKeyManager(Hash dest)` Return the client's current manager or null if not connected
    `SessionKeyManager` | ClientConnectionRunner.`getSessionKeyManager()` The current client's SessionKeyManager.

  - ### Uses of SessionKeyManager in net.i2p.router.crypto

    Subclasses of SessionKeyManager in net.i2p.router.crypto
    Modifier and Type | Class and Description
    --- | ---
    `class` | `TransientSessionKeyManager` Implement the session key management, but keep everything in memory (don't write to disk).

    Methods in net.i2p.router.crypto with parameters of type SessionKeyManager
    Modifier and Type | Method and Description
    --- | ---
    `byte[]` | ElGamalAESEngine.`decrypt(byte[] data, PrivateKey targetPrivateKey, SessionKeyManager keyManager)` Decrypt the message using the given private key and using tags from the specified key manager.
    `byte[]` | ElGamalAESEngine.`decryptFast(byte[] data, PrivateKey targetPrivateKey, SessionKeyManager keyManager)` Tags only.
    `byte[]` | ElGamalAESEngine.`decryptSlow(byte[] data, PrivateKey targetPrivateKey, SessionKeyManager keyManager)` Full ElG only.

  - ### Uses of SessionKeyManager in net.i2p.router.crypto.ratchet

    Subclasses of SessionKeyManager in net.i2p.router.crypto.ratchet
    Modifier and Type | Class and Description
    --- | ---
    `class` | `MuxedPQSKM` Post-quantum hybrid session key manager combining ECIES and ML-KEM operations
    `class` | `MuxedSKM` Multiplexed session key manager combining ECIES and post-quantum key management
    `class` | `RatchetSKM` Session key manager for ratchet encryption.

  - ### Uses of SessionKeyManager in net.i2p.router.dummy

    Methods in net.i2p.router.dummy that return SessionKeyManager
    Modifier and Type | Method and Description
    --- | ---
    `SessionKeyManager` | DummyClientManagerFacade.`getClientSessionKeyManager(Hash _dest)`

  - ### Uses of SessionKeyManager in net.i2p.router.message

    Methods in net.i2p.router.message with parameters of type SessionKeyManager
    Modifier and Type | Method and Description
    --- | ---
    `(package private) static GarlicMessage` | GarlicMessageBuilder.`buildECIESMessage(RouterContext ctx, GarlicConfig config, Hash from, Destination to, SessionKeyManager skm, ReplyCallback callback)` ECIES_X25519 and PQ only.
    `static GarlicMessage` | GarlicMessageBuilder.`buildMessage(RouterContext ctx, GarlicConfig config, SessionKey wrappedKey, Set<SessionTag> wrappedTags, int numTagsToDeliver, int lowTagsThreshold, SessionKeyManager skm)` ELGAMAL_2048 only.
    `static GarlicMessage` | GarlicMessageBuilder.`buildMessage(RouterContext ctx, GarlicConfig config, SessionKey wrappedKey, Set<SessionTag> wrappedTags, int numTagsToDeliver, SessionKeyManager skm)` ELGAMAL_2048 only Called by OCMJH
    `static GarlicMessage` | GarlicMessageBuilder.`buildMessage(RouterContext ctx, GarlicConfig config, SessionKey wrappedKey, Set<SessionTag> wrappedTags, SessionKeyManager skm)` Now unused, since we have to generate a reply token first in OCMOSJ but we don't know if tags are required yet.
    `(package private) CloveSet` | GarlicMessageParser.`getGarlicCloves(GarlicMessage message, PrivateKey elgKey, PrivateKey ecKey, SessionKeyManager skm)` Supports both ELGAMAL_2048 and ECIES_X25519.
    `(package private) CloveSet` | GarlicMessageParser.`getGarlicCloves(GarlicMessage message, PrivateKey encryptionKey, SessionKeyManager skm)` Supports ELGAMAL_2048, ECIES_X25519, and PQ

  - ### Uses of SessionKeyManager in net.i2p.router.networkdb.kademlia

    Methods in net.i2p.router.networkdb.kademlia with parameters of type SessionKeyManager
    Modifier and Type | Method and Description
    --- | ---
    `static MessageWrapper.OneTimeSession` | MessageWrapper.`generateSession(RouterContext ctx, SessionKeyManager skm, long expiration, boolean forceElG)` Create a single key and tag, for receiving a single encrypted message, and register it with the client's session key manager, to expire in the time specified.

    Constructors in net.i2p.router.networkdb.kademlia with parameters of type SessionKeyManager
    Constructor and Description
    `WrappedMessage(GarlicMessage msg, SessionKeyManager skm, PublicKey sentTo, SessionKey sentKey, TagSetHandle tsh)`