/src/qpdf/libqpdf/qpdf/MD5.hh
Line | Count | Source |
1 | | #ifndef MD5_HH |
2 | | #define MD5_HH |
3 | | |
4 | | #include <qpdf/QPDFCryptoImpl.hh> |
5 | | #include <qpdf/Types.h> |
6 | | #include <memory> |
7 | | #include <string> |
8 | | |
9 | | class MD5 |
10 | | { |
11 | | public: |
12 | | typedef unsigned char Digest[16]; |
13 | | |
14 | | MD5(); |
15 | | void reset(); |
16 | | |
17 | | // encodes string and finalizes |
18 | | void encodeString(char const* input_string); |
19 | | |
20 | | // encodes file and finalizes; offset < 0 reads whole file |
21 | | void encodeFile(char const* filename, qpdf_offset_t up_to_offset = -1); |
22 | | |
23 | | // appends string to current md5 object |
24 | | void appendString(char const* input_string); |
25 | | |
26 | | // appends arbitrary data to current md5 object |
27 | | void |
28 | | encodeDataIncrementally(char const* input_data, size_t len) |
29 | 16.0M | { |
30 | 16.0M | crypto->MD5_update(reinterpret_cast<unsigned char*>(const_cast<char*>(input_data)), len); |
31 | 16.0M | } |
32 | | |
33 | | // appends arbitrary data to current md5 object |
34 | | void |
35 | | encodeDataIncrementally(std::string_view input_data) |
36 | 200k | { |
37 | 200k | crypto->MD5_update( |
38 | 200k | reinterpret_cast<unsigned char*>(const_cast<char*>(input_data.data())), |
39 | 200k | input_data.size()); |
40 | 200k | } |
41 | | |
42 | | // computes a raw digest |
43 | | void digest(Digest); |
44 | | std::string digest(); |
45 | | static std::string digest(std::string_view data); |
46 | | |
47 | | // prints the digest to stdout terminated with \r\n (primarily for testing) |
48 | | void print(); |
49 | | |
50 | | // returns the digest as a hexadecimal string |
51 | | std::string unparse(); |
52 | | |
53 | | // Convenience functions |
54 | | static std::string getDataChecksum(char const* buf, size_t len); |
55 | | static std::string getFileChecksum(char const* filename, qpdf_offset_t up_to_offset = -1); |
56 | | static bool checkDataChecksum(char const* const checksum, char const* buf, size_t len); |
57 | | static bool checkFileChecksum( |
58 | | char const* const checksum, char const* filename, qpdf_offset_t up_to_offset = -1); |
59 | | |
60 | | private: |
61 | | void init(); |
62 | | void finalize(); |
63 | | |
64 | | std::shared_ptr<QPDFCryptoImpl> crypto; |
65 | | }; |
66 | | |
67 | | #endif // MD5_HH |