|
|
@ -102,7 +102,7 @@ int member_join(char *buffer) { |
|
|
printf("ISSUER > MEMBER: %s", buffer); |
|
|
printf("ISSUER > MEMBER: %s", buffer); |
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
char *current = &buffer[8]; |
|
|
char *current = &buffer[8]; |
|
|
ecdaa_hextobin(current, binbuf, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH); |
|
|
ecdaa_decode(current, binbuf, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH); |
|
|
ret = ecdaa_issuer_public_key_FP256BN_deserialize(&member.ipk, binbuf); |
|
|
ret = ecdaa_issuer_public_key_FP256BN_deserialize(&member.ipk, binbuf); |
|
|
if (-1 == ret) { |
|
|
if (-1 == ret) { |
|
|
printf("member_getpublic: issuer public key is malformed!\n"); |
|
|
printf("member_getpublic: issuer public key is malformed!\n"); |
|
|
@ -161,6 +161,7 @@ int member_verifymsg(char *buffer) { |
|
|
uint8_t has_nym = member.bsn_len > 0 ? 1 : 0; |
|
|
uint8_t has_nym = member.bsn_len > 0 ? 1 : 0; |
|
|
struct ecdaa_signature_FP256BN sig; |
|
|
struct ecdaa_signature_FP256BN sig; |
|
|
size_t sig_len = has_nym ? ecdaa_signature_FP256BN_with_nym_length() : ecdaa_signature_FP256BN_length(); |
|
|
size_t sig_len = has_nym ? ecdaa_signature_FP256BN_with_nym_length() : ecdaa_signature_FP256BN_length(); |
|
|
|
|
|
int ret = 0; |
|
|
|
|
|
|
|
|
if (0 == strncasecmp("OK", buffer, 2)) { |
|
|
if (0 == strncasecmp("OK", buffer, 2)) { |
|
|
return 1; |
|
|
return 1; |
|
|
@ -173,8 +174,8 @@ int member_verifymsg(char *buffer) { |
|
|
strncpy(current, "VERIFYMSG ", 10); |
|
|
strncpy(current, "VERIFYMSG ", 10); |
|
|
current = ¤t[10]; |
|
|
current = ¤t[10]; |
|
|
|
|
|
|
|
|
ecdaa_bintohex(msg, current, msg_len); |
|
|
ret = ecdaa_encode(msg, current, msg_len); |
|
|
current = ¤t[2 * MAX_MSGSIZE]; |
|
|
current = ¤t[ret]; |
|
|
if(has_nym) { |
|
|
if(has_nym) { |
|
|
if (0 != ecdaa_signature_FP256BN_sign(&sig, msg, msg_len, member.bsn, member.bsn_len, &member.msk, &member.cred, ecdaa_rand)) { |
|
|
if (0 != ecdaa_signature_FP256BN_sign(&sig, msg, msg_len, member.bsn, member.bsn_len, &member.msk, &member.cred, ecdaa_rand)) { |
|
|
printf("member_verifymsg: Signing message failed\n"); |
|
|
printf("member_verifymsg: Signing message failed\n"); |
|
|
@ -193,19 +194,20 @@ int member_verifymsg(char *buffer) { |
|
|
|
|
|
|
|
|
bzero(binbuf, MAX_BUFSIZE); |
|
|
bzero(binbuf, MAX_BUFSIZE); |
|
|
ecdaa_signature_FP256BN_serialize(binbuf, &sig, has_nym); |
|
|
ecdaa_signature_FP256BN_serialize(binbuf, &sig, has_nym); |
|
|
ecdaa_bintohex(binbuf, current, sig_len); |
|
|
ret = ecdaa_encode(binbuf, current, sig_len); |
|
|
printf("member_verifymsg: has_nym: %u, sig_len: %lu\n",has_nym, sig_len); |
|
|
printf("member_verifymsg: has_nym: %u, sig_len: %lu\n",has_nym, sig_len); |
|
|
printf("member_verifymsg: msg: %s, len: %lu\n",msg, msg_len); |
|
|
printf("member_verifymsg: msg: %s, len: %lu\n",msg, msg_len); |
|
|
printf("member_verifymsg: bsn: %s, len: %lu\n",(char *)member.bsn, strlen((char *)member.bsn)); |
|
|
printf("member_verifymsg: bsn: %s, len: %lu\n",(char *)member.bsn, strlen((char *)member.bsn)); |
|
|
printf("member_verifymsg: sig: %s, len: %lu\n", current, sig_len); |
|
|
printf("member_verifymsg: sig: %s, len: %lu\n", current, sig_len); |
|
|
|
|
|
|
|
|
current[2 * sig_len] = '\n'; |
|
|
current[ret] = '\n'; |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//"PUBLISH" > "PUBLISH <member.mpk>"
|
|
|
//"PUBLISH" > "PUBLISH <member.mpk>"
|
|
|
int member_publish(char *buffer) { |
|
|
int member_publish(char *buffer) { |
|
|
char *current; |
|
|
char *current; |
|
|
|
|
|
int ret = 0; |
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
bzero(buffer, MAX_BUFSIZE); |
|
|
bzero(buffer, MAX_BUFSIZE); |
|
|
|
|
|
|
|
|
@ -214,9 +216,9 @@ int member_publish(char *buffer) { |
|
|
current = &buffer[8]; |
|
|
current = &buffer[8]; |
|
|
bzero(binbuf, MAX_BUFSIZE); |
|
|
bzero(binbuf, MAX_BUFSIZE); |
|
|
ecdaa_member_public_key_FP256BN_serialize(binbuf, &member.mpk); |
|
|
ecdaa_member_public_key_FP256BN_serialize(binbuf, &member.mpk); |
|
|
ecdaa_bintohex(binbuf, current, ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH); |
|
|
ret = ecdaa_encode(binbuf, current, ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH); |
|
|
|
|
|
|
|
|
current[2 * ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH] = '\n'; |
|
|
current[ret] = '\n'; |
|
|
|
|
|
|
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
@ -225,7 +227,7 @@ int member_publish(char *buffer) { |
|
|
int member_joinappend(char *buffer) { |
|
|
int member_joinappend(char *buffer) { |
|
|
char *current = &buffer[10]; |
|
|
char *current = &buffer[10]; |
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
ecdaa_hextobin(current, member.nonce, NONCE_SIZE); |
|
|
int ret = ecdaa_decode(current, member.nonce, NONCE_SIZE); |
|
|
ecdaa_write_buffer_to_file(member_nonce_file, member.nonce, NONCE_SIZE); |
|
|
ecdaa_write_buffer_to_file(member_nonce_file, member.nonce, NONCE_SIZE); |
|
|
// if (0 != ecdaa_member_key_pair_TPM_FP256BN_generate(&member.mpk, member.nonce, NONCE_SIZE)) {
|
|
|
// if (0 != ecdaa_member_key_pair_TPM_FP256BN_generate(&member.mpk, member.nonce, NONCE_SIZE)) {
|
|
|
if (0 != ecdaa_member_key_pair_FP256BN_generate(&member.mpk, &member.msk, member.nonce, NONCE_SIZE, ecdaa_rand)) { |
|
|
if (0 != ecdaa_member_key_pair_FP256BN_generate(&member.mpk, &member.msk, member.nonce, NONCE_SIZE, ecdaa_rand)) { |
|
|
@ -238,8 +240,8 @@ int member_joinappend(char *buffer) { |
|
|
current = &buffer[7]; |
|
|
current = &buffer[7]; |
|
|
bzero(binbuf, MAX_BUFSIZE); |
|
|
bzero(binbuf, MAX_BUFSIZE); |
|
|
ecdaa_member_public_key_FP256BN_serialize(binbuf, &member.mpk); |
|
|
ecdaa_member_public_key_FP256BN_serialize(binbuf, &member.mpk); |
|
|
ecdaa_bintohex(binbuf, current, ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH); |
|
|
ret = ecdaa_encode(binbuf, current, ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH); |
|
|
current[2 * ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH] = '\n'; |
|
|
current[ret] = '\n'; |
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -250,11 +252,11 @@ int member_joinfinish(char *buffer) { |
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
uint8_t binbuf[MAX_BUFSIZE]; |
|
|
int ret = 0; |
|
|
int ret = 0; |
|
|
bzero(binbuf, MAX_BUFSIZE); |
|
|
bzero(binbuf, MAX_BUFSIZE); |
|
|
ecdaa_hextobin(current, binbuf, ECDAA_CREDENTIAL_FP256BN_LENGTH); |
|
|
ret = ecdaa_decode(current, binbuf, ECDAA_CREDENTIAL_FP256BN_LENGTH); |
|
|
|
|
|
|
|
|
current = &buffer[12 + 2 * ECDAA_CREDENTIAL_FP256BN_LENGTH + 1]; |
|
|
current = ¤t[ret]; |
|
|
bincur = &binbuf[ECDAA_CREDENTIAL_FP256BN_LENGTH]; |
|
|
bincur = &binbuf[ECDAA_CREDENTIAL_FP256BN_LENGTH]; |
|
|
ecdaa_hextobin(current, bincur, ECDAA_CREDENTIAL_FP256BN_SIGNATURE_LENGTH); |
|
|
ecdaa_decode(current, bincur, ECDAA_CREDENTIAL_FP256BN_SIGNATURE_LENGTH); |
|
|
ret = ecdaa_credential_FP256BN_deserialize_with_signature(&member.cred, &member.mpk, &member.ipk.gpk, binbuf, bincur); |
|
|
ret = ecdaa_credential_FP256BN_deserialize_with_signature(&member.cred, &member.mpk, &member.ipk.gpk, binbuf, bincur); |
|
|
if(-1 == ret) { |
|
|
if(-1 == ret) { |
|
|
printf("member_joinfinish: credential is malformed!\n"); |
|
|
printf("member_joinfinish: credential is malformed!\n"); |
|
|
|