|
|
|
@ -19,7 +19,8 @@ typedef struct issuer { |
|
|
|
|
|
|
|
issuer_t issuer; |
|
|
|
|
|
|
|
int issuer_setup(char *buffer); |
|
|
|
int issuer_setup(); |
|
|
|
int issuer_reset(char *buffer); |
|
|
|
int issuer_joinstart(char *buffer); |
|
|
|
int issuer_joinproceed(char *buffer); |
|
|
|
int issuer_publish(char *buffer); |
|
|
|
@ -28,68 +29,21 @@ int main() { |
|
|
|
if (2 != server_start(&process_issuer, ISSUERPORT)) { |
|
|
|
printf("server failed\n"); |
|
|
|
} |
|
|
|
/*
|
|
|
|
uint8_t buffer[1024], result[1024]; |
|
|
|
uint8_t *current = buffer; |
|
|
|
char send[1024]; |
|
|
|
bzero(buffer, 1024); |
|
|
|
bzero(result, 1024); |
|
|
|
bzero(send,1024); |
|
|
|
|
|
|
|
buffer[0] = 0x01; |
|
|
|
buffer[1] = 0x02; |
|
|
|
buffer[2] = 0x04; |
|
|
|
buffer[3] = 0x08; |
|
|
|
buffer[4] = 0x10; |
|
|
|
buffer[5] = 0x20; |
|
|
|
buffer[6] = 0x40; |
|
|
|
buffer[7] = 0x80; |
|
|
|
buffer[8] = 0x11; |
|
|
|
buffer[9] = 0x22; |
|
|
|
buffer[10] = 0x44; |
|
|
|
buffer[11] = 0x88; |
|
|
|
buffer[12] = 0x11; |
|
|
|
buffer[13] = 0x21; |
|
|
|
buffer[14] = 0x41; |
|
|
|
buffer[15] = 0x81; |
|
|
|
|
|
|
|
ecdaa_bintohex(buffer, 16, send); |
|
|
|
for(int i = 0; i < 32; i++) { |
|
|
|
printf("%c", send[i]); |
|
|
|
} |
|
|
|
ecdaa_hextobin(send, result, 16); |
|
|
|
|
|
|
|
for(int i = 0; i < 1024; i++) { |
|
|
|
if(buffer[i] != result[i]) { |
|
|
|
printf("buffer[%i] = %X, result[%i] = %X\n", i, buffer[i], i, result[i]); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
struct ecdaa_issuer_public_key_FP256BN key; |
|
|
|
|
|
|
|
ecdaa_issuer_key_pair_FP256BN_generate(&issuer.ipk, &issuer.isk, ecdaa_rand); |
|
|
|
ecdaa_issuer_public_key_FP256BN_serialize(buffer, &issuer.ipk); |
|
|
|
int ret = ecdaa_issuer_public_key_FP256BN_deserialize(&key, buffer); |
|
|
|
printf("ret = %i\n",ret); |
|
|
|
ecdaa_bintohex(current, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH, send); |
|
|
|
printf("%s\n", send); |
|
|
|
|
|
|
|
ecdaa_hextobin(send, result, ECDAA_ISSUER_PUBLIC_KEY_FP256BN_LENGTH); |
|
|
|
ret = ecdaa_issuer_public_key_FP256BN_deserialize(&key, result); |
|
|
|
printf("ret = %i\n",ret); |
|
|
|
|
|
|
|
for(int i = 0; i < 1024; i++) { |
|
|
|
if(buffer[i] != result[i]) { |
|
|
|
printf("buffer[%i] = %X, result[%i] = %X\n", i, buffer[i], i, result[i]); |
|
|
|
} |
|
|
|
} |
|
|
|
*/ |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
int process_issuer(char *buffer) { |
|
|
|
int ret = 0; |
|
|
|
|
|
|
|
|
|
|
|
if(ON == issuer.state) { |
|
|
|
if( (0 == issuer_setup()) { |
|
|
|
issuer.state = READY; |
|
|
|
} else { |
|
|
|
printf("issuer setup failed\n"); |
|
|
|
return 2; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
printf("> ISSUER: %s\n", buffer); |
|
|
|
|
|
|
|
if (0 == strncasecmp("OK", buffer, 2)) { |
|
|
|
@ -113,11 +67,18 @@ int process_issuer(char *buffer) { |
|
|
|
strncpy(buffer, "ERR\n", 4); |
|
|
|
break; |
|
|
|
} |
|
|
|
} else if (0 == strncasecmp("SETUP", buffer, 5)) { |
|
|
|
} else if (0 == strncasecmp("RESET", buffer, 4)) { |
|
|
|
switch (issuer.state) { |
|
|
|
case ON: |
|
|
|
if(0 == issuer_setup(buffer)) { |
|
|
|
case READY: |
|
|
|
printf("generate new issuer identity\n"); |
|
|
|
if( (0 == issuer_setup(buffer)) { |
|
|
|
issuer.state = READY; |
|
|
|
} else { |
|
|
|
printf("issuer setup failed\n"); |
|
|
|
return 2; |
|
|
|
} |
|
|
|
if(0 == issuer_joinstart(buffer)) { |
|
|
|
issuer.state = JOINSTART; |
|
|
|
} |
|
|
|
break; |
|
|
|
default: |
|
|
|
@ -234,15 +195,44 @@ int issuer_joinproceed(char *buffer) { |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
// "SETUP > SETUPDONE"
|
|
|
|
int issuer_setup(char *buffer) { |
|
|
|
// "RESET > RESETDONE"
|
|
|
|
int issuer_reset(char *buffer) { |
|
|
|
printf("issuer_reset: generating new keys and save them to disk\n"); |
|
|
|
if (0 != ecdaa_issuer_key_pair_FP256BN_generate(&issuer.ipk, &issuer.isk, ecdaa_rand)) { |
|
|
|
printf("issuer_reset: Error generating issuer key-pair\n"); |
|
|
|
strncpy(buffer, "ERR\n", 4); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
if(0 != ecdaa_issuer_public_key_FP256BN_serialize_file(issuer_public_key_file, &ipk) || |
|
|
|
0 != ecdaa_issuer_secret_key_FP256BN_serialize_file(issuer_secret_key_file, &isk)) { |
|
|
|
printf("issuer_reset: Error saving key-pair to disk\n"); |
|
|
|
strncpy(buffer, "ERR\n", 4); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
bzero(buffer, MAX_BUFSIZE); |
|
|
|
strncpy(buffer, "RESETDONE\n", 10); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
//Load or generate issuer keypair initially
|
|
|
|
int issuer_setup() { |
|
|
|
printf("setup()\n"); |
|
|
|
if (0 == ecdaa_issuer_public_key_FP256BN_deserialize_file(&issuer.ipk, issuer_public_key_file)) { |
|
|
|
if (0 == ecdaa_issuer_secret_key_FP256BN_deserialize_file(&issuer.isk, issuer_secret_key_file) { |
|
|
|
printf("issuer_setup: loaded keys from disk\n"); |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
printf("issuer_setup: generating new keys and save them to disk\n"); |
|
|
|
if (0 != ecdaa_issuer_key_pair_FP256BN_generate(&issuer.ipk, &issuer.isk, ecdaa_rand)) { |
|
|
|
printf("issuer_setup: Error generating issuer key-pair\n"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
bzero(buffer, MAX_BUFSIZE); |
|
|
|
strncpy(buffer, "SETUPDONE\n", 10); |
|
|
|
if(0 != ecdaa_issuer_public_key_FP256BN_serialize_file(issuer_public_key_file, &ipk) || |
|
|
|
0 != ecdaa_issuer_secret_key_FP256BN_serialize_file(issuer_secret_key_file, &isk)) { |
|
|
|
printf("issuer_setup: Error saving key-pair to disk\n"); |
|
|
|
return -1; |
|
|
|
} |
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
|