From 8c7f7e955f28fa747c1869357daa69fadfb0ae95 Mon Sep 17 00:00:00 2001 From: Michael Preisach Date: Mon, 21 Sep 2020 13:50:51 +0000 Subject: [PATCH] Message transmission works with bsn but not without --- common.h | 2 +- ecdaa_issuer | Bin 22720 -> 22768 bytes ecdaa_member | Bin 27656 -> 27696 bytes ecdaa_verifier | Bin 22400 -> 22560 bytes member.c | 20 +++++++++++++------- verifier.c | 43 ++++++++++++++++++++++++------------------- 6 files changed, 38 insertions(+), 27 deletions(-) diff --git a/common.h b/common.h index d1cc75d..816f25f 100644 --- a/common.h +++ b/common.h @@ -18,7 +18,7 @@ #define VERIFIERPORT 6592 #define MAX_CLIENTS 10 -#define MAX_BUFSIZE 2048 +#define MAX_BUFSIZE 20480 #define MAX_MSGSIZE ((MAX_BUFSIZE - 1536) / 2) #define MAX_BSNSIZE 128 #define NONCE_SIZE 384 diff --git a/ecdaa_issuer b/ecdaa_issuer index afb0bd07098cbad9564b40f6c7098c3a395111fb..c7104b8d3e4b694fc49b822e618a852ac3b963c0 100755 GIT binary patch delta 6058 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 t#o+?$x?+mT^sfsJuD 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 diff --git a/ecdaa_member b/ecdaa_member index 381cfc3f9eb3e6f24704ee0581e293392dd4d555..b985f15c5c5f87c0aa176ab1603c8ccf7119b053 100755 GIT binary patch delta 8187 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 delta 8163 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 literal 22400 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 >+-uMkNDTXf1VTcnI2kuWBW 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 diff --git a/member.c b/member.c index c39db8c..ee4a8e6 100644 --- a/member.c +++ b/member.c @@ -38,8 +38,8 @@ int main(int argc, char **argv) { char buffer[MAX_BUFSIZE]; char *remote_ip = argv[2]; int ret = 0; -// strncpy(member.bsn, "mybasename", 10); -// member.bsn_len = strlen(member.bsn); + //strncpy(member.bsn, "mybasename", 10); + //member.bsn_len = strlen(member.bsn); switch(argc) { case 3: if( 0 == strncasecmp("--join", argv[1], 6) || 0 == strncasecmp("-j", argv[1], 2)) { @@ -171,24 +171,30 @@ int member_verifymsg(char *buffer) { ecdaa_signature_FP256BN_sign(&sig, msg, msg_len, member.bsn, member.bsn_len, &member.msk, &member.cred, ecdaa_rand); bzero(buffer, MAX_BUFSIZE); - bzero(binbuf, MAX_BUFSIZE); strncpy(current, "VERIFYMSG ", 10); current = ¤t[10]; - strncpy(current, (char*) msg, msg_len); - current[MAX_MSGSIZE] = has_nym == 1 ? '1' : '0'; - current = ¤t[MAX_MSGSIZE + 1]; + ecdaa_bintohex(msg, msg_len, current); + current = ¤t[2 * MAX_MSGSIZE]; + //strncpy(current, (char*) msg, msg_len); if(has_nym) { + current[0] = '1'; + current = ¤t[1]; strncpy(current, (char *)member.bsn, MAX_BSNSIZE); current = ¤t[MAX_BSNSIZE]; + } else { + current[0] = '0'; + current = ¤t[1]; } + bzero(binbuf, MAX_BUFSIZE); ecdaa_signature_FP256BN_serialize(binbuf, &sig, has_nym); ecdaa_bintohex(binbuf, sig_len, current); 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: bsn: %s, len: %lu\n",(char *)member.bsn, strlen((char *)member.bsn)); - printf("member_verifymsg: sig: %s\n",current); + printf("member_verifymsg: sig: %s, len: %lu\n", current, sig_len); + current[2 * sig_len] = '\n'; return 0; } diff --git a/verifier.c b/verifier.c index 8bdb3a8..39578f8 100644 --- a/verifier.c +++ b/verifier.c @@ -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 1" 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; }