View difference between Paste ID: cAzxeBYQ and TLTyFyQQ
SHOW: | | - or go back to the newest paste.
1
#include <stdio.h>
2
#include <openssl/evp.h>
3
#include <unistd.h>
4
#include <assert.h>
5
#include <string.h>
6
7
8
int main(int argc, char* argv[]) {
9
    EVP_CIPHER_CTX* context = EVP_CIPHER_CTX_new();
10
11
    int salt_size = 8;
12
    unsigned char salt[salt_size];
13
    fread(salt, sizeof(unsigned char), salt_size, stdin);
14
    fread(salt, sizeof(unsigned char), salt_size, stdin);
15
16
    //unsigned char preamble[16];
17
    //read(STDIN_FILENO, preamble, sizeof(preamble));
18
    //unsigned char salt[8];
19
    //memcpy(salt, preamble + 8, sizeof(salt));
20
21
    printf("INPUT : %s\n", salt);
22
    fflush(stdout);
23
24
    unsigned char key[32];
25
    unsigned char init_value[16];
26
    EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha256(), salt, argv[1], strlen(argv[1]), 1, key, init_value);
27
    EVP_DecryptInit(context, EVP_aes_256_cbc(), key, init_value);
28
29
    int buff_size = EVP_CIPHER_CTX_block_size(context);
30
    unsigned char buffer[buff_size];
31
    int readed = fread((void*)buffer, sizeof(unsigned char), buff_size, stdin);
32
33
    int out_size = EVP_CIPHER_CTX_block_size(context);
34
    unsigned char out[out_size];
35
    int written;
36
37
    while(readed > 0 || written > 0) {
38
        assert(EVP_DecryptUpdate(context, out, &written, buffer, readed) > 0);
39
        //printf("%d\n", written);
40
        fflush(stdout);
41
        printf("%.*s", written, out);
42
        //fwrite((void*)out, sizeof(unsigned char), written, stdout);
43
        fflush(stdout);
44
        //printf("here");
45
        readed = fread((void*)buffer, sizeof(unsigned char), buff_size, stdin);
46
    }
47
48
    EVP_DecryptFinal(context, out, &written);
49
50
    printf("%.*s", written, out);
51
    fflush(stdout);
52
    EVP_CIPHER_CTX_free(context);
53
}