Coverage Report

Created: 2025-08-29 06:57

/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