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