Skip to content

Commit fa740cb

Browse files
committed
Update
1 parent d102db9 commit fa740cb

File tree

6 files changed

+172
-54
lines changed

6 files changed

+172
-54
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
server/
22
client/
3+
test/main

client.cpp

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ using std::string, std::vector, nlohmann::json;
1616
namespace fs = std::filesystem;
1717
namespace ch = std::chrono;
1818

19-
string drawUI(string title, vector<string> arr) {
19+
char drawUI(string title, vector<string> arr) {
2020
noecho();
21-
int choice = 0, ch;
21+
char choice = 0, ch;
2222
bool kurwa = true;
2323
while (kurwa) {
2424
printw("%s\n", title.c_str());
@@ -40,7 +40,7 @@ string drawUI(string title, vector<string> arr) {
4040
clear();
4141
}
4242
echo();
43-
return arr[choice];
43+
return choice;
4444
}
4545
void progressBar(const long &prog, const long &total) {
4646
int y, x;
@@ -244,29 +244,32 @@ int main() {
244244
return -1;
245245
}
246246

247-
if (drawUI("Choose one option:", {"Sign In", "Sign Up"})[5] == 'U') {
248-
client.sock.send("signUp");
249-
client.reg();
250-
client.log();
251-
} else {
252-
client.sock.send("signIn");
253-
client.log();
247+
switch (drawUI("Choose one option:", {"Sign In", "Sign Up"})) {
248+
case 0:
249+
client.sock.send("signIn");
250+
client.log();
251+
break;
252+
case 1:
253+
client.sock.send("signUp");
254+
client.reg();
255+
client.log();
256+
break;
254257
}
255258
project project(client);
256259
switch (drawUI("Choose one option:",
257260
{"Create new project", "Open existing project",
258-
"Download project from server"})[0]) {
259-
case 'C':
261+
"Download project from server"})) {
262+
case 0:
260263
client.sock.send("createPrj");
261264
project.set();
262265
project.open();
263266
break;
264-
case 'O':
267+
case 1:
265268
client.sock.send("openPrj");
266269
project.set();
267270
project.open();
268271
break;
269-
case 'D':
272+
case 2:
270273
client.sock.send("downloadPrj");
271274
project.set();
272275
project.download();

server.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include <string>
1313
#include <thread>
1414

15-
#include "encryption.hpp"
1615
#include "sr.hpp"
1716

1817
using std::string, std::thread, std::cout, std::endl;

test/server.crt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDazCCAlOgAwIBAgIUXCOW/amlsAGv3XGnLlW+bXECTr8wDQYJKoZIhvcNAQEL
3+
BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
4+
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDA0MTcxMjQ3NDNaFw0yNTA0
5+
MTcxMjQ3NDNaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
6+
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB
7+
AQUAA4IBDwAwggEKAoIBAQC4OwAalfHEEYh56sjwHLtvN5TCtrS46+baJv+Xc7E9
8+
g+YKNVWNdskJUXcgjRk65oYFmNmZb+7Mk2GYY/9u0aeXCaGGzM7598jrJ61036Kp
9+
/Ln3XuDUWxFmUoYS5W7CIrgtZXWx0bJoaOHE78rYIYjmy6rmZ0G9TzgRANh/pKm9
10+
YBpcMRaY/f5Kw3dWNWfWQtXRk8ezn78KQVzgj0DCbw4nsq/3vcmsnMgoouOxOA37
11+
RVLAx1+CEfLPpKGHGw+Yw95GKGa0paeLmjwHkAtRfkZV32/8P1lifxLFCdjaEYMW
12+
uLUjmH3c78BHTDxOYLmT6QXoydf3wsqdUu5erIYuxVWHAgMBAAGjUzBRMB0GA1Ud
13+
DgQWBBTWUBULuVAetgg667iY6G3Hz5Sj0DAfBgNVHSMEGDAWgBTWUBULuVAetgg6
14+
67iY6G3Hz5Sj0DAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAg
15+
olij0J+S5Y0t25pvYT0zeqFOpWeRertw/ubnXFQ6mNjdo/HsfPoK/aGC/iO9bEoc
16+
myF2PqFF9+dfLtgyGP6gexBAQJjHeG1kdjVE/M7V319kkrsMrvjSmob94IvxWEPv
17+
3yvHHj7vYWYdbuL4iGfb9SM9jfyJSVwcq5EtwNPA75j3kJmUc2f4z/O3tSBeaYRq
18+
FGGFmQXUnZxfJAcwbPIUHYML1Aw7lN/PI+vf4sBMEwLY2rIIFOow5P/nhoFjp65m
19+
uXQNPY2uKelrxwhsSvS8JfZWrMNUeTHGKjUhV+G695ObCZIHPsoAfwy2OAe5ypSn
20+
LZ56rmv5JRvmFLkFDsXG
21+
-----END CERTIFICATE-----

test/server.key

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC4OwAalfHEEYh5
3+
6sjwHLtvN5TCtrS46+baJv+Xc7E9g+YKNVWNdskJUXcgjRk65oYFmNmZb+7Mk2GY
4+
Y/9u0aeXCaGGzM7598jrJ61036Kp/Ln3XuDUWxFmUoYS5W7CIrgtZXWx0bJoaOHE
5+
78rYIYjmy6rmZ0G9TzgRANh/pKm9YBpcMRaY/f5Kw3dWNWfWQtXRk8ezn78KQVzg
6+
j0DCbw4nsq/3vcmsnMgoouOxOA37RVLAx1+CEfLPpKGHGw+Yw95GKGa0paeLmjwH
7+
kAtRfkZV32/8P1lifxLFCdjaEYMWuLUjmH3c78BHTDxOYLmT6QXoydf3wsqdUu5e
8+
rIYuxVWHAgMBAAECggEAVEmqIn+3vRzIc/8XL8P1fUzQosU0qeZEGEr/ZStpS9us
9+
w77jBXXzRHAhMKNdh7UwXB8ybyDnAHHtlOsrUmhZZKDjZekOSQ80vWHJ2k72/Q7D
10+
honCE2YW79mRvdN6eRepbBufXVuzZFGX+aI8C+ZL3EwSRJe5XAOCg0T/yGZtwlYO
11+
D30JAtY4GzpSpdd+hBT6ZzHLv07qdmIwfKm8q7Ks/zphOSREiruSMEPB0El7zQLc
12+
yvcjeJbAezWXK7xA9J3FeMOTBuHjILZ9wBKSBcL2rZmcPblOL2qJGPpb5FOJ9FLH
13+
qc5chMMw9Lug/PsC8/DiKeCzVc9IEngTcaJV8N6PAQKBgQDvZcTpWFFPnubz+Huz
14+
SaNhMXctXjII5JD4iPdkgHTQZxjWcocRON80EaQpaOYVgWq2dKGC4Azarnf14KTO
15+
sgvmOsENHrKpkOsXAiSeJpbPqgVp7fSbIvUlQkMfkOmFYskI2ThilWzXPfo/zuSI
16+
ouwQlup8cRFPMpdKUvd8BxKxUwKBgQDFAc2BIUL+BvT72fNQ3VPJ5n8SIL5/u5MZ
17+
feRqsQs+JVp154X4zVptvTGp/ej0L401Laax4KKGFLEFhpp7f3SJM30bNDvatm9/
18+
zuk5DKvvBDu/6gtBlsF0LK9SkbLvJ85gF+qSPJXZiEGubB8GvS5+hGRvjTphLHB0
19+
+GV4XnBAfQKBgQCoMxq80F6g0IZ4V9ehylVOTpDrgUkqUl1BIgqfxFlOq4EZ+vHH
20+
OewpC1QJ/DfcWEd/1kY8S+r8IqUKTkG9L/+ITTOiYjUpSjbCvbC4pWhEk7KmEJhR
21+
/6e5++ppXUmVfCi/XM9vBImqWVNgTZ7oGYA+z6oEsPR2bpc5kz1rGRUbHQKBgBjz
22+
PX+ZIs7hOq2a0MHxBeeQFY/KLdYnf12/H+qTOYVJXceI5uK3vzgeued5jMNAMnYF
23+
rhLhDDRG8pRsk6wIXE30A2gqmVn9uOlK3yamgC/pLVgE4CASY7W+4wVmBm9bbzuk
24+
S8Txf1jpdMgOUW+dDgJf6ghmrnoYErX9r3wrGbRRAoGAFZEu+SnERTYabJH42zSy
25+
D/yIALj9rCMXOPYvgLoHadIYT87cEeBP9yIHUHjODpx8DxxR5m2RZP2NQuC63lUl
26+
ucMeryQAmEeami1Ij68K09bu40ZZRWZ5jJfFCSsNIwmnRno26kzQiC76BLcqZFo2
27+
V9ZqytcM2ejddO+ya3VYOsU=
28+
-----END PRIVATE KEY-----

test/test1.cpp

Lines changed: 105 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,108 @@
1-
#include <openssl/evp.h>
2-
#include <openssl/pem.h>
1+
#include <arpa/inet.h>
2+
#include <openssl/err.h>
3+
#include <openssl/ssl.h>
4+
#include <sys/socket.h>
5+
#include <unistd.h>
6+
7+
#include <chrono>
8+
#include <thread>
9+
#include <vector>
10+
11+
using namespace std;
12+
13+
class client {
14+
public:
15+
class clsSock {
16+
public:
17+
int sock;
18+
SSL *ssl;
19+
void close() {
20+
SSL_shutdown(ssl);
21+
::close(sock);
22+
SSL_free(ssl);
23+
}
24+
clsSock(SSL *ssl) : sock(socket(AF_INET, SOCK_STREAM, 0)), ssl(ssl) {}
25+
clsSock(int sock, SSL *ssl) : sock(sock), ssl(ssl) {}
26+
} sock;
27+
28+
void testServer() {
29+
char buffer[1024];
30+
SSL_read(sock.ssl, buffer, sizeof(buffer));
31+
printf("%s\n", buffer);
32+
SSL_write(sock.ssl, buffer, strlen(buffer));
33+
}
34+
void testClient() {
35+
const char *message = "Hello, Server!";
36+
SSL_write(sock.ssl, message, strlen(message));
37+
char buffer[1024];
38+
SSL_read(sock.ssl, buffer, sizeof(buffer));
39+
printf("%s\n", buffer);
40+
}
41+
42+
client(SSL *ssl) : sock(ssl) {}
43+
client(int sock, SSL *ssl) : sock(sock, ssl) {}
44+
};
45+
46+
void handleClient(client client) {
47+
client.testServer();
48+
client.sock.close();
49+
}
50+
void serverSock() {
51+
SSL_library_init();
52+
SSL_CTX *ctx = SSL_CTX_new(TLS_server_method());
53+
54+
SSL_CTX_use_certificate_file(ctx, "server.crt", SSL_FILETYPE_PEM);
55+
SSL_CTX_use_PrivateKey_file(ctx, "server.key", SSL_FILETYPE_PEM);
56+
57+
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
58+
sockaddr_in server_addr{};
59+
server_addr.sin_family = AF_INET;
60+
server_addr.sin_port = htons(8080);
61+
server_addr.sin_addr.s_addr = INADDR_ANY;
62+
bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
63+
64+
listen(server_fd, 5);
65+
while (true) {
66+
client client(accept(server_fd, NULL, NULL), SSL_new(ctx));
67+
SSL_set_fd(client.sock.ssl, client.sock.sock);
68+
SSL_accept(client.sock.ssl);
69+
}
70+
71+
SSL_CTX_free(ctx);
72+
}
73+
74+
void clientSock() {
75+
SSL_library_init();
76+
SSL_CTX *ctx = SSL_CTX_new(TLS_client_method());
77+
78+
SSL_CTX_load_verify_locations(ctx, "server.crt", NULL);
79+
80+
client client(SSL_new(ctx));
81+
sockaddr_in server_addr{};
82+
server_addr.sin_family = AF_INET;
83+
server_addr.sin_port = htons(8080);
84+
inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);
85+
connect(client.sock.sock, (struct sockaddr *)&server_addr,
86+
sizeof(server_addr));
87+
88+
SSL_set_fd(client.sock.ssl, client.sock.sock);
89+
SSL_connect(client.sock.ssl);
90+
91+
client.testClient();
92+
93+
client.sock.close();
94+
SSL_CTX_free(ctx);
95+
}
396

497
int main() {
5-
EVP_PKEY *pkey = EVP_PKEY_new();
6-
EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new_id(EVP_PKEY_RSA, NULL);
7-
8-
// Generate keys
9-
EVP_PKEY_keygen_init(ctx);
10-
EVP_PKEY_CTX_set_rsa_keygen_bits(ctx, 2048);
11-
EVP_PKEY_generate(ctx, &pkey);
12-
// The keys are now stored in memory in the 'pkey' variable
13-
14-
// Copy public key to another variable
15-
EVP_PKEY *public_key = EVP_PKEY_new();
16-
public_key = EVP_PKEY_dup(pkey);
17-
18-
unsigned char msg[2048 / 8] = "Hello, World!";
19-
// printf("Original message: %s\n", msg);
20-
21-
// Encrypt message
22-
unsigned char enc[2048 / 8];
23-
size_t enc_len;
24-
ctx = EVP_PKEY_CTX_new(public_key, NULL);
25-
EVP_PKEY_encrypt_init(ctx);
26-
EVP_PKEY_encrypt(ctx, enc, &enc_len, msg, strlen((char *)msg) + 1);
27-
// printf("Encrypted message: %s\n", enc);
28-
29-
// Decrypt message
30-
unsigned char dec[2048 / 8];
31-
size_t dec_len;
32-
ctx = EVP_PKEY_CTX_new(pkey, NULL);
33-
EVP_PKEY_decrypt_init(ctx);
34-
EVP_PKEY_decrypt(ctx, dec, &dec_len, enc, enc_len);
35-
printf("Decrypted message: %s\n", dec);
36-
37-
// Clean up
38-
EVP_PKEY_free(pkey);
39-
EVP_PKEY_CTX_free(ctx);
40-
41-
return 0;
98+
thread serverThread(serverSock);
99+
this_thread::sleep_for(chrono::seconds(1));
100+
101+
int numClients = 1;
102+
vector<thread> clientThreads;
103+
for (int i = 0; i < numClients; i++)
104+
clientThreads.push_back(thread(clientSock));
105+
106+
serverThread.join();
107+
for (auto &t : clientThreads) t.join();
42108
}

0 commit comments

Comments
 (0)