java.lang.Object
net.i2p.router.networkdb.kademlia.MessageWrapper
Method and class for garlic encrypting outbound netdb traffic, and sending keys and tags for others to encrypt inbound netdb traffic, including management of the ElGamal/AES tags.
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classA single key and tag, for receiving a single message.(package private) static classWrapper so that we can keep track of the key and tags for later notification to the SKM.Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intLow threshold for delivered tags.private static final intNumber of tags to deliver with a garlic wrap.Constructor Summary
ConstructorsMethod Summary
Public MethodsModifier and TypeMethodDescriptiongenerateSession(RouterContext ctx, long expiration) Create a single key and tag, for receiving a single encrypted message, and register it with our router's session key manager, to expire in the time specified.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.generateSession(RouterContext ctx, Hash localDest, 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.(package private) static MessageWrapper.WrappedMessagewrap(RouterContext ctx, I2NPMessage m, Hash from, RouterInfo to) Garlic wrap a message from a client or this router, destined for a router, to hide the contents from the OBEP.static GarlicMessagewrap(RouterContext ctx, I2NPMessage m, RouterInfo to) Garlic wrap a message from nobody, destined for a router, to hide the contents from the OBEP.static GarlicMessagewrap(RouterContext ctx, I2NPMessage m, SessionKey encryptKey, SessionTag encryptTag) Garlic wrap a message from nobody, destined for an unknown router, to hide the contents from the IBGW.static GarlicMessagewrap(RouterContext ctx, I2NPMessage m, SessionKey encryptKey, RatchetSessionTag encryptTag) Garlic wrap a message from nobody, destined for an unknown router, to hide the contents from the IBGW.static GarlicMessagewrap(RouterContext ctx, I2NPMessage m, MessageWrapper.OneTimeSession session) Garlic wrap a message from nobody, destined for an unknown router, to hide the contents from the IBGW.
Field Details
NETDB_TAGS_TO_DELIVER
private static final int NETDB_TAGS_TO_DELIVERNumber of tags to deliver with a garlic wrap.- See Also:
NETDB_LOW_THRESHOLD
private static final int NETDB_LOW_THRESHOLDLow threshold for delivered tags.- See Also:
Constructor Details
MessageWrapper
private MessageWrapper()Wraps an I2NP message with metadata.
Method Details
wrap
static MessageWrapper.WrappedMessage wrap(RouterContext ctx, I2NPMessage m, Hash from, RouterInfo to) Garlic wrap a message from a client or this router, destined for a router, to hide the contents from the OBEP. Caller must call acked() or fail() on the returned object.ELGAMAL ONLY. Both from and to must support ElGamal.
- Parameters:
ctx- router context, used for the session key manager and the random message IDm- the message to garlic wrapfrom- must be a local client with a session key manager, or null to use the router's session key manager. SessionKeyManager MUST support ElGamal.to- must be ELGAMAL_2048 EncType- Returns:
- null on encrypt failure
wrap
Garlic wrap a message from nobody, destined for a router, to hide the contents from the OBEP. Forces full asymmetric encryption.- Parameters:
ctx- the router contextm- the message to wrapto- must be ELGAMAL_2048 or ECIES_X25519 EncType- Returns:
- null on encrypt failure
generateSession
Create a single key and tag, for receiving a single encrypted message, and register it with our router's session key manager, to expire in the time specified. The recipient can then send us an AES- or ChaCha- encrypted message, avoiding full ElGamal or ECIES.- Parameters:
ctx- the router contextexpiration- time from now- Returns:
- non-null
generateSession
public static MessageWrapper.OneTimeSession generateSession(RouterContext ctx, Hash localDest, 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. The recipient can then send us an AES- or ChaCha- encrypted message, avoiding full ElGamal or ECIES.- Parameters:
ctx- the router contextlocalDest- the local client destinationexpiration- time from nowforceElG- if true, force ElGamal even if ratchet is available- Returns:
- null if we can't find the SKM for the localDest
generateSession
public static MessageWrapper.OneTimeSession 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. The recipient can then send us an AES- or ChaCha- encrypted message, avoiding full ElGamal or ECIES.- Parameters:
ctx- the router contextskm- the session key managerexpiration- time from nowforceElG- if true, force ElGamal even if ratchet is available- Returns:
- non-null
wrap
public static GarlicMessage wrap(RouterContext ctx, I2NPMessage m, MessageWrapper.OneTimeSession session) Garlic wrap a message from nobody, destined for an unknown router, to hide the contents from the IBGW. Uses a supplied one-time session key tag for AES or AEAD encryption, avoiding ElGamal or X25519.Used by OCMJH for DSM.
- Parameters:
ctx- the router contextm- the message to wrapsession- non-null- Returns:
- null on encrypt failure
wrap
public static GarlicMessage wrap(RouterContext ctx, I2NPMessage m, SessionKey encryptKey, SessionTag encryptTag) Garlic wrap a message from nobody, destined for an unknown router, to hide the contents from the IBGW. Uses a supplied session key and session tag for AES encryption, avoiding ElGamal.Used by above and for DLM replies in HDLMJ.
- Parameters:
ctx- the router contextm- the message to wrapencryptKey- non-nullencryptTag- non-null- Returns:
- null on encrypt failure
wrap
public static GarlicMessage wrap(RouterContext ctx, I2NPMessage m, SessionKey encryptKey, RatchetSessionTag encryptTag) Garlic wrap a message from nobody, destined for an unknown router, to hide the contents from the IBGW. Uses a supplied session key and session tag for ratchet encryption, avoiding full ECIES.Used by above and for DLM replies in HDLMJ.
- Parameters:
ctx- the router contextm- the message to wrapencryptKey- non-nullencryptTag- non-null- Returns:
- null on encrypt failure