Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <openssl/evp.h>
- #include <unistd.h>
- #include <assert.h>
- #include <string.h>
- int main(int argc, char* argv[]) {
- EVP_CIPHER_CTX* context = EVP_CIPHER_CTX_new();
- int salt_size = 8;
- unsigned char salt[salt_size];
- fread(salt, sizeof(unsigned char), salt_size, stdin);
- fread(salt, sizeof(unsigned char), salt_size, stdin);
- //unsigned char preamble[16];
- //read(STDIN_FILENO, preamble, sizeof(preamble));
- //unsigned char salt[8];
- //memcpy(salt, preamble + 8, sizeof(salt));
- printf("INPUT : %s\n", salt);
- fflush(stdout);
- unsigned char key[32];
- unsigned char init_value[16];
- EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha256(), salt, argv[1], strlen(argv[1]), 1, key, init_value);
- EVP_DecryptInit(context, EVP_aes_256_cbc(), key, init_value);
- int buff_size = EVP_CIPHER_CTX_block_size(context);
- unsigned char buffer[buff_size];
- int readed = fread((void*)buffer, sizeof(unsigned char), buff_size, stdin);
- int out_size = EVP_CIPHER_CTX_block_size(context);
- unsigned char out[out_size];
- int written;
- while(readed > 0 || written > 0) {
- assert(EVP_DecryptUpdate(context, out, &written, buffer, readed) > 0);
- //printf("%d\n", written);
- fflush(stdout);
- printf("%.*s", written, out);
- //fwrite((void*)out, sizeof(unsigned char), written, stdout);
- fflush(stdout);
- //printf("here");
- readed = fread((void*)buffer, sizeof(unsigned char), buff_size, stdin);
- }
- EVP_DecryptFinal(context, out, &written);
- printf("%.*s", written, out);
- fflush(stdout);
- EVP_CIPHER_CTX_free(context);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement