|
|
|
@ -47,10 +47,10 @@ int process_verifier(char *buffer) { |
|
|
|
ret = verifier_checkattest(&buffer[10]); |
|
|
|
bzero(buffer, MAX_BUFSIZE); |
|
|
|
if (-1 == ret) { |
|
|
|
printf("verifier_attestmember: member public key is malformed!\n"); |
|
|
|
printf("process_verifier: member public key is malformed!\n"); |
|
|
|
strncpy(buffer, "ERR\n", 4); |
|
|
|
} else if (-2 == ret) { |
|
|
|
printf("verifier_attestmember: signature of member public key is invalid\n"); |
|
|
|
printf("process_verifier: signature of member public key is invalid\n"); |
|
|
|
strncpy(buffer, "ERR\n", 4); |
|
|
|
} else { |
|
|
|
strncpy(buffer, "OK\n", 3); |
|
|
|
@ -200,32 +200,38 @@ int verifier_attestmember(char *buffer) { |
|
|
|
//"ATTEST <msg>1<signature with bsn>"
|
|
|
|
int verifier_checkattest(char *buffer) { |
|
|
|
char *current = buffer; |
|
|
|
|
|
|
|
char msg[MAX_MSGSIZE]; |
|
|
|
strncpy(msg, current, MAX_MSGSIZE); |
|
|
|
size_t msg_len = strlen(msg); |
|
|
|
current = ¤t[MAX_MSGSIZE]; |
|
|
|
|
|
|
|
int has_nym = current[0] - '0'; |
|
|
|
current = ¤t[1]; |
|
|
|
|
|
|
|
size_t msg_len = 0; |
|
|
|
int has_nym = 0; |
|
|
|
char bsn[MAX_BSNSIZE]; |
|
|
|
bzero(bsn, MAX_BSNSIZE); |
|
|
|
size_t bsn_len = 0; |
|
|
|
|
|
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
|
bzero(binbuf, MAX_BUFSIZE); |
|
|
|
size_t sig_len = 0; |
|
|
|
struct ecdaa_signature_FP256BN sig; |
|
|
|
int ret = 0; |
|
|
|
|
|
|
|
bzero(msg, MAX_MSGSIZE); |
|
|
|
ecdaa_hextobin(current, msg, MAX_MSGSIZE); |
|
|
|
msg_len = strlen(msg); |
|
|
|
//strncpy(msg, current, MAX_MSGSIZE);
|
|
|
|
current = ¤t[2 * MAX_MSGSIZE]; |
|
|
|
has_nym = current[0] - '0'; |
|
|
|
current = ¤t[1]; |
|
|
|
|
|
|
|
if (has_nym) { |
|
|
|
bzero(bsn, MAX_BSNSIZE); |
|
|
|
strncpy(bsn, current, MAX_BSNSIZE); |
|
|
|
bsn_len = strlen(bsn); |
|
|
|
current = ¤t[MAX_BSNSIZE]; |
|
|
|
sig_len = ecdaa_signature_FP256BN_with_nym_length(); |
|
|
|
} else { |
|
|
|
|
|
|
|
sig_len = ecdaa_signature_FP256BN_length(); |
|
|
|
|
|
|
|
} |
|
|
|
int sig_len = has_nym ? ECDAA_SIGNATURE_FP256BN_WITH_NYM_LENGTH : ECDAA_SIGNATURE_FP256BN_LENGTH; |
|
|
|
ecdaa_hextobin(current, binbuf, sig_len); |
|
|
|
|
|
|
|
struct ecdaa_signature_FP256BN sig; |
|
|
|
int ret = ecdaa_signature_FP256BN_deserialize(&sig, binbuf, has_nym); |
|
|
|
ret = ecdaa_signature_FP256BN_deserialize(&sig, binbuf, has_nym); |
|
|
|
if (0 != ret) { |
|
|
|
printf("verifier_checkattest: error reading signature\n"); |
|
|
|
return -1; |
|
|
|
@ -233,14 +239,13 @@ int verifier_checkattest(char *buffer) { |
|
|
|
|
|
|
|
printf("verifier_checkattest: msg: %s, len: %lu\n",msg, msg_len); |
|
|
|
printf("verifier_checkattest: bsn: %s, len: %lu\n",bsn, bsn_len); |
|
|
|
printf("verifier_checkattest: sig: %s", current); |
|
|
|
printf("verifier_checkattest: sig: %s, len: %lu\n", current, sig_len); |
|
|
|
ret = ecdaa_signature_FP256BN_verify(&sig, &verifier.ipk.gpk, &verifier.revocations, (uint8_t *) msg, msg_len, |
|
|
|
(uint8_t *) bsn, bsn_len); |
|
|
|
(uint8_t *) bsn, bsn_len); |
|
|
|
if (0 != ret) { |
|
|
|
printf("verifier_checkattest: signature not valid, ret = %i\n", ret); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
|