java.lang.Object
net.i2p.router.networkdb.kademlia.MessageWrapper

public class MessageWrapperextends Object
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.
  • Field Details

    • NETDB_TAGS_TO_DELIVER

      private static final int NETDB_TAGS_TO_DELIVER
      Number of tags to deliver with a garlic wrap.
      See Also:
    • NETDB_LOW_THRESHOLD

      private static final int NETDB_LOW_THRESHOLD
      Low threshold for delivered tags.
      See Also:
  • Constructor Details

    • MessageWrapper

      private MessageWrapper()
      Wraps an I2NP message with metadata.
  • Method Details

    • wrap

      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 ID
      m - the message to garlic wrap
      from - 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

      public static GarlicMessage wrap(RouterContext ctx, I2NPMessage m, RouterInfo to)
      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 context
      m - the message to wrap
      to - must be ELGAMAL_2048 or ECIES_X25519 EncType
      Returns:
      null on encrypt failure
    • generateSession

      public static MessageWrapper.OneTimeSession generateSession(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. The recipient can then send us an AES- or ChaCha- encrypted message, avoiding full ElGamal or ECIES.
      Parameters:
      ctx - the router context
      expiration - 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 context
      localDest - the local client destination
      expiration - time from now
      forceElG - 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 context
      skm - the session key manager
      expiration - time from now
      forceElG - 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 context
      m - the message to wrap
      session - 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 context
      m - the message to wrap
      encryptKey - non-null
      encryptTag - 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 context
      m - the message to wrap
      encryptKey - non-null
      encryptTag - non-null
      Returns:
      null on encrypt failure