From 41ecc3a6e3f7f325bf11d9f68569dcca439d5bda Mon Sep 17 00:00:00 2001 From: S0S4 Date: Tue, 8 Oct 2024 23:09:41 +0200 Subject: [PATCH] [WIP] First instance it seems that the creation of RSA key works fine --- client/client | Bin 38424 -> 39168 bytes client/include/cipher.h | 7 ++++-- client/src/cipher.c | 46 ++++++++++++++++++++++++++++++++++++++++ client/src/main.c | 12 +++++------ 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/client/client b/client/client index aaf6aa3411d3f8224efcd7c4f2e52c0be0f416fa..b49feafe8565b8fca847b2eee5559afae8c63293 100755 GIT binary patch delta 10198 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 Y?(x;SdBB}D!+ie<-As|$_Q!+%7w7pMb^rhX delta 8382 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 diff --git a/client/include/cipher.h b/client/include/cipher.h index 422b0dd..a356bfe 100644 --- a/client/include/cipher.h +++ b/client/include/cipher.h @@ -1,6 +1,8 @@ #ifndef cipher_h #define cipher_h +#define OPENSSL_API_COMPAT 30000 + #include "../include/fraction.h" #include @@ -8,7 +10,8 @@ #include #include #include - +#include +#include typedef struct{ unsigned char *decryptedtext; @@ -16,5 +19,5 @@ typedef struct{ } decrypted; decrypted *decrypt_fraction(fraction_t *fraction); - +char *generate_publickey(void); #endif diff --git a/client/src/cipher.c b/client/src/cipher.c index ff46a82..db39723 100644 --- a/client/src/cipher.c +++ b/client/src/cipher.c @@ -1,5 +1,7 @@ #include "../include/cipher.h" #include "../include/fraction.h" +#include +#include decrypted decryptedstr; @@ -59,3 +61,47 @@ decrypted *decrypt_fraction(fraction_t *fraction){ return &decryptedstr; } +char *generate_publickey(void){ + + EVP_PKEY *pkey = NULL; + EVP_PKEY_CTX *pctx = NULL; + + pctx = EVP_PKEY_CTX_new_from_name(NULL, "RSA", NULL); + if(pctx == NULL){ + handleErrors(); + return NULL; + } + if(EVP_PKEY_keygen_init(pctx) <= 0){ + handleErrors(); + EVP_PKEY_CTX_free(pctx); + return NULL; + } + if(EVP_PKEY_CTX_set_rsa_keygen_bits(pctx, 2048) <= 0){ + handleErrors(); + EVP_PKEY_CTX_free(pctx); + return NULL; + } + + if(EVP_PKEY_generate(pctx, &pkey) <= 0){ + handleErrors(); + EVP_PKEY_CTX_free(pctx); + return NULL; + } + EVP_PKEY_CTX_free(pctx); + + BIO *bio = BIO_new(BIO_s_mem()); + + if(PEM_write_bio_PUBKEY(bio,pkey) <= 0){ + handleErrors(); + EVP_PKEY_free(pkey); + BIO_free(bio); + return NULL; + } + + char *pem_key = NULL; + long pem_len = BIO_get_mem_data(bio,&pem_key); + + BIO_free(bio); + +return pem_key; +} diff --git a/client/src/main.c b/client/src/main.c index e1b30d7..68251f4 100644 --- a/client/src/main.c +++ b/client/src/main.c @@ -7,7 +7,6 @@ #include "../include/sock.h" #include "../include/utils.h" #include "../include/log.h" -#include "../include/cipher.h" #include "../include/load.h" @@ -60,6 +59,10 @@ int main(void) { } freeaddrinfo(ainfo); + if (http_post(sfd, "/aeskey","text/plain",generate_publickey(),&http_post_res) != HTTP_SUCCESS) { + log_error("Failed to send RSA Public Key\n"); + goto cleanup; + } if (http_get(sfd, "/", &http_fraction_res) != HTTP_SUCCESS) { log_error("Failed to retrieve fraction links\n"); goto cleanup; @@ -105,18 +108,15 @@ int main(void) { for (int i=0; i