Tkap1

Untitled

Nov 2nd, 2024
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.54 KB | None | 0 0
  1.  
  2.  
  3. #include <winsock2.h>
  4. // #include <Windows.h>
  5. #include <openssl/ssl.h>
  6. #include <openssl/err.h>
  7. #include <openssl/applink.c>
  8.  
  9. #define zero {}
  10. #define func static
  11.  
  12. #include "generated\generated_main.cpp"
  13.  
  14. int main()
  15. {
  16.     WSADATA wsa_data = zero;
  17.     int err = 0;
  18.     err = WSAStartup(MAKEWORD(2, 2), &wsa_data);
  19.     if(err != 0) {
  20.         error("BAD\n");
  21.     }
  22.  
  23.     SSL_library_init();
  24.     SSL_load_error_strings();
  25.     OpenSSL_add_all_algorithms();
  26.  
  27.     SSL_CTX* ctx = SSL_CTX_new(TLS_server_method());
  28.     if(!ctx) {
  29.         error("BAD ctx\n");
  30.     }
  31.  
  32.     if(SSL_CTX_use_certificate_file(ctx, "localhost.crt", SSL_FILETYPE_PEM) <= 0) {
  33.         ERR_print_errors_fp(stderr);
  34.         error("bad cert");
  35.     }
  36.  
  37.     if(SSL_CTX_use_PrivateKey_file(ctx, "localhost.key", SSL_FILETYPE_PEM) <= 0) {
  38.         ERR_print_errors_fp(stderr);
  39.         error("bad key");
  40.     }
  41.  
  42.     SOCKET server_fd = socket(AF_INET, SOCK_STREAM, 0);
  43.     if(server_fd == INVALID_SOCKET) {
  44.         error("failed to create socket");
  45.     }
  46.  
  47.     sockaddr_in server_addr = zero;
  48.     server_addr.sin_family = AF_INET;
  49.     server_addr.sin_addr.s_addr = INADDR_ANY;
  50.     server_addr.sin_port = htons(443);
  51.  
  52.     err = bind(server_fd, (sockaddr*)&server_addr, sizeof(server_addr));
  53.     if(err == SOCKET_ERROR) {
  54.         error("bad bind");
  55.     }
  56.  
  57.     err = listen(server_fd, SOMAXCONN);
  58.     if(err == SOCKET_ERROR) {
  59.         error("bad listen");
  60.     }
  61.  
  62.     sockaddr_in client_addr = zero;
  63.     int client_len = sizeof(client_addr);
  64.     printf("Waiting for connection...\n");
  65.     SOCKET client_fd = accept(server_fd, (sockaddr*)&client_addr, &client_len);
  66.     if(client_fd == INVALID_SOCKET) {
  67.         error("bad accept");
  68.     }
  69.     printf("FOOBAR\n");
  70.  
  71.     SSL* ssl = SSL_new(ctx);
  72.     SSL_set_fd(ssl, (int)client_fd);
  73.  
  74.     err = SSL_accept(ssl);
  75.     if(err <= 0) {
  76.         // err = SSL_get_error(ssl, err);
  77.         // switch (err) {
  78.         //  case SSL_ERROR_WANT_READ:
  79.         //  case SSL_ERROR_WANT_WRITE:
  80.         //  {
  81.         //      printf("try again\n");
  82.         //  } break;
  83.         //  case SSL_ERROR_ZERO_RETURN: {
  84.         //      printf("tcp closed\n");
  85.         //  } break;
  86.         //  default: {
  87.         //      printf("fatal %i\n", err);
  88.         //  } break;
  89.         // }
  90.         printf("bad ssl_accept\n");
  91.     }
  92.  
  93.     char* reply = "it's a cheat code";
  94.     // SSL_write(ssl, reply, (int)strlen(reply));
  95.     while(true) {
  96.         char buffer[1024] = zero;
  97.         int bytes_read = SSL_read(ssl, buffer, sizeof(buffer));
  98.         if(bytes_read > 0) {
  99.             printf("received: %s\n", buffer);
  100.         }
  101.         else {
  102.             ERR_print_errors_fp(stderr);
  103.         }
  104.     }
  105.  
  106.     // Print OpenSSL version
  107.     printf("OpenSSL version: %s\n", OpenSSL_version(OPENSSL_VERSION));
  108.  
  109.     getchar();
  110. }
  111.  
  112. func void error(char* str)
  113. {
  114.     printf("%s\n", str);
  115.     getchar();
  116.     exit(1);
  117. }
Add Comment
Please, Sign In to add comment