Skip to content

Commit

Permalink
some refactors, stull sigsegv
Browse files Browse the repository at this point in the history
  • Loading branch information
Xavrax committed Sep 15, 2023
1 parent f3292eb commit 8485a15
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 49 deletions.
48 changes: 23 additions & 25 deletions core/pbcc_crypto.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,14 @@

static int aes_encrypt(
struct pubnub_crypto_algorithm_t const *algo,
struct pubnub_encrypted_data *msg,
char *base64_str,
size_t n
struct pubnub_encrypted_data *result,
pubnub_bymebl_t to_encrypt
);

static int aes_decrypt(
struct pubnub_crypto_algorithm_t const *algo,
char const *base64_str,
struct pubnub_encrypted_data *msg
pubnub_bymebl_t* result,
struct pubnub_encrypted_data to_decrypt
);

struct aes_context {
Expand Down Expand Up @@ -69,63 +68,62 @@ static void generate_init_vector(char *iv) {

static int aes_encrypt(
struct pubnub_crypto_algorithm_t const *algo,
struct pubnub_encrypted_data *msg,
char *base64_str,
size_t n
struct pubnub_encrypted_data *result,
pubnub_bymebl_t to_encrypt
) {
struct aes_context *ctx = (struct aes_context *)algo->user_data;

size_t enc_buffer_size = estimated_enc_buffer_size(n);
size_t enc_buffer_size = estimated_enc_buffer_size(to_encrypt.size);

msg->data.ptr = (uint8_t *)malloc(enc_buffer_size);
if (msg->data.ptr == NULL) {
result->data.ptr = (char *)malloc(enc_buffer_size);
if (result->data.ptr == NULL) {
return -1;
}

msg->data.size = enc_buffer_size;
result->data.size = enc_buffer_size;

char iv[AES_IV_SIZE];
generate_init_vector(iv);

// TODO: use proper function to fulfill the data.ptr

msg->metadata.ptr = (char *)malloc(AES_IV_SIZE);
if (msg->metadata.ptr == NULL) {
free(msg->data.ptr);
result->metadata.ptr = (char *)malloc(AES_IV_SIZE);
if (result->metadata.ptr == NULL) {
free(result->data.ptr);
return -1;
}

// TODO: resize the data.ptr to the actual size

memcpy(msg->metadata.ptr, iv, AES_IV_SIZE);
msg->metadata.size = AES_IV_SIZE;
memcpy(result->metadata.ptr, iv, AES_IV_SIZE);
result->metadata.size = AES_IV_SIZE;

return 0;
}

static int aes_decrypt(
struct pubnub_crypto_algorithm_t const *algo,
char const *base64_str,
struct pubnub_encrypted_data *msg
pubnub_bymebl_t* result,
struct pubnub_encrypted_data to_decrypt
) {
struct aes_context *ctx = (struct aes_context *)algo->user_data;

if (msg->metadata.ptr == NULL || msg->metadata.size != AES_IV_SIZE) {
if (to_decrypt.metadata.ptr == NULL || to_decrypt.metadata.size != AES_IV_SIZE) {
return -1;
}

size_t dec_buffer_size = estimated_dec_buffer_size(msg->data.size);
size_t dec_buffer_size = estimated_dec_buffer_size(to_decrypt.data.size);

msg->data.ptr = (uint8_t *)malloc(dec_buffer_size);
if (msg->data.ptr == NULL) {
result->ptr = (uint8_t *)malloc(dec_buffer_size);
if (result->ptr == NULL) {
return -1;
}

msg->data.size = dec_buffer_size;
result->size = dec_buffer_size;

// TODO: use proper function to fulfill base64_str

return strlen(base64_str);
return 0;
}


Expand Down
6 changes: 3 additions & 3 deletions core/pbcc_crypto.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
*/
struct pubnub_encrypted_data {
/** Encrypted data. */
struct pubnub_byte_mem_block data;
struct pubnub_char_mem_block data;

/** Metadata.
Expand Down Expand Up @@ -87,7 +87,7 @@ typedef struct pubnub_crypto_algorithm_t {
@return 0: OK, -1: error
*/
int (*encrypt)(struct pubnub_crypto_algorithm_t const *cryptor, struct pubnub_encrypted_data *msg, char *base64_str, size_t n);
int (*encrypt)(struct pubnub_crypto_algorithm_t const *cryptor, struct pubnub_encrypted_data *result, pubnub_bymebl_t to_encrypt);

// TODO: return type - int or enum?
/** Function pointer to the decrypt function.
Expand All @@ -98,7 +98,7 @@ typedef struct pubnub_crypto_algorithm_t {
@return >=0: OK (size of the data), -1: error
*/
int (*decrypt)(struct pubnub_crypto_algorithm_t const *cryptor, char const *base64_str, struct pubnub_encrypted_data *data);
int (*decrypt)(struct pubnub_crypto_algorithm_t const *cryptor, pubnub_bymebl_t* result, struct pubnub_encrypted_data to_decrypt);

/** Pointer to the user data needed for the algorithm. */
void *user_data;
Expand Down
29 changes: 14 additions & 15 deletions core/pbcc_crypto_legacy.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,22 @@

#include "pbcc_crypto.h"
#include "pubnub_crypto.h"
#include "pubnub_memory_block.h"
#include <string.h>
#include <stdlib.h>

#define LEGACY_IDENTIFIER "0000"

static int legacy_encrypt(
struct pubnub_crypto_algorithm_t const *algo,
struct pubnub_encrypted_data *msg,
char *base64_str,
size_t n
struct pubnub_encrypted_data *result,
pubnub_bymebl_t to_encrypt
);

static int legacy_decrypt(
struct pubnub_crypto_algorithm_t const *algo,
char const *base64_str,
struct pubnub_encrypted_data *msg
pubnub_bymebl_t* result,
struct pubnub_encrypted_data to_decrypt
);

struct legacy_context {
Expand Down Expand Up @@ -53,34 +53,33 @@ struct pubnub_crypto_algorithm_t *pbcc_legacy_crypto_init(const char* cipher_key

static int legacy_encrypt(
struct pubnub_crypto_algorithm_t const *algo,
struct pubnub_encrypted_data *msg,
char *base64_str,
size_t n
struct pubnub_encrypted_data *result,
pubnub_bymebl_t to_encrypt
) {
struct legacy_context *ctx = (struct legacy_context *)algo->user_data;

if (0 != pubnub_encrypt(ctx->cipher_key, msg->data, base64_str, &n)) {
if (0 != pubnub_encrypt(ctx->cipher_key, to_encrypt, result->data.ptr, &result->data.size)) {
return -1;
}

msg->metadata.ptr = NULL;
msg->metadata.size = 0;
result->metadata.ptr = NULL;
result->metadata.size = 0;

return 0;
}

static int legacy_decrypt(
struct pubnub_crypto_algorithm_t const *algo,
char const *base64_str,
struct pubnub_encrypted_data *msg
pubnub_bymebl_t *result,
struct pubnub_encrypted_data to_decrypt
) {
struct legacy_context *ctx = (struct legacy_context *)algo->user_data;

if (0 != pubnub_decrypt(ctx->cipher_key, base64_str, &msg->data)) {
if (0 != pubnub_decrypt(ctx->cipher_key, to_decrypt.data.ptr, result)) {
return -1;
}

return strlen(base64_str);
return 0;
}


Expand Down
18 changes: 12 additions & 6 deletions core/pbcc_crypto_unit_tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,19 @@ AfterEach(crypto) {

void assert_that_cryptor_works_as_expected(pubnub_crypto_algorithm_t *sut) {
for (size_t i = 0; i < AMOUNT_OF_TEST_CASES; i++) {
struct pubnub_encrypted_data* encrypted = NULL;
int enc_res = sut->encrypt(sut, encrypted, test_cases[i], strlen((char*)test_cases[i]));
pubnub_bymebl_t to_encrypt;
to_encrypt.ptr = test_cases[i];
to_encrypt.size = strlen((char*)test_cases[i]);

struct pubnub_encrypted_data *encrypted = NULL;

int enc_res = sut->encrypt(sut, encrypted, to_encrypt);
assert_that(enc_res, is_not_equal_to(-1));

char* decrypted = NULL;
int dec_res = sut->decrypt(sut, decrypted, encrypted);
pubnub_bymebl_t* decrypted = NULL;
int dec_res = sut->decrypt(sut, decrypted, *encrypted);
assert_that(dec_res, is_not_equal_to(-1));

assert_that(decrypted, is_equal_to_string(test_cases[i]));

free(encrypted);
Expand Down Expand Up @@ -103,8 +108,9 @@ Ensure(crypto, should_properly_legacy_encrypt_and_decrypt_data) {
#if 0
int main(int argc, char *argv[]) {
TestSuite *suite = create_test_suite();
add_test_with_context(suite, token_parsing);
add_test_with_context(suite, crypto);
run_test_suite(suite, create_text_reporter());
}
#endif // 0
//#endif // PUBNUB_CRYPTO_API

0 comments on commit 8485a15

Please sign in to comment.