summaryrefslogtreecommitdiff
path: root/src/ipcpd/ipcp.c
diff options
context:
space:
mode:
authorDimitri Staessens <[email protected]>2020-02-24 22:30:22 +0100
committerSander Vrijders <[email protected]>2020-02-25 08:21:09 +0100
commitfe6b60909d455abdac7885ceaba1097749e7aeb1 (patch)
treeffd3f3c6a2f15a1af5b393d8a5c068304b29a636 /src/ipcpd/ipcp.c
parent11fbe2f998a39ca156e2c806fd78f2af781836a4 (diff)
downloadouroboros-fe6b60909d455abdac7885ceaba1097749e7aeb1.tar.gz
ouroboros-fe6b60909d455abdac7885ceaba1097749e7aeb1.zip
lib, ipcpd: piggyback ECDHE on flow allocation
The initial implementation for the ECDHE key exchange was doing the key exchange after a flow was established. The public keys are now sent allowg on the flow allocation messages, so that an encrypted tunnel can be created within 1 RTT. The flow allocation steps had to be extended to pass the opaque data ('piggybacking'). Signed-off-by: Dimitri Staessens <[email protected]> Signed-off-by: Sander Vrijders <[email protected]>
Diffstat (limited to 'src/ipcpd/ipcp.c')
-rw-r--r--src/ipcpd/ipcp.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c
index 8f9fcd7d..95d2f783 100644
--- a/src/ipcpd/ipcp.c
+++ b/src/ipcpd/ipcp.c
@@ -408,6 +408,8 @@ static void * mainloop(void * o)
}
assert(msg->hash.len == ipcp_dir_hash_len());
+ assert(msg->pk.len > 0 ? msg->pk.data != NULL
+ : msg->pk.data == NULL);
if (ipcp_get_state() != IPCP_OPERATIONAL) {
log_err("IPCP in wrong state.");
@@ -429,7 +431,9 @@ static void * mainloop(void * o)
ret_msg.result =
ipcpi.ops->ipcp_flow_alloc(fd,
msg->hash.data,
- qs);
+ qs,
+ msg->pk.data,
+ msg->pk.len);
break;
case IPCP_MSG_CODE__IPCP_FLOW_JOIN:
ret_msg.has_result = true;
@@ -488,9 +492,14 @@ static void * mainloop(void * o)
}
}
+ assert(msg->pk.len > 0 ? msg->pk.data != NULL
+ : msg->pk.data == NULL);
+
ret_msg.result =
ipcpi.ops->ipcp_flow_alloc_resp(fd,
- msg->response);
+ msg->response,
+ msg->pk.data,
+ msg->pk.len);
break;
case IPCP_MSG_CODE__IPCP_FLOW_DEALLOC:
ret_msg.has_result = true;
@@ -568,7 +577,7 @@ static int parse_args(int argc,
if (!(argc == 4 || argc == 3))
return -1;
- /* argument 1: pid of irmd */
+ /* argument 1: pid of irm */
if (atoi(argv[1]) == 0)
return -1;