From 10eac9bb7230973e2c37be9181c36bd086ca38de Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 19 Sep 2021 21:05:00 +0200 Subject: -work on dhtu --- src/dhtu/plugin_dhtu_gnunet.c | 92 +++++++++++++++++++++++++++++++++---------- 1 file changed, 71 insertions(+), 21 deletions(-) (limited to 'src/dhtu/plugin_dhtu_gnunet.c') diff --git a/src/dhtu/plugin_dhtu_gnunet.c b/src/dhtu/plugin_dhtu_gnunet.c index d6cd75242..9597ebdc0 100644 --- a/src/dhtu/plugin_dhtu_gnunet.c +++ b/src/dhtu/plugin_dhtu_gnunet.c @@ -21,11 +21,43 @@ /** * @author Christian Grothoff * - * @file plugin_dhtu_ip.c + * @file plugin_dhtu_gnunet.c * @brief plain IP based DHT network underlay */ #include "platform.h" -#incluce "gnunet_dhtu_plugin.h" +#include "gnunet_dhtu_plugin.h" + +/** + * Handle for a private key used by this underlay. + */ +struct GNUNET_DHTU_PrivateKey +{ + /** + * GNUnet uses eddsa for peers. + */ + struct GNUNET_CRYPTO_EddsaPrivateKey eddsa_priv; + +}; + + +/** + * Handle for a public key used by this underlay. + */ +struct PublicKey +{ + + /** + * Header. + */ + struct GNUNET_DHTU_PublicKey header; + + /** + * GNUnet uses eddsa for peers. + */ + struct GNUNET_CRYPTO_EddsaPublicKey eddsa_pub; + +}; + /** * Opaque handle that the underlay offers for our address to be used when @@ -47,7 +79,7 @@ struct GNUNET_DHTU_Source */ struct GNUNET_DHTU_Target { - + /** * Application context for this target. */ @@ -93,21 +125,12 @@ struct GNUNET_DHTU_PreferenceHandle }; -/** - * Opaque handle for a private key used by this underlay. - */ -struct GNUNET_DHTU_PrivateKey -{ - /* we are IP, we do not do crypto */ -}; - - /** * Closure for all plugin functions. */ struct Plugin { - /** + /** * Callbacks into the DHT. */ struct GNUNET_DHTU_PluginEnvironment *env; @@ -126,10 +149,17 @@ struct Plugin static ssize_t ip_sign (void *cls, const struct GNUNET_DHTU_PrivateKey *pk, - const struct GNUNET_DHTU_SignaturePurpose *purpose, + const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose, void **sig) { - return 0; + struct GNUNET_CRYPTO_EddsaSignature *es; + + es = GNUNET_new (struct GNUNET_CRYPTO_EddsaSignature); + GNUNET_CRYPTO_eddsa_sign_ (&pk->eddsa_priv, + purpose, + es); + *sig = es; + return sizeof (*es); } @@ -148,11 +178,31 @@ ip_sign (void *cls, static enum GNUNET_GenericReturnValue ip_verify (void *cls, const struct GNUNET_DHTU_PublicKey *pk, - const struct GNUNET_DHTU_SignaturePurpose *purpose, + const struct GNUNET_CRYPTO_EccSignaturePurpose *purpose, const void *sig, size_t sig_size) { - return GNUNET_NO; + const struct GNUNET_CRYPTO_EddsaSignature *es = sig; + const struct PublicKey *pub; + + GNUNET_assert (sizeof (struct PublicKey) == + ntohs (pk->size)); + pub = (const struct PublicKey *) pk; + if (sizeof (*es) != sig_size) + { + GNUNET_break_op (0); + return GNUNET_SYSERR; + } + if (GNUNET_OK != + GNUNET_CRYPTO_eddsa_verify_ (ntohl (purpose->purpose), + purpose, + es, + &pub->eddsa_pub)) + { + GNUNET_break_op (0); + return GNUNET_SYSERR; + } + return GNUNET_OK; } @@ -174,7 +224,7 @@ ip_try_connect (void *cls, * Request underlay to keep the connection to @a target alive if possible. * Hold may be called multiple times to express a strong preference to * keep a connection, say because a @a target is in multiple tables. - * + * * @param cls closure * @param target connection to keep alive */ @@ -196,7 +246,7 @@ ip_hold (void *cls, /** * Do no long request underlay to keep the connection alive. - * + * * @param cls closure * @param target connection to keep alive */ @@ -204,7 +254,7 @@ static void ip_drop (struct GNUNET_DHTU_PreferenceHandle *ph) { struct GNUNET_DHTU_Target *target = ph->target; - + GNUNET_CONTAINER_DLL_remove (target->ph_head, target->ph_tail, ph); @@ -225,7 +275,7 @@ ip_drop (struct GNUNET_DHTU_PreferenceHandle *ph) * @param msg_size number of bytes in @a msg * @param finished_cb function called once transmission is done * (not called if @a target disconnects, then only the - * disconnect_cb is called). + * disconnect_cb is called). * @param finished_cb_cls closure for @a finished_cb */ static void -- cgit v1.2.3 From 48896731e966376ec6f256e175e0d12cd17afa42 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 19 Sep 2021 23:35:17 +0200 Subject: more dhtu-gnunet basics --- src/dhtu/Makefile.am | 1 + src/dhtu/plugin_dhtu_gnunet.c | 71 ++++++++++++++++++++++++++++++++++ src/include/gnunet_hello_lib.h | 7 ++-- src/include/gnunet_mq_lib.h | 21 ++++++---- src/include/gnunet_transport_service.h | 21 ++++++---- 5 files changed, 103 insertions(+), 18 deletions(-) (limited to 'src/dhtu/plugin_dhtu_gnunet.c') diff --git a/src/dhtu/Makefile.am b/src/dhtu/Makefile.am index 4bc96f236..f4b968526 100644 --- a/src/dhtu/Makefile.am +++ b/src/dhtu/Makefile.am @@ -28,6 +28,7 @@ libgnunet_plugin_dhtu_ip_la_LDFLAGS = \ libgnunet_plugin_dhtu_gnunet_la_SOURCES = \ plugin_dhtu_gnunet.c libgnunet_plugin_dhtu_gnunet_la_LIBADD = \ + $(top_builddir)/src/core/libgnunetcore.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(XLIBS) \ $(LTLIBINTL) diff --git a/src/dhtu/plugin_dhtu_gnunet.c b/src/dhtu/plugin_dhtu_gnunet.c index 9597ebdc0..ccd329e8e 100644 --- a/src/dhtu/plugin_dhtu_gnunet.c +++ b/src/dhtu/plugin_dhtu_gnunet.c @@ -26,6 +26,7 @@ */ #include "platform.h" #include "gnunet_dhtu_plugin.h" +#include "gnunet_core_service.h" /** * Handle for a private key used by this underlay. @@ -134,6 +135,12 @@ struct Plugin * Callbacks into the DHT. */ struct GNUNET_DHTU_PluginEnvironment *env; + + /** + * Handle to the CORE service. + */ + struct GNUNET_CORE_Handle *core; + }; @@ -290,6 +297,60 @@ ip_send (void *cls, } + +/** + * Method called whenever a given peer connects. + * + * @param cls closure + * @param peer peer identity this notification is about + * @return closure associated with @a peer. given to mq callbacks and + * #GNUNET_CORE_DisconnectEventHandler + */ +static void * +core_connect_cb (void *cls, + const struct GNUNET_PeerIdentity *peer, + struct GNUNET_MQ_Handle *mq) +{ + return NULL; +} + + +/** + * Method called whenever a peer disconnects. + * + * @param cls closure + * @param peer peer identity this notification is about + * @param peer_cls closure associated with peer. given in + * #GNUNET_CORE_ConnectEventHandler + */ +static void +core_disconnect_cb (void *cls, + const struct GNUNET_PeerIdentity *peer, + void *peer_cls) +{ +} + + +/** + * Function called after #GNUNET_CORE_connect has succeeded (or failed + * for good). Note that the private key of the peer is intentionally + * not exposed here; if you need it, your process should try to read + * the private key file directly (which should work if you are + * authorized...). Implementations of this function must not call + * #GNUNET_CORE_disconnect (other than by scheduling a new task to + * do this later). + * + * @param cls closure + * @param my_identity ID of this peer, NULL if we failed + */ +static void +core_init_cb (void *cls, + const struct GNUNET_PeerIdentity *my_identity) +{ + struct Plugin *plugin = cls; +} + + /** * Entry point for the plugin. * @@ -302,6 +363,9 @@ libgnunet_plugin_dhtu_ip_init (void *cls) struct GNUNET_DHTU_PluginEnvironment *env = cls; struct GNUNET_DHTU_PluginFunctions *api; struct Plugin *plugin; + struct GNUNET_MQ_MessageHandler handlers[] = { + GNUNET_MQ_handler_end () + }; plugin = GNUNET_new (struct Plugin); plugin->env = env; @@ -313,6 +377,12 @@ libgnunet_plugin_dhtu_ip_init (void *cls) api->hold = &ip_hold; api->drop = &ip_drop; api->send = &ip_send; + plugin->core = GNUNET_CORE_connect (env->cfg, + plugin, + &core_init_cb, + &core_connect_cb, + &core_disconnect_cb, + handlers); return api; } @@ -329,6 +399,7 @@ libgnunet_plugin_dhtu_gnunet_done (void *cls) struct GNUNET_DHTU_PluginFunctions *api = cls; struct Plugin *plugin = api->cls; + GNUNET_CORE_disconnect (plugin->core); GNUNET_free (plugin); GNUNET_free (api); return NULL; diff --git a/src/include/gnunet_hello_lib.h b/src/include/gnunet_hello_lib.h index fff0045aa..74eca999d 100644 --- a/src/include/gnunet_hello_lib.h +++ b/src/include/gnunet_hello_lib.h @@ -268,9 +268,10 @@ GNUNET_HELLO_add_address (const struct GNUNET_HELLO_Address *address, * @return number of bytes written or 0, #GNUNET_SYSERR to signal the * end of the iteration. */ -typedef ssize_t (*GNUNET_HELLO_GenerateAddressListCallback) (void *cls, - size_t max, - void *buf); +typedef ssize_t +(*GNUNET_HELLO_GenerateAddressListCallback) (void *cls, + size_t max, + void *buf); /** diff --git a/src/include/gnunet_mq_lib.h b/src/include/gnunet_mq_lib.h index 37bba8c1b..765647a98 100644 --- a/src/include/gnunet_mq_lib.h +++ b/src/include/gnunet_mq_lib.h @@ -331,9 +331,10 @@ typedef int (*GNUNET_MQ_MessageValidationCallback) ( * @param msg the message to send * @param impl_state state of the implementation */ -typedef void (*GNUNET_MQ_SendImpl) (struct GNUNET_MQ_Handle *mq, - const struct GNUNET_MessageHeader *msg, - void *impl_state); +typedef void +(*GNUNET_MQ_SendImpl) (struct GNUNET_MQ_Handle *mq, + const struct GNUNET_MessageHeader *msg, + void *impl_state); /** @@ -345,8 +346,9 @@ typedef void (*GNUNET_MQ_SendImpl) (struct GNUNET_MQ_Handle *mq, * @param mq the message queue to destroy * @param impl_state state of the implementation */ -typedef void (*GNUNET_MQ_DestroyImpl) (struct GNUNET_MQ_Handle *mq, - void *impl_state); +typedef void +(*GNUNET_MQ_DestroyImpl) (struct GNUNET_MQ_Handle *mq, + void *impl_state); /** @@ -355,8 +357,9 @@ typedef void (*GNUNET_MQ_DestroyImpl) (struct GNUNET_MQ_Handle *mq, * @param mq message queue * @param impl_state state specific to the implementation */ -typedef void (*GNUNET_MQ_CancelImpl) (struct GNUNET_MQ_Handle *mq, - void *impl_state); +typedef void +(*GNUNET_MQ_CancelImpl) (struct GNUNET_MQ_Handle *mq, + void *impl_state); /** @@ -368,7 +371,9 @@ typedef void (*GNUNET_MQ_CancelImpl) (struct GNUNET_MQ_Handle *mq, * @param cls closure * @param error error code */ -typedef void (*GNUNET_MQ_ErrorHandler) (void *cls, enum GNUNET_MQ_Error error); +typedef void +(*GNUNET_MQ_ErrorHandler) (void *cls, + enum GNUNET_MQ_Error error); /** diff --git a/src/include/gnunet_transport_service.h b/src/include/gnunet_transport_service.h index d190eff92..545bb28d2 100644 --- a/src/include/gnunet_transport_service.h +++ b/src/include/gnunet_transport_service.h @@ -115,7 +115,8 @@ struct GNUNET_TRANSPORT_AddressToStringContext; * if #GNUNET_NO: address was invalid (or not supported) * if #GNUNET_SYSERR: communication error (IPC error) */ -typedef void (*GNUNET_TRANSPORT_AddressToStringCallback) (void *cls, +typedef void +(*GNUNET_TRANSPORT_AddressToStringCallback) (void *cls, const char *address, int res); @@ -326,7 +327,8 @@ struct GNUNET_TRANSPORT_PeerMonitoringContext; * @param state current state this peer is in * @param state_timeout timeout for the current state of the peer */ -typedef void (*GNUNET_TRANSPORT_PeerIterateCallback) ( +typedef void +(*GNUNET_TRANSPORT_PeerIterateCallback) ( void *cls, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_HELLO_Address *address, @@ -394,7 +396,8 @@ struct GNUNET_TRANSPORT_Blacklist; * @param pid peer to approve or disapproave * @return #GNUNET_OK if the connection is allowed, #GNUNET_SYSERR if not */ -typedef int (*GNUNET_TRANSPORT_BlacklistCallback) ( +typedef int +(*GNUNET_TRANSPORT_BlacklistCallback) ( void *cls, const struct GNUNET_PeerIdentity *pid); @@ -541,7 +544,8 @@ struct GNUNET_TRANSPORT_SessionInfo * NULL with @a session being non-NULL if the monitor * was being cancelled while sessions were active */ -typedef void (*GNUNET_TRANSPORT_SessionMonitorCallback) ( +typedef void +(*GNUNET_TRANSPORT_SessionMonitorCallback) ( void *cls, struct GNUNET_TRANSPORT_PluginSession *session, void **session_ctx, @@ -593,7 +597,8 @@ struct GNUNET_TRANSPORT_CoreHandle; * @param mq message queue to use to transmit to @a peer * @return closure to use in MQ handlers */ -typedef void *(*GNUNET_TRANSPORT_NotifyConnect) ( +typedef void * +(*GNUNET_TRANSPORT_NotifyConnect) ( void *cls, const struct GNUNET_PeerIdentity *peer, struct GNUNET_MQ_Handle *mq); @@ -610,7 +615,8 @@ typedef void *(*GNUNET_TRANSPORT_NotifyConnect) ( * @param handlers_cls closure of the handlers, was returned from the * connect notification callback */ -typedef void (*GNUNET_TRANSPORT_NotifyDisconnect) ( +typedef void +(*GNUNET_TRANSPORT_NotifyDisconnect) ( void *cls, const struct GNUNET_PeerIdentity *peer, void *handler_cls); @@ -632,7 +638,8 @@ typedef void (*GNUNET_TRANSPORT_NotifyDisconnect) ( * @param handlers_cls closure of the handlers, was returned from the * connect notification callback */ -typedef void (*GNUNET_TRANSPORT_NotifyExcessBandwidth) ( +typedef void +(*GNUNET_TRANSPORT_NotifyExcessBandwidth) ( void *cls, const struct GNUNET_PeerIdentity *neighbour, void *handlers_cls); -- cgit v1.2.3