/src/qpdf/libqpdf/QPDFCrypto_native.cc
Line | Count | Source (jump to first uncovered line) |
1 | | #include <qpdf/QPDFCrypto_native.hh> |
2 | | |
3 | | #include <qpdf/QUtil.hh> |
4 | | |
5 | | #ifdef USE_INSECURE_RANDOM |
6 | | # include <qpdf/InsecureRandomDataProvider.hh> |
7 | | #endif |
8 | | #include <qpdf/SecureRandomDataProvider.hh> |
9 | | |
10 | | static RandomDataProvider* |
11 | | getRandomProvider() |
12 | 439 | { |
13 | | #ifdef USE_INSECURE_RANDOM |
14 | | static RandomDataProvider* insecure_random_data_provider = |
15 | | InsecureRandomDataProvider::getInstance(); |
16 | | #else |
17 | 439 | static RandomDataProvider* insecure_random_data_provider = nullptr; |
18 | 439 | #endif |
19 | 439 | static RandomDataProvider* secure_random_data_provider = |
20 | 439 | SecureRandomDataProvider::getInstance(); |
21 | | |
22 | 439 | static RandomDataProvider* provider = |
23 | 439 | (secure_random_data_provider ? secure_random_data_provider |
24 | 439 | : insecure_random_data_provider ? insecure_random_data_provider |
25 | 438 | : nullptr); |
26 | | |
27 | 439 | if (provider == nullptr) { |
28 | 0 | throw std::logic_error("QPDFCrypto_native has no random data provider"); |
29 | 0 | } |
30 | | |
31 | 439 | return provider; |
32 | 439 | } |
33 | | |
34 | | void |
35 | | QPDFCrypto_native::provideRandomData(unsigned char* data, size_t len) |
36 | 439 | { |
37 | 439 | getRandomProvider()->provideRandomData(data, len); |
38 | 439 | } |
39 | | |
40 | | void |
41 | | QPDFCrypto_native::MD5_init() |
42 | 46.2k | { |
43 | 46.2k | this->md5 = std::make_shared<MD5_native>(); |
44 | 46.2k | } |
45 | | |
46 | | void |
47 | | QPDFCrypto_native::MD5_update(unsigned char const* data, size_t len) |
48 | 48.6k | { |
49 | 48.6k | this->md5->update(const_cast<unsigned char*>(data), len); |
50 | 48.6k | } |
51 | | |
52 | | void |
53 | | QPDFCrypto_native::MD5_finalize() |
54 | 46.2k | { |
55 | 46.2k | this->md5->finalize(); |
56 | 46.2k | } |
57 | | |
58 | | void |
59 | | QPDFCrypto_native::MD5_digest(MD5_Digest d) |
60 | 46.2k | { |
61 | 46.2k | this->md5->digest(d); |
62 | 46.2k | } |
63 | | |
64 | | void |
65 | | QPDFCrypto_native::RC4_init(unsigned char const* key_data, int key_len) |
66 | 36.4k | { |
67 | 36.4k | this->rc4 = std::make_shared<RC4_native>(key_data, key_len); |
68 | 36.4k | } |
69 | | |
70 | | void |
71 | | QPDFCrypto_native::RC4_process(unsigned char const* in_data, size_t len, unsigned char* out_data) |
72 | 36.4k | { |
73 | 36.4k | this->rc4->process(in_data, len, out_data); |
74 | 36.4k | } |
75 | | |
76 | | void |
77 | | QPDFCrypto_native::RC4_finalize() |
78 | 0 | { |
79 | 0 | } |
80 | | |
81 | | void |
82 | | QPDFCrypto_native::SHA2_init(int bits) |
83 | 183k | { |
84 | 183k | this->sha2 = std::make_shared<SHA2_native>(bits); |
85 | 183k | } |
86 | | |
87 | | void |
88 | | QPDFCrypto_native::SHA2_update(unsigned char const* data, size_t len) |
89 | 184k | { |
90 | 184k | this->sha2->update(data, len); |
91 | 184k | } |
92 | | |
93 | | void |
94 | | QPDFCrypto_native::SHA2_finalize() |
95 | 183k | { |
96 | 183k | this->sha2->finalize(); |
97 | 183k | } |
98 | | |
99 | | std::string |
100 | | QPDFCrypto_native::SHA2_digest() |
101 | 183k | { |
102 | 183k | return this->sha2->getRawDigest(); |
103 | 183k | } |
104 | | |
105 | | void |
106 | | QPDFCrypto_native::rijndael_init( |
107 | | bool encrypt, |
108 | | unsigned char const* key_data, |
109 | | size_t key_len, |
110 | | bool cbc_mode, |
111 | | unsigned char* cbc_block) |
112 | | |
113 | 193k | { |
114 | 193k | this->aes_pdf = |
115 | 193k | std::make_shared<AES_PDF_native>(encrypt, key_data, key_len, cbc_mode, cbc_block); |
116 | 193k | } |
117 | | |
118 | | void |
119 | | QPDFCrypto_native::rijndael_process(unsigned char* in_data, unsigned char* out_data) |
120 | 49.7M | { |
121 | 49.7M | this->aes_pdf->update(in_data, out_data); |
122 | 49.7M | } |
123 | | |
124 | | void |
125 | | QPDFCrypto_native::rijndael_finalize() |
126 | 193k | { |
127 | 193k | } |