From 24ef7a7436f734393bfcb006685080e77571802d Mon Sep 17 00:00:00 2001 From: Michael Preisach Date: Fri, 30 Jul 2021 15:38:42 +0200 Subject: [PATCH] updating member-tpm --- issuer.c | 7 +++++-- member-tpm.c | 47 ++++++++++++++++++++++++++++------------------- member.c | 2 +- verifier.c | 10 +++++----- 4 files changed, 39 insertions(+), 27 deletions(-) diff --git a/issuer.c b/issuer.c index bb4a296..974c8eb 100644 --- a/issuer.c +++ b/issuer.c @@ -166,11 +166,14 @@ int process_issuer(char *buffer) { int issuer_joinstart(char *buffer) { ecdaa_rand(issuer.nonce, NONCE_SIZE); char* current; + int ret = 0; + bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "JOINSTART ", 10); current = &buffer[10]; - ecdaa_encode(issuer.nonce, current, NONCE_SIZE); - buffer[2 * NONCE_SIZE + 10] = '\n'; + ret = ecdaa_encode(issuer.nonce, current, NONCE_SIZE); + + current[ret] = '\n'; return 0; } diff --git a/member-tpm.c b/member-tpm.c index 533b3c1..a0db41b 100644 --- a/member-tpm.c +++ b/member-tpm.c @@ -31,11 +31,17 @@ size_t msg_len; int init_tpm(); int free_tpm(); + static int read_public_key_from_files(uint8_t *public_key, TPM2_HANDLE *key_handle, const char *tpm_key_file, const char *tpm_handle_file); + int member_join(char *buffer); + int member_verifymsg(char *buffer); + int member_publish(char *buffer); + int member_joinappend(char *buffer); + int member_joinfinish(char *buffer); int main(int argc, char *argv[]) { @@ -152,7 +158,7 @@ int member_join(char *buffer) { break; case ISSUERPUB: if (0 == strncasecmp("PUBLISH", buffer, 7)) { - printf("ISSUER > MEMBER: %s", buffer); + printf("ISSUER > MEMBER: %s\n", buffer); uint8_t binbuf[MAX_BUFSIZE]; char *current = &buffer[8]; ecdaa_decode(current, binbuf, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH); @@ -177,7 +183,7 @@ int member_join(char *buffer) { break; case APPEND: if (0 == strncasecmp("JOINSTART", buffer, 9)) { - printf("ISSUER > MEMBER: %s", buffer); + printf("ISSUER > MEMBER: %s\n", buffer); member_joinappend(buffer); member.state = JOINPROCEED; } else { @@ -188,7 +194,7 @@ int member_join(char *buffer) { break; case JOINPROCEED: if (0 == strncasecmp("JOINPROCEED", buffer, 11)) { - printf("ISSUER > MEMBER: %s", buffer); + printf("ISSUER > MEMBER: %s\n", buffer); member_joinfinish(buffer); member.state = JOINED; ret = 1; @@ -258,23 +264,23 @@ int member_verifymsg(char *buffer) { } //"PUBLISH" > "PUBLISH " -int member_publish(char *buffer) { - char *current; - int ret = 0; - uint8_t binbuf[MAX_BUFSIZE]; - bzero(buffer, MAX_BUFSIZE); +/* int member_publish(char *buffer) { */ +/* char *current; */ +/* int ret = 0; */ +/* uint8_t binbuf[MAX_BUFSIZE]; */ +/* bzero(buffer, MAX_BUFSIZE); */ - strncpy(buffer, "PUBLISH ", 8); +/* strncpy(buffer, "PUBLISH ", 8); */ - current = &buffer[8]; - bzero(binbuf, MAX_BUFSIZE); - ecdaa_member_public_key_FP256BN_serialize(binbuf, &member.mpk); - ret = ecdaa_encode(binbuf, current, ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH); +/* current = &buffer[8]; */ +/* bzero(binbuf, MAX_BUFSIZE); */ +/* ecdaa_member_public_key_FP256BN_serialize(binbuf, &member.mpk); */ +/* ret = ecdaa_encode(binbuf, current, ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH); */ - current[ret] = '\n'; +/* current[ret] = '\n'; */ - return 0; -} +/* return 0; */ +/* } */ //"JOINSTART " > "APPEND " int member_joinappend(char *buffer) { @@ -285,8 +291,6 @@ int member_joinappend(char *buffer) { ret = ecdaa_member_key_pair_TPM_FP256BN_generate(&member.mpk, member.pk_in, member.nonce, NONCE_SIZE, &member.ctx); if (0 != ret) { fprintf(stderr, "Error generating member key-pair. Error %d\n", ret); - bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "ERR", 3); return -1; } bzero(buffer, MAX_BUFSIZE); @@ -315,16 +319,21 @@ int member_joinfinish(char *buffer) { ret = ecdaa_credential_FP256BN_deserialize_with_signature(&member.cred, &member.mpk, &member.ipk.gpk, binbuf, bincur); if(-1 == ret) { printf("member_joinfinish: credential is malformed!\n"); + strncpy(buffer, "ERR", 3); ret = -1; } else if(-2 == ret) { printf("member_joinfinish: siganture of credential is invalid\n"); + strncpy(buffer, "ERR", 3); ret = -1; } printf("member_joinfinish: writing key-pair and credential to disk\n"); if(0 != ecdaa_member_public_key_FP256BN_serialize_file(member_public_key_file, &member.mpk) || 0 != ecdaa_credential_FP256BN_serialize_file(member_credential_file, &member.cred)) { printf("issuer_setup: Error saving key-pair or credential to disk\n"); - return -1; + strncpy(buffer, "ERR", 3); + ret = -1; + } else { + strncpy(buffer, "OK", 2); } return ret; diff --git a/member.c b/member.c index 418368b..b12a9b0 100644 --- a/member.c +++ b/member.c @@ -148,7 +148,7 @@ int member_join(char *buffer) { default: ret = -1; } - if (0 == ret) { + if (0 <= ret) { printf("ISSUER < MEMBER: %s", buffer); } return ret; diff --git a/verifier.c b/verifier.c index e131e25..6d27bc3 100644 --- a/verifier.c +++ b/verifier.c @@ -97,22 +97,22 @@ int process_verifier(char *buffer) { } ret = 0; } else if (0 == strncasecmp("EXIT", buffer, 4)) { - printf("exit()\n"); + printf("closing client session\n"); bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "OK\n", 3); ret = 1; } else if (0 == strncasecmp("SHUTDOWN", buffer, 8)) { bzero(buffer, MAX_BUFSIZE); - strncpy(buffer, "OK\n", 3); ret = 2; } else { - printf("error()\n"); + printf("unknown command\n"); bzero(buffer, MAX_BUFSIZE); strncpy(buffer, "ERR\n", 4); ret = 0; } - printf("< VERIFIER: %s\n", buffer); + if(0 == ret) { + printf("< VERIFIER: %s\n", buffer); + } return ret; }