From 401b831e08f3978852503e6478727e459138a358 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 5 Nov 2019 19:26:16 +0100 Subject: [PATCH] verifier implemented, not yet tested --- CMakeLists.txt | 10 ++- member.c | 8 +-- member.h | 1 + verifier.c | 177 ++++++++++++++++++++++++++----------------------- verifier.h | 17 +++++ 5 files changed, 123 insertions(+), 90 deletions(-) create mode 100644 verifier.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 7836cbe..ec4ae5f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,9 +9,17 @@ target_include_directories(ecdaa_issuer PUBLIC ${ECDAA_AMCL} ) target_link_libraries(ecdaa_issuer /usr/local/lib/libecdaa.so) -add_executable(ecdaa_member member.c common.h client.h client.c server.h server.c issuer.h) + +add_executable(ecdaa_member member.c common.h 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) + +add_executable(ecdaa_verifier verifier.c common.h server.h server.c client.h client.c) +target_include_directories(ecdaa_verifier PUBLIC + ${ECDAA_AMCL} + ) +target_link_libraries(ecdaa_verifier /usr/local/lib/libecdaa.so) +target_link_libraries(ecdaa_verifier /usr/local/lib/libecdaa-tpm.so) diff --git a/member.c b/member.c index 1c69a3f..bb177e1 100644 --- a/member.c +++ b/member.c @@ -1,8 +1,4 @@ -#include -#include -#include -#include "client.h" -#include "server.h" +#include "member.h" typedef enum memberstate { ON, @@ -22,8 +18,6 @@ typedef struct member { member_t member; -int process_member(char *buffer); - int member_join(char* buffer); int member_attest(char* buffer); int member_publish(char* buffer); diff --git a/member.h b/member.h index 5c2e4e9..45ca421 100644 --- a/member.h +++ b/member.h @@ -7,6 +7,7 @@ #include #include #include +#include #include "server.h" #include "client.h" #include "common.h" diff --git a/verifier.c b/verifier.c index 1c69a3f..b09b583 100644 --- a/verifier.c +++ b/verifier.c @@ -1,63 +1,66 @@ -#include -#include -#include -#include "client.h" -#include "server.h" +#include "verifier.h" -typedef enum memberstate { +typedef enum verifierstate { ON, - JOIN, - APPEND, - JOINPROCEED, - JOINED, - ATTEST, - PUBLISH -} memberstate_e; + ASKISSUER, + GOTISSUER, + ASKMEMBER, + GOTMEMBER +} verifierstate_e; -typedef struct member { - struct ecdaa_member_public_key_FP256BN mpk; - struct ecdaa_member_public_key_FP256BN msk; - memberstate_e state; -} member_t; +typedef struct verifier { + struct ecdaa_verifier_public_key_FP256BN mpk; + struct ecdaa_verifier_public_key_FP256BN ipk; + verifierstate_e state; +} verifier_t; -member_t member; +verifier_t verifier; -int process_member(char *buffer); +int verifier_getissuer(char *buffer); -int member_join(char* buffer); -int member_attest(char* buffer); -int member_publish(char* buffer); +int verifier_getmember(char *buffer); int main() { int err = 0; - if (2 != server_start(&process_member, MEMBERPORT)) { + if (2 != server_start(&process_verifier, VERIFIERPORT)) { printf("server failed\n"); } return 0; } -int process_member(char *buffer) { +int process_verifier(char *buffer) { int ret = 0; - printf("> MEMBER: %s\n", buffer); + printf("> VERIFIER: %s\n", buffer); - if (0 == strncasecmp("ATTEST", buffer, 6)) { - printf("attest()\n"); - bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "ATTEST ", 7); - member_attest(buffer); - } else if (0 == strncasecmp("PUBLISH", buffer, 7)) { - printf("publish()\n"); + if (0 == strncasecmp("VERIFY", buffer, 6)) { + switch (verifier.state) { + case GOTMEMBER: + printf("verify()\n"); + bzero(buffer, MAX_BUFSIZE); + strncpy(buffer, "OK\n", 3); + break; + default: + bzero(buffer, MAX_BUFSIZE); + strncpy(buffer, "ERR\n", 4); + } + } else if (0 == strncasecmp("LINk", buffer, 4)) { + printf("getpublished()\n"); + bzero(buffer, MAX_BUFSIZE); + strncpy(buffer, "OK\n", 3); + } else if (0 == strncasecmp("GETPUBLISHED", buffer, 12)) { + printf("link()\n"); + verifier.state = ON; + ret = client_connect(&verifier_getissuer, ISSUERIP, ISSUERPORT); + if (0 >= ret || GOTISSUER != verifier.state) { + printf("process_verifier: issuer connection failed\n"); bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "PUBLISH ", 8); - member_publish(buffer); - } else if (0 == strncasecmp("JOIN", buffer, 4)) { - printf("join()\n"); - member.state = JOIN; - ret = client_connect(&member_join, ISSUERIP, ISSUERPORT); - if (0 >= ret || JOINED != member.state) { - printf("process_member: issuer connection failed\n"); + strncpy(buffer, "ERR\n", 4); + } else { + ret = client_connect(&verifier_getmember, MEMBERIP, MEMBERPORT); + if (0 >= ret || GOTMEMBER != verifier.state) { + printf("process_verifier: issuer connection failed\n"); bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "ERR\n", 4); } else { @@ -65,65 +68,75 @@ int process_member(char *buffer) { strncpy(buffer, "OK\n", 3); } ret = 0; - } else if (0 == strncasecmp("EXIT", buffer, 4)) { - printf("exit()\n"); - bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "OK\n", 3); - ret = 1; - } else if (0 == strncasecmp("SHUTDOWN", buffer, 8)) { - bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "OK\n", 3); - ret = 2; - } else { - printf("error()\n"); - bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "ERR\n", 4); - ret = 0; } + } else if (0 == strncasecmp("EXIT", buffer, 4)) { + printf("exit()\n"); + bzero(buffer, MAX_BUFSIZE); + strncpy(buffer, "OK\n", 3); + ret = 1; + } else if (0 == strncasecmp("SHUTDOWN", buffer, 8)) { + bzero(buffer, MAX_BUFSIZE); + strncpy(buffer, "OK\n", 3); + ret = 2; + } else { + printf("error()\n"); + bzero(buffer, MAX_BUFSIZE); + strncpy(buffer, "ERR\n", 4); + ret = 0; + } - printf("< MEMBER: %s\n", buffer); + printf("< VERIFIER: %s\n", buffer); return ret; } -int member_join(char *buffer) { +int verifier_getissuer(char *buffer) { int ret = 0; - printf("ISSUER > MEMBER: %s", buffer); - switch (member.state) { - case JOIN: + printf("ISSUER > VERIFIER: %s", buffer); + switch (verifier.state) { + case ON: bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "JOIN\n", 5); - member.state = APPEND; + strncpy(buffer, "PUBLISH\n", 8); + verifier.state = ASKISSUER; break; - case APPEND: - if (0 == strncasecmp("JOINSTART", buffer, 9)) { + case ASKISSUER: + if (0 == strncasecmp("PUBLISH", buffer, 7)) { bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "APPEND\n", 7); - member.state = JOINPROCEED; + verifier.state = GOTISSUER; + ret = 1; } break; - case JOINPROCEED: - if (0 == strncasecmp("JOINPROCEED", buffer, 11)) { + default: + ret - 1; + } + if (0 == ret) { + printf("ISSUER < VERIFIER: %s", buffer); + } + return ret; +} + +int verifier_getmember(char *buffer) { + int ret = 0; + + printf("ISSUER > VERIFIER: %s", buffer); + switch (verifier.state) { + case ON: + bzero(buffer, MAX_BUFSIZE); + strncpy(buffer, "PUBLISH\n", 8); + verifier.state = ASKMEMBER; + break; + case ASKMEMBER: + if (0 == strncasecmp("PUBLISH", buffer, 7)) { bzero(buffer, MAX_BUFSIZE); - member.state = JOINED; + verifier.state = GOTMEMBER; ret = 1; } break; default: - ret -1; + ret - 1; } - if(0 == ret) { - printf("ISSUER < MEMBER: %s", buffer); + if (0 == ret) { + printf("ISSUER < VERIFIER: %s", buffer); } return ret; } - -int member_attest(char* buffer) { - strncat(buffer, "\n", 13); - return 0; -} - -int member_publish(char* buffer) { - strncat(buffer, "\n", 12); - return 0; -} \ No newline at end of file diff --git a/verifier.h b/verifier.h new file mode 100644 index 0000000..4a8aeda --- /dev/null +++ b/verifier.h @@ -0,0 +1,17 @@ +// +// Created by root on 11/5/19. +// + +#ifndef ECDAA_ISSUER_MEMBER_H +#define ECDAA_ISSUER_MEMBER_H +#include +#include +#include +#include +#include "server.h" +#include "client.h" +#include "common.h" + +int process_verifier(char *buffer); + +#endif //ECDAA_ISSUER_ISSUER_H