|
|
@ -5,7 +5,8 @@ typedef enum verifierstate { |
|
|
ASKISSUER, |
|
|
ASKISSUER, |
|
|
GOTISSUER, |
|
|
GOTISSUER, |
|
|
ASKMEMBER, |
|
|
ASKMEMBER, |
|
|
GOTMEMBER |
|
|
GOTMEMBER, |
|
|
|
|
|
ASKATTEST, |
|
|
} verifierstate_e; |
|
|
} verifierstate_e; |
|
|
|
|
|
|
|
|
typedef struct verifier { |
|
|
typedef struct verifier { |
|
|
@ -132,7 +133,7 @@ int verifier_getmember(char *buffer) { |
|
|
int ret = 0; |
|
|
int ret = 0; |
|
|
|
|
|
|
|
|
switch (verifier.state) { |
|
|
switch (verifier.state) { |
|
|
case ON: |
|
|
case GOTISSUER: |
|
|
bzero(buffer, MAX_BUFSIZE); |
|
|
bzero(buffer, MAX_BUFSIZE); |
|
|
strncpy(buffer, "PUBLISH\n", 8); |
|
|
strncpy(buffer, "PUBLISH\n", 8); |
|
|
verifier.state = ASKMEMBER; |
|
|
verifier.state = ASKMEMBER; |
|
|
@ -167,9 +168,40 @@ int verifier_getmember(char *buffer) { |
|
|
|
|
|
|
|
|
//"ATTEST" > "OK"
|
|
|
//"ATTEST" > "OK"
|
|
|
int verifier_attestmember(char *buffer) { |
|
|
int verifier_attestmember(char *buffer) { |
|
|
|
|
|
int ret = 0; |
|
|
|
|
|
|
|
|
|
|
|
switch (verifier.state) { |
|
|
|
|
|
case GOTMEMBER: |
|
|
bzero(buffer, MAX_BUFSIZE); |
|
|
bzero(buffer, MAX_BUFSIZE); |
|
|
strncat(buffer, "OK\n", 16); |
|
|
strncpy(buffer, "ATTEST\n", 8); |
|
|
return 0; |
|
|
verifier.state = ASKATTEST; |
|
|
|
|
|
break; |
|
|
|
|
|
case ASKATTEST: |
|
|
|
|
|
if (0 == strncasecmp("ATTEST", buffer, 7)) { |
|
|
|
|
|
printf("MEMBER > VERIFIER: %s", buffer); |
|
|
|
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
|
|
|
char *current = &buffer[8]; |
|
|
|
|
|
ecdaa_hextobin(current, binbuf, ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH); |
|
|
|
|
|
ret = ecdaa_member_public_key_FP256BN_deserialize_no_check(&verifier.mpk, binbuf); |
|
|
|
|
|
if (-1 == ret) { |
|
|
|
|
|
printf("verifier_attestmember: member public key is malformed!\n"); |
|
|
|
|
|
ret = -1; |
|
|
|
|
|
} else if (-2 == ret) { |
|
|
|
|
|
printf("verifier_attestmember: signature of member public key is invalid\n"); |
|
|
|
|
|
ret = -1; |
|
|
|
|
|
} else { |
|
|
|
|
|
verifier.state = GOTMEMBER; |
|
|
|
|
|
ret = 1; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
break; |
|
|
|
|
|
default: |
|
|
|
|
|
ret = -1; |
|
|
|
|
|
} |
|
|
|
|
|
if (0 == ret) { |
|
|
|
|
|
printf("MEMBER < VERIFIER: %s", buffer); |
|
|
|
|
|
} |
|
|
|
|
|
return ret; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//"LINK" > "NOT IMPLEMENTED"
|
|
|
//"LINK" > "NOT IMPLEMENTED"
|
|
|
|