File: fuzz_decrypt.cpp

package info (click to toggle)
olm 3.2.16%2Bdfsg-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,208 kB
  • sloc: cpp: 15,245; ansic: 10,894; java: 3,244; objc: 2,291; javascript: 1,882; python: 1,839; makefile: 439; sh: 245; asm: 7; xml: 1
file content (69 lines) | stat: -rw-r--r-- 1,917 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "olm/olm.hh"

#include "fuzzing.hh"

int main(int argc, const char *argv[]) {
    if (argc <= 3) {
        const char * message = "Usage: decrypt: <session_key> <session_file>"
            " <message_type>\n";
        (void)write(STDERR_FILENO, message, strlen(message));
        exit(3);
    }

    const char * key = argv[1];
    size_t key_length = strlen(key);


    int session_fd = check_errno(
        "Error opening session file", open(argv[2], O_RDONLY)
    );

    int message_type = atoi(argv[3]);

    uint8_t *session_buffer;
    ssize_t session_length = check_errno(
        "Error reading session file", read_file(session_fd, &session_buffer)
    );

    int message_fd = STDIN_FILENO;
    uint8_t * message_buffer;
    ssize_t message_length = check_errno(
        "Error reading message file", read_file(message_fd, &message_buffer)
    );

    uint8_t * tmp_buffer = (uint8_t *) malloc(message_length);
    memcpy(tmp_buffer, message_buffer, message_length);

    uint8_t session_memory[olm_session_size()];
    OlmSession * session = olm_session(session_memory);
    check_session(session, "Error unpickling session", olm_unpickle_session(
        session, key, key_length, session_buffer, session_length
    ));

    size_t max_length = check_session(
        session,
        "Error getting plaintext length",
        olm_decrypt_max_plaintext_length(
            session, message_type, tmp_buffer, message_length
        )
    );

    uint8_t plaintext[max_length];

    size_t length = check_session(
        session, "Error decrypting message", olm_decrypt(
            session, message_type,
            message_buffer, message_length,
            plaintext, max_length
        )
    );

    (void)write(STDOUT_FILENO, plaintext, length);
    (void)write(STDOUT_FILENO, "\n", 1);

    free(session_buffer);
    free(message_buffer);
    free(tmp_buffer);

    return EXIT_SUCCESS;
}