int main(int argc, char *argv[]) { /* { fix start } */ ltc_mp = ltm_desc; /* { fix end } */ int sockfd = 0; struct sockaddr_in serv_addr; if(argc != 2) { printf("\n Usage: %s <ip of server> \n",argv[0]); return 1; } if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("\n Error : Could not create socket \n"); return 1; } memset(&serv_addr, '0', sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(5002); if(inet_pton(AF_INET, argv[1], &serv_addr.sin_addr)<=0) { printf("\n inet_pton error occured\n"); return 1; } if( connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) { printf("\n Error : Connect Failed \n"); return 1; } initEncrypt(); ecc_key encryptKey; loadKey(&encryptKey, "bpublic.key"); ecc_key decryptKey; loadKey(&decryptKey, "aprivate.key"); /* { userString start } */ printf("Enter message to send\n"); unsigned char message[256]; fgets((char*)message,256,stdin); /* { userString end } */ /* { sendNonceA start } */ int nonceA = randomNumber(); printf("nonceA = %i\n",nonceA); printf("Encrypting nonceA with bpub\n"); unsigned char nonceA_enc[2048]; unsigned long outLength = 2048; ecc_encrypt((unsigned char*)&nonceA, sizeof(int), nonceA_enc, &outLength,&encryptKey); printf("Sending nonceA\n"); write(sockfd, nonceA_enc, outLength); /* { sendNonceA end } */ /* { resiveSessionKey start } */ unsigned char recvBuff[1024]; unsigned long msgLength; msgLength = recv(sockfd, recvBuff, sizeof(recvBuff),0); struct SessionKey sKey; unsigned long inLength = sizeof(struct SessionKey); ecc_decrypt(recvBuff,msgLength,(unsigned char*)&sKey,&inLength,&decryptKey); printf("Received sKey, nonceA = %i, key = %i\n", sKey.nonceA, sKey.key); /* { resiveSessionKey end } */ /* { resendKey start } */ my_aes_setup(sKey.key); sKey.nonceA ++; printf("Sending nonceA = %i encrypted with AES\n", sKey.nonceA); outLength = 2048; aes_encrypt((unsigned char*)&sKey.nonceA,sizeof(int),nonceA_enc, &outLength); write(sockfd, nonceA_enc, outLength); /* { resendKey end } */ /* { sendMessage start } */ printf("Sending message encrypted with AES\n"); printf("%s", message); outLength = 2048; unsigned char message_enc[2048]; aes_encrypt(message, strlen((char*)message), message_enc, &outLength); write(sockfd, message_enc, outLength); /* { sendMessage end } */ return -1; }
configuration_t *clparser(int argc, char ** argv) { configuration_t *conf; char *aOpt[] = {"aes128", "aes192", "aes256", "des"}; char *mOpt[] = {"ecb", "cfb", "ofb", "cbc"}; char *stegOpt[] = {"LSB1", "LSB4", "LSBE", "WANTED"}; if((conf = calloc(sizeof(configuration_t),1)) == NULL){ return NULL; } parserADT parser = newParser(argc, argv); setArg(parser, arg_in, "-in", 0, 1, ARG_TYPE1, 0, NULL); setArg(parser, arg_out, "-out", 0, 1, ARG_TYPE1, 0, NULL); setArg(parser, arg_porter, "-p", 0, 1, ARG_TYPE1, 0, NULL); setArg(parser, arg_embed, "-embed", 1, 1, ARG_TYPE0, 0, NULL); setArg(parser, arg_extract, "-extract", 1, 1, ARG_TYPE0, 0, NULL); setArg(parser, arg_pass, "-pass", 1, 1, ARG_TYPE1, 0, NULL); setArg(parser, arg_algorithm, "-a", 1, 1, ARG_TYPE1, SIZE_OF_ARRAY(aOpt), aOpt); setArg(parser, arg_ciphermode, "-m", 1, 1, ARG_TYPE1, SIZE_OF_ARRAY(mOpt) , mOpt); setArg(parser, arg_steg, "-steg", 1, 1, ARG_TYPE1, SIZE_OF_ARRAY(stegOpt), stegOpt); setArg(parser, arg_help, "-h", 1, 1, ARG_TYPE0, 0, NULL); //help int error = 0; while(!noMoreArgs(parser) && !error){ switch(getArg(parser)){ case arg_out: error = !processArg(&conf->targetFile, getValue(parser), "target file"); break; case arg_in: error = !processArg(&conf->sourceFile, getValue(parser), "source file"); break; case arg_porter: error = !processArg(&conf->carrierFile, getValue(parser), "carrier file"); break; case arg_embed: if(conf->embed == steg_notSet){ LOG("embed/extract is embed\n"); conf->embed = steg_embed; if(conf->encriptation != NULL) { conf->encriptation->encrypOrDecrypt = encrypOrDecrypt_encrypt; } } else { printf("embed/extract already set\n"); error = 1; } break; case arg_extract: if(conf->embed == steg_notSet){ LOG("embed/extract is extract\n"); conf->embed = steg_extract; if(conf->encriptation != NULL) { conf->encriptation->encrypOrDecrypt = encrypOrDecrypt_decrypt; } } else { printf("embed/extract already set\n"); error = 1; } break; case arg_pass: if(!initEncrypt(conf)){ error = 1; } else { error = !processArg((char**)&conf->encriptation->passKeyIv.password, getValue(parser), "password"); } break; case arg_algorithm: if(!initEncrypt(conf)){ error = 1; } else { algorithm_t alg = getCryptoAlgorithm(getValue(parser)); if(alg != algorithm_none){ setCryptoAlgorithm(conf->encriptation, alg); } else { printf("encryptation algorithm not reconized: %s\n", getValue(parser)); error = 1; } } break; case arg_ciphermode: if(!initEncrypt(conf)){ error = 1; } else { ciphermode_t cipherm = getCipherMode(getValue(parser)); if(cipherm != ciphermode_none){ setCryptoCiphermode(conf->encriptation, cipherm); } else { printf("ciphermode not reconized: %s\n", getValue(parser)); error = 1; } } break; case arg_steg: if(conf->stegMode != stegMode_none){ printf("steg already set\n"); error = 1; } else { stegMode_t mode = getStegMode(getValue(parser)); if(mode == stegMode_none){ printf("steg mode not reconized: %s\n", getValue(parser)); error = 1; } else { conf->stegMode = mode; } } break; case arg_help: showHelp(); return NULL; break; default: error = 1; break; } } return conf; }