/* ** Authors: ** Rama Alebouyeh ( rama[at]cs.ucsb.edu ) ** Matthew Allen ( msa[at]cs.ucsb.edu ) */ #include #include #include "chimera.h" #include "ca.h" #include "mycrypto.h" #define USAGE "test [ -j bootstrap:port ] port key" #define OPTSTR "j:" extern char *optarg; extern int optind; #define TEST_CHAT 15 void test_fwd (Key ** kp, Message ** mp, ChimeraHost ** hp) { Key *k = *kp; Message *m = *mp; ChimeraHost *h = *hp; fprintf (stderr, "Routing %s (%s) to %s via %s:%d\n", (m->type == TEST_CHAT) ? ("CHAT") : ("JOIN"), m->payload, k->keystr, h->name, h->port); } void test_del (Key * k, Message * m) { fprintf (stderr, "Delivered %s (%s) to %s\n", (m->type == TEST_CHAT) ? ("CHAT") : ("JOIN"), m->payload, k->keystr); if (m->type == TEST_CHAT) { fprintf (stderr, "** %s **\n", m->payload); } } void test_update (Key * k, ChimeraHost * h, int joined) { if (joined) { fprintf (stderr, "Node %s:%s:%d joined neighbor set\n", k->keystr, h->name, h->port); } else { fprintf (stderr, "Node %s:%s:%d leaving neighbor set\n", k->keystr, h->name, h->port); } } int main (int argc, char **argv) { int opt; char *hn = NULL; int port, joinport; ChimeraHost *host = NULL; char tmp[256]; Key key, keyinput; int i, j; ChimeraState *state; while ((opt = getopt (argc, argv, OPTSTR)) != EOF) { switch ((char) opt) { case 'j': for (i = 0; optarg[i] != ':' && i < strlen (optarg); i++); optarg[i] = 0; hn = optarg; sscanf (optarg + (i + 1), "%d", &joinport); break; default: fprintf (stderr, "invalid option %c\n", (char) opt); fprintf (stderr, "usage: %s\n", USAGE); exit (1); } } if ((argc - optind) != 2) { fprintf (stderr, "usage: %s\n", USAGE); exit (1); } port = atoi (argv[optind]); str_to_key (argv[optind + 1], &keyinput); state = chimera_init (port); if (state == NULL) { fprintf (stderr, "unable to initialize chimera \n"); exit (1); } if (hn != NULL) { host = host_get (state, hn, joinport); } chimera_forward (state, test_fwd); chimera_deliver (state, test_del); chimera_update (state, test_update); chimera_setkey (state, keyinput); chimera_register (state, TEST_CHAT, 1); /*char networkdebug[256], routingdebug[256]; sprintf(networkdebug, "LOG_NETWORKDEBUG_%s", keyinput.keystr); sprintf(routingdebug, "LOG_ROUTING_%s", keyinput.keystr); FILE *networklogfp= fopen(networkdebug, "w"); FILE *routingfp= fopen(routingdebug, "w"); log_direct(state->log, LOG_ROUTING, routingfp); log_direct(state->log, LOG_NETWORKDEBUG, networklogfp); */ log_direct (state->log, LOG_WARN, stderr); log_direct (state->log, LOG_ROUTING, stderr); chimera_join (state, host); unsigned char data[1000]; printf ("Enter text to encrypt \n"); scanf ("%s", data); get_data_from_random_file (data, 1000); printf ("The random data is \n"); print_in_hex (data, 1000); printf ("\n"); int encryptedlen = 0, decryptedlen = 0; //unsigned char *encryptedText = rsa_encrypt(data, 1000, "pubkey1.pem", &encryptedlen); //unsigned char *encryptedText = public_encrypt_data_with_key(state, "1111", "1111", data, strlen(data) + 1, &encryptedlen); unsigned char *encryptedText = public_encrypt_data_with_key (state, "1111", "1111", data, 1000, &encryptedlen); unsigned char *decryptedText = private_decrypt_data_with_key (state, "1111", "1111", encryptedText, encryptedlen, &decryptedlen); //unsigned char *decryptedText = private_decrypt_data_with_key(state, "1111", "1111", encryptedText, encryptedlen, &decryptedlen); //printf("The length of the encrypted data is %d \n", encryptedlen); //printf("Original data is of len %d\n%s\n", strlen((char*) data), data); //printf("Decrypted data is of len %d\n%s\n", strlen((char*) decryptedText), decryptedText); printf ("after decryption of length %d\n", decryptedlen); print_in_hex (decryptedText, decryptedlen); printf ("\n"); free (decryptedText); free (encryptedText); }