summaryrefslogtreecommitdiff
path: root/src/irmd/ipcp.c
diff options
context:
space:
mode:
authordimitri staessens <[email protected]>2017-08-09 18:55:37 +0200
committerdimitri staessens <[email protected]>2017-08-09 20:48:27 +0200
commit24aa46946349529bf36d3569796a28917d3e756f (patch)
tree58ef8a40142323771eecbd8ce6c2eaea409bc138 /src/irmd/ipcp.c
parentc1d7ff1e1bd44e1a38af8a1b498c68f3378fa342 (diff)
downloadouroboros-24aa46946349529bf36d3569796a28917d3e756f.tar.gz
ouroboros-24aa46946349529bf36d3569796a28917d3e756f.zip
build, lib, ipcpd, irmd: Add support for libgcrypt
This adds support for libgcrypt. If at least version 1.7.0 of libgcrypt is present, it may be used for secure random number generation and is used for hashing in the irmd/ipcp. The hash definitions are moved to the internal hash.h header, and defined independently of the hashes that are defined as part of the directory policy for the normal IPCP. The translation is moved from the IRMd to ipcpd/ipcp.h. The bootstrap call from the IRMd expects the IPCP to return the correct hash algorithm with a dif_info struct, which is in line with the behavior of the enroll call. This also improves how some platform checks in the build system are handled.
Diffstat (limited to 'src/irmd/ipcp.c')
-rw-r--r--src/irmd/ipcp.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/irmd/ipcp.c b/src/irmd/ipcp.c
index bf71bc3d..528e90a2 100644
--- a/src/irmd/ipcp.c
+++ b/src/irmd/ipcp.c
@@ -206,8 +206,9 @@ int ipcp_destroy(pid_t api)
return 0;
}
-int ipcp_bootstrap(pid_t api,
- ipcp_config_msg_t * conf)
+int ipcp_bootstrap(pid_t api,
+ ipcp_config_msg_t * conf,
+ struct dif_info * info)
{
ipcp_msg_t msg = IPCP_MSG__INIT;
ipcp_msg_t * recv_msg = NULL;
@@ -229,6 +230,20 @@ int ipcp_bootstrap(pid_t api,
}
ret = recv_msg->result;
+ if (ret != 0) {
+ ipcp_msg__free_unpacked(recv_msg, NULL);
+ return ret;
+ }
+
+ if (recv_msg->dif_info == NULL) {
+ ipcp_msg__free_unpacked(recv_msg, NULL);
+ return -EIPCP;
+ }
+
+ info->dir_hash_algo = recv_msg->dif_info->dir_hash_algo;
+ strcpy(info->dif_name, recv_msg->dif_info->dif_name);
+
+ ret = recv_msg->result;
ipcp_msg__free_unpacked(recv_msg, NULL);
return ret;
@@ -269,7 +284,6 @@ int ipcp_enroll(pid_t api,
}
info->dir_hash_algo = recv_msg->dif_info->dir_hash_algo;
-
strcpy(info->dif_name, recv_msg->dif_info->dif_name);
ipcp_msg__free_unpacked(recv_msg, NULL);