Browse Source

verifier implemented, not yet tested

master
root 6 years ago
parent
commit
401b831e08
  1. 10
      CMakeLists.txt
  2. 8
      member.c
  3. 1
      member.h
  4. 147
      verifier.c
  5. 17
      verifier.h

10
CMakeLists.txt

@ -9,9 +9,17 @@ target_include_directories(ecdaa_issuer PUBLIC
${ECDAA_AMCL} ${ECDAA_AMCL}
) )
target_link_libraries(ecdaa_issuer /usr/local/lib/libecdaa.so) 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 target_include_directories(ecdaa_member PUBLIC
${ECDAA_AMCL} ${ECDAA_AMCL}
) )
target_link_libraries(ecdaa_member /usr/local/lib/libecdaa.so) target_link_libraries(ecdaa_member /usr/local/lib/libecdaa.so)
target_link_libraries(ecdaa_member /usr/local/lib/libecdaa-tpm.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)

8
member.c

@ -1,8 +1,4 @@
#include <stdio.h> #include "member.h"
#include <string.h>
#include <ecdaa-tpm.h>
#include "client.h"
#include "server.h"
typedef enum memberstate { typedef enum memberstate {
ON, ON,
@ -22,8 +18,6 @@ typedef struct member {
member_t member; member_t member;
int process_member(char *buffer);
int member_join(char* buffer); int member_join(char* buffer);
int member_attest(char* buffer); int member_attest(char* buffer);
int member_publish(char* buffer); int member_publish(char* buffer);

1
member.h

@ -7,6 +7,7 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <ecdaa.h> #include <ecdaa.h>
#include <ecdaa-tpm.h>
#include "server.h" #include "server.h"
#include "client.h" #include "client.h"
#include "common.h" #include "common.h"

147
verifier.c

@ -1,63 +1,66 @@
#include <stdio.h> #include "verifier.h"
#include <string.h>
#include <ecdaa-tpm.h>
#include "client.h"
#include "server.h"
typedef enum memberstate { typedef enum verifierstate {
ON, ON,
JOIN, ASKISSUER,
APPEND, GOTISSUER,
JOINPROCEED, ASKMEMBER,
JOINED, GOTMEMBER
ATTEST, } verifierstate_e;
PUBLISH
} memberstate_e;
typedef struct member { typedef struct verifier {
struct ecdaa_member_public_key_FP256BN mpk; struct ecdaa_verifier_public_key_FP256BN mpk;
struct ecdaa_member_public_key_FP256BN msk; struct ecdaa_verifier_public_key_FP256BN ipk;
memberstate_e state; verifierstate_e state;
} member_t; } verifier_t;
member_t member; verifier_t verifier;
int process_member(char *buffer); int verifier_getissuer(char *buffer);
int member_join(char* buffer); int verifier_getmember(char *buffer);
int member_attest(char* buffer);
int member_publish(char* buffer);
int main() { int main() {
int err = 0; int err = 0;
if (2 != server_start(&process_member, MEMBERPORT)) { if (2 != server_start(&process_verifier, VERIFIERPORT)) {
printf("server failed\n"); printf("server failed\n");
} }
return 0; return 0;
} }
int process_member(char *buffer) { int process_verifier(char *buffer) {
int ret = 0; int ret = 0;
printf("> MEMBER: %s\n", buffer); printf("> VERIFIER: %s\n", buffer);
if (0 == strncasecmp("ATTEST", buffer, 6)) { if (0 == strncasecmp("VERIFY", buffer, 6)) {
printf("attest()\n"); switch (verifier.state) {
case GOTMEMBER:
printf("verify()\n");
bzero(buffer, MAX_BUFSIZE); bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "ATTEST ", 7); strncpy(buffer, "OK\n", 3);
member_attest(buffer); break;
} else if (0 == strncasecmp("PUBLISH", buffer, 7)) { default:
printf("publish()\n"); 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); bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "PUBLISH ", 8); strncpy(buffer, "ERR\n", 4);
member_publish(buffer); } else {
} else if (0 == strncasecmp("JOIN", buffer, 4)) { ret = client_connect(&verifier_getmember, MEMBERIP, MEMBERPORT);
printf("join()\n"); if (0 >= ret || GOTMEMBER != verifier.state) {
member.state = JOIN; printf("process_verifier: issuer connection failed\n");
ret = client_connect(&member_join, ISSUERIP, ISSUERPORT);
if (0 >= ret || JOINED != member.state) {
printf("process_member: issuer connection failed\n");
bzero(buffer, MAX_BUFSIZE); bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "ERR\n", 4); strncpy(buffer, "ERR\n", 4);
} else { } else {
@ -65,6 +68,7 @@ int process_member(char *buffer) {
strncpy(buffer, "OK\n", 3); strncpy(buffer, "OK\n", 3);
} }
ret = 0; ret = 0;
}
} else if (0 == strncasecmp("EXIT", buffer, 4)) { } else if (0 == strncasecmp("EXIT", buffer, 4)) {
printf("exit()\n"); printf("exit()\n");
bzero(buffer, MAX_BUFSIZE); bzero(buffer, MAX_BUFSIZE);
@ -81,49 +85,58 @@ int process_member(char *buffer) {
ret = 0; ret = 0;
} }
printf("< MEMBER: %s\n", buffer); printf("< VERIFIER: %s\n", buffer);
return ret; return ret;
} }
int member_join(char *buffer) { int verifier_getissuer(char *buffer) {
int ret = 0; int ret = 0;
printf("ISSUER > MEMBER: %s", buffer); printf("ISSUER > VERIFIER: %s", buffer);
switch (member.state) { switch (verifier.state) {
case JOIN: case ON:
bzero(buffer, MAX_BUFSIZE); bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "JOIN\n", 5); strncpy(buffer, "PUBLISH\n", 8);
member.state = APPEND; verifier.state = ASKISSUER;
break;
case APPEND:
if (0 == strncasecmp("JOINSTART", buffer, 9)) {
bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "APPEND\n", 7);
member.state = JOINPROCEED;
}
break; break;
case JOINPROCEED: case ASKISSUER:
if (0 == strncasecmp("JOINPROCEED", buffer, 11)) { if (0 == strncasecmp("PUBLISH", buffer, 7)) {
bzero(buffer, MAX_BUFSIZE); bzero(buffer, MAX_BUFSIZE);
member.state = JOINED; verifier.state = GOTISSUER;
ret = 1; ret = 1;
} }
break; break;
default: default:
ret -1; ret - 1;
} }
if(0 == ret) { if (0 == ret) {
printf("ISSUER < MEMBER: %s", buffer); printf("ISSUER < VERIFIER: %s", buffer);
} }
return ret; return ret;
} }
int member_attest(char* buffer) { int verifier_getmember(char *buffer) {
strncat(buffer, "<attestval>\n", 13); int ret = 0;
return 0;
}
int member_publish(char* buffer) { printf("ISSUER > VERIFIER: %s", buffer);
strncat(buffer, "<publicval>\n", 12); switch (verifier.state) {
return 0; 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);
verifier.state = GOTMEMBER;
ret = 1;
}
break;
default:
ret - 1;
}
if (0 == ret) {
printf("ISSUER < VERIFIER: %s", buffer);
}
return ret;
} }

17
verifier.h

@ -0,0 +1,17 @@
//
// Created by root on 11/5/19.
//
#ifndef ECDAA_ISSUER_MEMBER_H
#define ECDAA_ISSUER_MEMBER_H
#include <stdio.h>
#include <string.h>
#include <ecdaa.h>
#include <ecdaa-tpm.h>
#include "server.h"
#include "client.h"
#include "common.h"
int process_verifier(char *buffer);
#endif //ECDAA_ISSUER_ISSUER_H
Loading…
Cancel
Save