From 22ca4d0e4445377a6318200fd5106be0603d6d12 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Mon, 30 Mar 2020 16:53:14 +0000
Subject: [PATCH] Ratchet: GMB method to encrypt to a single key/tag for prop.
 154

---
 .../router/message/GarlicMessageBuilder.java  | 26 ++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/router/java/src/net/i2p/router/message/GarlicMessageBuilder.java b/router/java/src/net/i2p/router/message/GarlicMessageBuilder.java
index 57342962e6..836d5fd039 100644
--- a/router/java/src/net/i2p/router/message/GarlicMessageBuilder.java
+++ b/router/java/src/net/i2p/router/message/GarlicMessageBuilder.java
@@ -32,6 +32,7 @@ import net.i2p.router.LeaseSetKeys;
 import net.i2p.router.RouterContext;
 import net.i2p.router.crypto.ratchet.MuxedSKM;
 import net.i2p.router.crypto.ratchet.RatchetSKM;
+import net.i2p.router.crypto.ratchet.RatchetSessionTag;
 import net.i2p.router.crypto.ratchet.ReplyCallback;
 import net.i2p.util.Log;
 
@@ -196,7 +197,7 @@ public class GarlicMessageBuilder {
     /**
      *  ELGAMAL_2048 only.
      *  Used by TestJob, and directly above,
-     *  and by MessageWrapper for encrypting DatabaseLookupMessages
+     *  and by MessageWrapper for encrypting DatabaseLookupMessages and DSM/DSRM replies.
      *
      * @param ctx scope
      * @param config how/what to wrap
@@ -245,6 +246,29 @@ public class GarlicMessageBuilder {
         return msg;
     }
     
+    /**
+     *  Ratchet only.
+     *  Used by TestJob,
+     *  and by MessageWrapper for encrypting DatabaseLookupMessages and DSM/DSRM replies.
+     *
+     * @param ctx scope
+     * @param config how/what to wrap
+     * @param encryptKey sessionKey used to encrypt the current message, non-null
+     * @param encryptTag sessionTag used to encrypt the current message, non-null
+     * @since 0.9.46
+     */
+    public static GarlicMessage buildMessage(RouterContext ctx, GarlicConfig config,
+                                             SessionKey encryptKey, RatchetSessionTag encryptTag) {
+        GarlicMessage msg = new GarlicMessage(ctx);
+        CloveSet cloveSet = buildECIESCloveSet(ctx, config);
+        byte encData[] = ctx.eciesEngine().encrypt(cloveSet, encryptKey, encryptTag);
+        if (encData == null)
+            return null;
+        msg.setData(encData);
+        msg.setMessageExpiration(config.getExpiration());
+        return msg;
+    }
+    
     /**
      * ECIES_X25519 only.
      * Called by OCMJH only.
-- 
GitLab