From 1d8291b77ab8a80085dd71405a1216f991252537 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 31 Oct 2019 18:19:24 +0100 Subject: [PATCH] added member and client functionality, targeting issuer-member client-server connection --- CMakeLists.txt | 7 +++- client.c | 18 +++------ client.h | 15 +++++--- issuer.c | 9 ++++- member.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++++ server.c | 8 ++-- server.h | 3 +- 7 files changed, 134 insertions(+), 26 deletions(-) create mode 100644 member.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 02fadda..e79316e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,8 +5,13 @@ set(CMAKE_C_STANDARD 11) set(ECDAA_AMCL "/opt/amcl") add_executable(ecdaa_issuer issuer.c connection.h connection.c server.h server.c) - target_include_directories(ecdaa_issuer PUBLIC ${ECDAA_AMCL} ) target_link_libraries(ecdaa_issuer /usr/local/lib/libecdaa.so) +add_executable(ecdaa_member member.c connection.h connection.c client.h client.c server.h server.c) +target_include_directories(ecdaa_member PUBLIC + ${ECDAA_AMCL} + ) +target_link_libraries(ecdaa_member /usr/local/lib/libecdaa.so) +target_link_libraries(ecdaa_member /usr/local/lib/libecdaa-tpm.so) diff --git a/client.c b/client.c index b430746..29db479 100644 --- a/client.c +++ b/client.c @@ -25,27 +25,21 @@ client_t* client_open(conn_handler handler) { return client; } -int client_connect(client_t *client) { +int client_connect(client_t *client, int16_t port, char *ip_str) { struct sockaddr_in servaddr; - int servaddr_len = 0; + unsigned int servaddr_len = 0; if(client == NULL) { return -1; } servaddr.sin_family = AF_INET; - servaddr.sin_addr.s_addr = inet_addr(SERVERIP); - servaddr.sin_port = htons(PORT); + servaddr.sin_addr.s_addr = inet_addr(ip_str); + servaddr.sin_port = htons(port); - if (0 != connect(, MAX_CLIENTS)) { - printf("client_accept: listen failed\n"); - return -1; - } - printf("client_accept: listening\n"); servaddr_len = sizeof(servaddr); - connfd = connect(client->conn->fd, &servaddr, &servaddr_len); - if(0 >= connfd) { - printf("client_accept: connection to client failed, "); + if(0 >= connect(client->conn->fd, (const struct sockaddr *) &servaddr, servaddr_len)) { + printf("client_accept: connection to server failed\n"); return -1; } else { client->handler(client->conn->fd); diff --git a/client.h b/client.h index c6d32c3..c03cfa7 100644 --- a/client.h +++ b/client.h @@ -2,16 +2,19 @@ // Created by root on 10/30/19. // -#ifndef ECDAA_ISSUER_SERVER_H -#define ECDAA_ISSUER_SERVER_H +#ifndef ECDAA_ISSUER_CLIENT_H +#define ECDAA_ISSUER_CLIENT_H +#include +#include +#include #include #include #include +//#include +#include #include "connection.h" -#define PORT 6590 #define MAX_BUFSIZE 1024 -#define SERVERIP "127.0.0.1" typedef struct client { connection_t* conn; @@ -20,8 +23,8 @@ typedef struct client { client_t* client_open(conn_handler handler); -int client_connect(client_t* client); +int client_connect(client_t *client, int16_t port, char *ip_str); int client_close(client_t* client); -#endif //ECDAA_ISSUER_SERVER_H +#endif //ECDAA_ISSUER_CLIENT_H diff --git a/issuer.c b/issuer.c index 5e6256b..6de22f2 100644 --- a/issuer.c +++ b/issuer.c @@ -4,6 +4,13 @@ #include "server.h" #include "client.h" +#define ISSUERIP "127.0.0.1" +#define ISSUERPORT 6590 +#define MEMBERIP "127.0.0.1" +#define MEMBERPORT 6591 +#define VERIFIERIP "127.0.0.1" +#define VERIFIERPORT 6592 + typedef struct issuer { struct ecdaa_issuer_public_key_FP256BN ipk; struct ecdaa_issuer_secret_key_FP256BN isk; @@ -15,7 +22,7 @@ int main() { int err = 0; server_t *server; - server = server_open(&process_issuer); + server = server_open(&process_issuer, ISSUERPORT); if (NULL == server) { printf("listen failed, closing...\n"); } diff --git a/member.c b/member.c new file mode 100644 index 0000000..4b95f4d --- /dev/null +++ b/member.c @@ -0,0 +1,100 @@ +#include +#include +#include +#include "client.h" + +#define ISSUERIP "127.0.0.1" +#define ISSUERPORT 6590 +#define MEMBERIP "127.0.0.1" +#define MEMBERPORT 6591 +#define VERIFIERIP "127.0.0.1" +#define VERIFIERPORT 6592 + + +typedef struct member { + struct ecdaa_member_public_key_FP256BN mpk; +} member_t; + +typedef enum memberstate { + ON, + JOIN, + APPEND, + JOINED, + ATTEST, + PUBLISH +}memberstate_t; + +int process_member_client(int connfd); + +int main() { + int err = 0; + client_t *client; + + client = client_open(&process_member_client); + if (NULL == client) { + printf("listen failed, closing...\n"); + } + + for (; !err;) { + err = client_connect(client, ISSUERPORT, ISSUERIP); + if (1 == err) { + printf("graceful shutdown...\n"); + } else if (err) { + printf("accept failed, closing...\n"); + } + } + printf("shut down client\n"); + client_close(client); + return 0; +} + +int process_member_client(int connfd) { + char inbuf[MAX_BUFSIZE]; + char outbuf[MAX_BUFSIZE]; + int n = 0; + memberstate_t state = JOIN; + + strncpy(outbuf, "JOIN", 4); + printf("< MEMBER: %s\n", outbuf); + write(connfd, outbuf, sizeof(outbuf)); + for (;;) { + bzero(inbuf, MAX_BUFSIZE); + bzero(outbuf, MAX_BUFSIZE); + + if (0 >= read(connfd, inbuf, sizeof(inbuf))) { + printf("process_issuer: cannot read from socket\n"); + return -1; + } + + switch(state) { + case JOIN: + state = APPEND; + break; + case APPEND: + state = JOINED; + break; + case JOINED: + state = ATTEST; + state = PUBLISH; + break; + case ATTEST: + state = JOINED; + break; + case PUBLISH: + break; + } + + printf("> MEMBER: %s\n", inbuf); + strncpy(outbuf, "OK", 2); + printf("< MEMBER: %s\n", outbuf); + write(connfd, outbuf, sizeof(outbuf)); + if (0 == strncmp("exit", inbuf, 4)) { + printf("process_issuer: exiting gracefully\n"); + return 0; + } + if (0 == strncmp("shutdown", inbuf, 8)) { + printf("process_issuer: shutting down gracefully\n"); + return 1; + } + } +} \ No newline at end of file diff --git a/server.c b/server.c index 8aa857b..c39ade0 100644 --- a/server.c +++ b/server.c @@ -1,6 +1,6 @@ #include "server.h" -server_t* server_open(conn_handler handler) { +server_t *server_open(conn_handler handler, int16_t port) { struct sockaddr_in servaddr; server_t *server = malloc(sizeof(server_t)); if(NULL == handler) { @@ -24,7 +24,7 @@ server_t* server_open(conn_handler handler) { } servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); - servaddr.sin_port = htons(PORT); + servaddr.sin_port = htons(port); if (0 != bind(server->conn->fd, (const struct sockaddr *) &servaddr, sizeof(servaddr))) { printf("server_listen: failed to bind socket\n"); @@ -35,7 +35,7 @@ server_t* server_open(conn_handler handler) { int server_accept(server_t *server) { struct sockaddr_in client; - int client_len = 0; + unsigned int client_len = 0; int connfd = -1; if (NULL == server || 0 != listen(server->conn->fd, MAX_CLIENTS)) { printf("server_accept: listen failed\n"); @@ -43,7 +43,7 @@ int server_accept(server_t *server) { } printf("server_accept: listening\n"); client_len = sizeof(client); - connfd = accept(server->conn->fd, &client, &client_len); + connfd = accept(server->conn->fd, (struct sockaddr *) &client, &client_len); if(0 >= connfd) { printf("server_accept: connection to client failed, "); return -1; diff --git a/server.h b/server.h index e62a434..9da802a 100644 --- a/server.h +++ b/server.h @@ -9,7 +9,6 @@ #include #include "connection.h" -#define PORT 6590 #define MAX_CLIENTS 10 #define MAX_BUFSIZE 1024 @@ -18,7 +17,7 @@ typedef struct server { conn_handler handler; }server_t; -server_t* server_open(conn_handler handler); +server_t *server_open(conn_handler handler, int16_t port); int server_accept(server_t *server);