Browse Source

updating member-tpm

master
Michael Preisach 4 years ago
parent
commit
24ef7a7436
  1. 7
      issuer.c
  2. 47
      member-tpm.c
  3. 2
      member.c
  4. 8
      verifier.c

7
issuer.c

@ -166,11 +166,14 @@ int process_issuer(char *buffer) {
int issuer_joinstart(char *buffer) { int issuer_joinstart(char *buffer) {
ecdaa_rand(issuer.nonce, NONCE_SIZE); ecdaa_rand(issuer.nonce, NONCE_SIZE);
char* current; char* current;
int ret = 0;
bzero(buffer, MAX_BUFSIZE); bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "JOINSTART ", 10); strncpy(buffer, "JOINSTART ", 10);
current = &buffer[10]; current = &buffer[10];
ecdaa_encode(issuer.nonce, current, NONCE_SIZE); ret = ecdaa_encode(issuer.nonce, current, NONCE_SIZE);
buffer[2 * NONCE_SIZE + 10] = '\n';
current[ret] = '\n';
return 0; return 0;
} }

47
member-tpm.c

@ -31,11 +31,17 @@ size_t msg_len;
int init_tpm(); int init_tpm();
int free_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); 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_join(char *buffer);
int member_verifymsg(char *buffer); int member_verifymsg(char *buffer);
int member_publish(char *buffer); int member_publish(char *buffer);
int member_joinappend(char *buffer); int member_joinappend(char *buffer);
int member_joinfinish(char *buffer); int member_joinfinish(char *buffer);
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
@ -152,7 +158,7 @@ int member_join(char *buffer) {
break; break;
case ISSUERPUB: case ISSUERPUB:
if (0 == strncasecmp("PUBLISH", buffer, 7)) { if (0 == strncasecmp("PUBLISH", buffer, 7)) {
printf("ISSUER > MEMBER: %s", buffer); printf("ISSUER > MEMBER: %s\n", buffer);
uint8_t binbuf[MAX_BUFSIZE]; uint8_t binbuf[MAX_BUFSIZE];
char *current = &buffer[8]; char *current = &buffer[8];
ecdaa_decode(current, binbuf, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH); ecdaa_decode(current, binbuf, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH);
@ -177,7 +183,7 @@ int member_join(char *buffer) {
break; break;
case APPEND: case APPEND:
if (0 == strncasecmp("JOINSTART", buffer, 9)) { if (0 == strncasecmp("JOINSTART", buffer, 9)) {
printf("ISSUER > MEMBER: %s", buffer); printf("ISSUER > MEMBER: %s\n", buffer);
member_joinappend(buffer); member_joinappend(buffer);
member.state = JOINPROCEED; member.state = JOINPROCEED;
} else { } else {
@ -188,7 +194,7 @@ int member_join(char *buffer) {
break; break;
case JOINPROCEED: case JOINPROCEED:
if (0 == strncasecmp("JOINPROCEED", buffer, 11)) { if (0 == strncasecmp("JOINPROCEED", buffer, 11)) {
printf("ISSUER > MEMBER: %s", buffer); printf("ISSUER > MEMBER: %s\n", buffer);
member_joinfinish(buffer); member_joinfinish(buffer);
member.state = JOINED; member.state = JOINED;
ret = 1; ret = 1;
@ -258,23 +264,23 @@ int member_verifymsg(char *buffer) {
} }
//"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; /* int ret = 0; */
uint8_t binbuf[MAX_BUFSIZE]; /* uint8_t binbuf[MAX_BUFSIZE]; */
bzero(buffer, MAX_BUFSIZE); /* bzero(buffer, MAX_BUFSIZE); */
strncpy(buffer, "PUBLISH ", 8); /* strncpy(buffer, "PUBLISH ", 8); */
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); */
ret = ecdaa_encode(binbuf, current, ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH); /* ret = ecdaa_encode(binbuf, current, ECDAA_MEMBER_PUBLIC_KEY_FP256BN_LENGTH); */
current[ret] = '\n'; /* current[ret] = '\n'; */
return 0; /* return 0; */
} /* } */
//"JOINSTART <issuer.nonce>" > "APPEND <member.mpk>" //"JOINSTART <issuer.nonce>" > "APPEND <member.mpk>"
int member_joinappend(char *buffer) { 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); ret = ecdaa_member_key_pair_TPM_FP256BN_generate(&member.mpk, member.pk_in, member.nonce, NONCE_SIZE, &member.ctx);
if (0 != ret) { if (0 != ret) {
fprintf(stderr, "Error generating member key-pair. Error %d\n", ret); fprintf(stderr, "Error generating member key-pair. Error %d\n", ret);
bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "ERR", 3);
return -1; return -1;
} }
bzero(buffer, MAX_BUFSIZE); 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); 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");
strncpy(buffer, "ERR", 3);
ret = -1; ret = -1;
} else if(-2 == ret) { } else if(-2 == ret) {
printf("member_joinfinish: siganture of credential is invalid\n"); printf("member_joinfinish: siganture of credential is invalid\n");
strncpy(buffer, "ERR", 3);
ret = -1; ret = -1;
} }
printf("member_joinfinish: writing key-pair and credential to disk\n"); 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) || 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)) { 0 != ecdaa_credential_FP256BN_serialize_file(member_credential_file, &member.cred)) {
printf("issuer_setup: Error saving key-pair or credential to disk\n"); 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; return ret;

2
member.c

@ -148,7 +148,7 @@ int member_join(char *buffer) {
default: default:
ret = -1; ret = -1;
} }
if (0 == ret) { if (0 <= ret) {
printf("ISSUER < MEMBER: %s", buffer); printf("ISSUER < MEMBER: %s", buffer);
} }
return ret; return ret;

8
verifier.c

@ -97,22 +97,22 @@ int process_verifier(char *buffer) {
} }
ret = 0; ret = 0;
} else if (0 == strncasecmp("EXIT", buffer, 4)) { } else if (0 == strncasecmp("EXIT", buffer, 4)) {
printf("exit()\n"); printf("closing client session\n");
bzero(buffer, MAX_BUFSIZE); bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "OK\n", 3);
ret = 1; ret = 1;
} else if (0 == strncasecmp("SHUTDOWN", buffer, 8)) { } else if (0 == strncasecmp("SHUTDOWN", buffer, 8)) {
bzero(buffer, MAX_BUFSIZE); bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "OK\n", 3);
ret = 2; ret = 2;
} else { } else {
printf("error()\n"); printf("unknown command\n");
bzero(buffer, MAX_BUFSIZE); bzero(buffer, MAX_BUFSIZE);
strncpy(buffer, "ERR\n", 4); strncpy(buffer, "ERR\n", 4);
ret = 0; ret = 0;
} }
if(0 == ret) {
printf("< VERIFIER: %s\n", buffer); printf("< VERIFIER: %s\n", buffer);
}
return ret; return ret;
} }

Loading…
Cancel
Save