inline buffer rsa_key::public_decrypt(const buffer& buf, int padding) const { buffer result(size()); result.data().resize(public_decrypt(buffer_cast<uint8_t>(result), buffer_size(result), buffer_cast<uint8_t>(buf), buffer_size(buf), padding)); return result; }
int main() { char sendline[_MAX_BUFF] = ""; string return_value; int pid; string user_name, item_price; /* Create a TCP socket */ char *ptr_price, *ptr_dprice, *ptr_de1, *ptr_en, *ptr_de2; char recvline[_MAX_BUFF]; listenfd = socket(AF_INET, SOCK_STREAM, 0); /* Initialize server's address and well-known port */ bzero(&servaddr, sizeof (servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(1200); /* daytime server */ /* Bind server’s address and port to the socket */ bind(listenfd, (struct sockaddr *) &servaddr, sizeof (servaddr)); /* Convert socket to a listening socket – max 100 pending clients*/ listen(listenfd, 100); cout << "bank hello" << endl; /* Wait for client connections and accept them */ while (true) { clilen = sizeof (cliaddr); connfd = accept(listenfd, (struct sockaddr *) &cliaddr, (socklen_t*) & clilen); if (connfd < 0) { perror("ERROR on accept"); exit(5); } if ((pid = fork()) == 0) { close(listenfd); //Child server; bzero(recvline, sizeof (recvline)); //read card number from psystem if (read(connfd, recvline, sizeof (recvline)) > 0) { ptr_en = recvline; ptr_de1 = public_decrypt(ptr_en, PSYS_PUB_K); if (ptr_de1 != NULL) { cout << "Verfiy the psystem digital signature" << endl; } ptr_de2 = private_decrypt(ptr_de1, BANK_PRI_K); bzero(recvline, sizeof (recvline)); } if (read(connfd, recvline, sizeof (recvline)) > 0) { ptr_price = recvline; ptr_dprice = public_decrypt(ptr_price, PSYS_PUB_K); item_price = ptr_dprice; return_value = renew_account(ptr_de2, ptr_dprice); strncat(sendline, return_value.c_str(), return_value.size()); write(connfd, sendline, strlen(sendline)); bzero(recvline, sizeof (recvline)); } if (read(connfd, recvline, sizeof (recvline)) > 0) { cout << "Customer:" << recvline << endl; user_name = recvline; if (return_value == str_success) { renew_activity(user_name, item_price); } bzero(recvline, sizeof (recvline)); } close(connfd); exit(0); } close(connfd); //Parent server; } return 0; }