Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Mourzor

Pages: [1]
1
I see. That does make sense. I did manage to solve the issue anyway I think so I should be fine.

2
Managed to solve everything I think. Also realized I was returning a pointer to something getting deleted right away so I have just made it apply to an outside variable.

std::vector<unsigned char> ciphertext;

char* encrypt(const char* data, std::size_t& length)
{
        ciphertext.resize(length + (16 - (length % 16)));

        int ciphertext_len = gcm_encrypt((unsigned char*)data, strlen((char*)data),
                NULL, NULL,
                key,
                iv, 16,
                &ciphertext[0], tag);

        length = ciphertext_len;

        return (char*)&ciphertext[0];
}

3
I am having trouble with encrypting data in a way that conforms to the onReceive and onSend functions. I am trying to encrypt and decrypt data using OpenSSL. My problem is that I can't figure out how to get OpenSSL to take in an input of variable size. What I mean by this is that my code works perfectly well when OpenSSL takes in something such as unsigned char ciphertext[128]; - however this is of a fixed length and packets in networks of course can be of varying sizes.

I am basically just trying to figure out how to pass in ciphertext as I am now but with a varying length. I did manage to get an encryption code working that returned a string as opposed to a void (char*? I've seen that SecureSFML for example returns/appends a char* in its' onReceive/onSend functions) as onReceive and onSend do.

Below is a simplified bit of the code I am using specifically for encrypting and not decrypting since my problem is the same in both encrypting and decrypting.

unsigned char* key;
unsigned char* iv;
unsigned char tag[16];

int gcm_encrypt(unsigned char* plaintext, int plaintext_len,
        unsigned char* aad, int aad_len,
        unsigned char* key,
        unsigned char* iv, int iv_len,
        unsigned char* ciphertext,
        unsigned char* tag);

char* encrypt(const char* data, std::size_t& length)
{
        unsigned char ciphertext[128];

        int ciphertext_len = gcm_encrypt((unsigned char*)data, strlen((char*)data),
                NULL, NULL,
                key,
                iv, 16,
                ciphertext, tag);

        length = ciphertext_len;

        return (char*)ciphertext;
}

This code works perfectly aside from the problem with ciphertext being of a fixed length.

Pages: [1]
anything