Class GarlicMessageBuilder


  • public class GarlicMessageBuilder
    extends Object
    Build garlic messages based on a GarlicConfig
    • Constructor Detail

      • GarlicMessageBuilder

        public GarlicMessageBuilder()
    • Method Detail

      • needsTags

        static boolean needsTags​(RouterContext ctx,
                                 PublicKey key,
                                 Hash local,
                                 int minTagOverride)
        ELGAMAL_2048 only.
        Parameters:
        local - non-null; do not use this method for the router's SessionKeyManager
        minTagOverride - 0 for no override, > 0 to override SKM's settings
      • buildMessage

        public static GarlicMessage 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. ELGAMAL_2048 only.
        Parameters:
        ctx - scope
        config - how/what to wrap
        wrappedKey - non-null with null data, output parameter that will be filled with the SessionKey used
        wrappedTags - Output parameter that will be filled with the sessionTags used. If non-empty on return you must call skm.tagsDelivered() when sent and then call skm.tagsAcked() or skm.failTags() later.
        skm - non-null
        Returns:
        null if expired
        Throws:
        IllegalArgumentException - on error
      • buildMessage

        public static GarlicMessage buildMessage​(RouterContext ctx,
                                                 GarlicConfig config,
                                                 SessionKey wrappedKey,
                                                 Set<SessionTag> wrappedTags,
                                                 int numTagsToDeliver,
                                                 SessionKeyManager skm)
        ELGAMAL_2048 only. Called by OCMJH.
        Parameters:
        ctx - scope
        config - how/what to wrap
        wrappedKey - non-null with null data, output parameter that will be filled with the SessionKey used
        wrappedTags - Output parameter that will be filled with the sessionTags used. If non-empty on return you must call skm.tagsDelivered() when sent and then call skm.tagsAcked() or skm.failTags() later.
        numTagsToDeliver - Only if the estimated available tags are below the threshold. Set to zero to disable tag delivery. You must set to zero if you are not equipped to confirm delivery and call skm.tagsAcked() or skm.failTags() later.
        skm - non-null
        Returns:
        null if expired
        Throws:
        IllegalArgumentException - on error
      • buildMessage

        public static GarlicMessage buildMessage​(RouterContext ctx,
                                                 GarlicConfig config,
                                                 SessionKey wrappedKey,
                                                 Set<SessionTag> wrappedTags,
                                                 int numTagsToDeliver,
                                                 int lowTagsThreshold,
                                                 SessionKeyManager skm)
        ELGAMAL_2048 only. Called by netdb and above.
        Parameters:
        ctx - scope
        config - how/what to wrap
        wrappedKey - non-null with null data, output parameter that will be filled with the SessionKey used
        wrappedTags - Output parameter that will be filled with the sessionTags used. If non-empty on return you must call skm.tagsDelivered() when sent and then call skm.tagsAcked() or skm.failTags() later.
        numTagsToDeliver - only if the estimated available tags are below the threshold. Set to zero to disable tag delivery. You must set to zero if you are not equipped to confirm delivery and call skm.tagsAcked() or failTags() later. If this is always 0, it forces ElGamal every time.
        lowTagsThreshold - the threshold
        skm - non-null
        Returns:
        null if expired
        Throws:
        IllegalArgumentException - on error
      • buildMessage

        public static GarlicMessage buildMessage​(RouterContext ctx,
                                                 GarlicConfig config,
                                                 Set<SessionTag> wrappedTags,
                                                 PublicKey target,
                                                 SessionKey encryptKey,
                                                 SessionTag encryptTag)
        ELGAMAL_2048 only. Used by TestJob, and directly above, and by MessageWrapper for encrypting DatabaseLookupMessages and DSM/DSRM replies.
        Parameters:
        ctx - scope
        config - how/what to wrap
        wrappedTags - New tags to be sent along with the message. 200 max enforced at receiver; null OK
        target - public key of the location being garlic routed to (may be null if we know the encryptKey and encryptTag)
        encryptKey - sessionKey used to encrypt the current message, non-null
        encryptTag - sessionTag used to encrypt the current message, null to force ElG
        Returns:
        null if expired
        Throws:
        IllegalArgumentException - on error
      • buildMessage

        public static GarlicMessage buildMessage​(RouterContext ctx,
                                                 GarlicConfig config,
                                                 SessionKey encryptKey,
                                                 RatchetSessionTag encryptTag)
        Ratchet only. Used by TestJob, and by MessageWrapper for encrypting DatabaseLookupMessages and DSM/DSRM replies.
        Parameters:
        ctx - scope
        config - how/what to wrap
        encryptKey - sessionKey used to encrypt the current message, non-null
        encryptTag - sessionTag used to encrypt the current message, non-null
        Since:
        0.9.46
      • buildECIESMessage

        public static GarlicMessage buildECIESMessage​(RouterContext ctx,
                                                      GarlicConfig config)
        Encrypt from an anonymous source. ECIES_X25519 only. Called by MessageWrapper only.
        Parameters:
        ctx - scope
        config - how/what to wrap, must have key set with setRecipientPublicKey()
        Throws:
        IllegalArgumentException - on error
        Since:
        0.9.48