aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Atack <jon@atack.com>2024-01-07 15:53:08 -0600
committerglozow <gloriajzhao@gmail.com>2024-01-19 16:12:47 +0000
commitfe0f8fe8aa4a8c4dddf45f4e3519a5ded8c79ad5 (patch)
treede8504073ce622d8aacf16ed9aba5474b8ca8fa8
parentfc62271015e9585bd3a3889adac894c9ef2e2ab2 (diff)
net: create I2P sessions with both ECIES-X25519 and ElGamal encryption
A Bitcoin Core node may only connect to a peer destination via I2P if both sides have sessions with the same encryption type. The encryption type is a property of the session, not the destination. Sessions may support multiple encryption types. As Bitcoin Core is not currently setting the I2P encryption type when creating sessions, it is using the older default, ElGamal (type 0). This pull updates Bitcoin Core to use both ECIES-X25519 and ElGamal (types 4 and 0, respectively). This allows to connect to I2P peers with either type, and the newer, faster ECIES-X25519 will be preferred. See also the recently updated section "Signature and Encryption Types" in https://geti2p.net/en/docs/api/samv3 Thanks and credit to zzzi2p (https://github.com/zzzi2p) for reporting. Closes https://github.com/bitcoin/bitcoin/issues/29197. Github-Pull: #29200 Rebased-From: 9d728916b27e18efc6f8839770ed5ec14789fc08
-rw-r--r--src/i2p.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/i2p.cpp b/src/i2p.cpp
index 685b43ba18..c891562d00 100644
--- a/src/i2p.cpp
+++ b/src/i2p.cpp
@@ -427,7 +427,7 @@ void Session::CreateIfNotCreatedAlready()
const Reply& reply = SendRequestAndGetReply(
*sock,
strprintf("SESSION CREATE STYLE=STREAM ID=%s DESTINATION=TRANSIENT SIGNATURE_TYPE=7 "
- "inbound.quantity=1 outbound.quantity=1",
+ "i2cp.leaseSetEncType=4,0 inbound.quantity=1 outbound.quantity=1",
session_id));
m_private_key = DecodeI2PBase64(reply.Get("DESTINATION"));
@@ -445,7 +445,7 @@ void Session::CreateIfNotCreatedAlready()
SendRequestAndGetReply(*sock,
strprintf("SESSION CREATE STYLE=STREAM ID=%s DESTINATION=%s "
- "inbound.quantity=3 outbound.quantity=3",
+ "i2cp.leaseSetEncType=4,0 inbound.quantity=3 outbound.quantity=3",
session_id,
private_key_b64));
}