Coverage Report

Created: 2025-07-18 07:00

/src/qpdf/libqpdf/AES_PDF_native.cc
Line
Count
Source (jump to first uncovered line)
1
#include <qpdf/AES_PDF_native.hh>
2
3
#include <qpdf/QIntC.hh>
4
#include <qpdf/QPDFCryptoImpl.hh>
5
#include <qpdf/QUtil.hh>
6
#include <qpdf/rijndael.h>
7
#include <cstring>
8
#include <stdexcept>
9
#include <stdlib.h>
10
#include <string>
11
12
AES_PDF_native::AES_PDF_native(
13
    bool encrypt,
14
    unsigned char const* a_key,
15
    size_t key_bytes,
16
    bool cbc_mode,
17
    unsigned char* cbc_block) :
18
0
    encrypt(encrypt),
19
0
    cbc_mode(cbc_mode),
20
0
    cbc_block(cbc_block)
21
0
{
22
0
    size_t keybits = 8 * key_bytes;
23
0
    key = std::make_unique<unsigned char[]>(key_bytes);
24
0
    rk = std::make_unique<uint32_t[]>(RKLENGTH(keybits));
25
0
    size_t rk_bytes = RKLENGTH(keybits) * sizeof(uint32_t);
26
0
    std::memcpy(key.get(), a_key, key_bytes);
27
0
    std::memset(rk.get(), 0, rk_bytes);
28
0
    if (encrypt) {
29
0
        nrounds = rijndaelSetupEncrypt(rk.get(), key.get(), keybits);
30
0
    } else {
31
0
        nrounds = rijndaelSetupDecrypt(rk.get(), key.get(), keybits);
32
0
    }
33
0
}
34
35
void
36
AES_PDF_native::update(unsigned char* in_data, unsigned char* out_data)
37
0
{
38
0
    if (encrypt) {
39
0
        if (cbc_mode) {
40
0
            for (size_t i = 0; i < QPDFCryptoImpl::rijndael_buf_size; ++i) {
41
0
                in_data[i] ^= cbc_block[i];
42
0
            }
43
0
        }
44
0
        rijndaelEncrypt(rk.get(), nrounds, in_data, out_data);
45
0
        if (cbc_mode) {
46
0
            memcpy(cbc_block, out_data, QPDFCryptoImpl::rijndael_buf_size);
47
0
        }
48
0
    } else {
49
0
        rijndaelDecrypt(rk.get(), nrounds, in_data, out_data);
50
0
        if (cbc_mode) {
51
0
            for (size_t i = 0; i < QPDFCryptoImpl::rijndael_buf_size; ++i) {
52
0
                out_data[i] ^= cbc_block[i];
53
0
            }
54
0
            memcpy(cbc_block, in_data, QPDFCryptoImpl::rijndael_buf_size);
55
0
        }
56
0
    }
57
0
}