aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/qpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2019-11-04 03:22:03 +0100
committerJay Berkenbilt <ejb@ql.org>2019-11-09 14:18:02 +0100
commitce8f9b6608ebcc3e88fbb1655be3e9363fa671b6 (patch)
tree4585a0a41e624ba5cc2a130a82719eee449f304e /libqpdf/qpdf
parent5c3e856e9f0b908494126d1ea7b99c8c32d37039 (diff)
downloadqpdf-ce8f9b6608ebcc3e88fbb1655be3e9363fa671b6.tar.zst
MD5: switch to pluggable crypto
Diffstat (limited to 'libqpdf/qpdf')
-rw-r--r--libqpdf/qpdf/MD5.hh70
-rw-r--r--libqpdf/qpdf/MD5_native.hh92
-rw-r--r--libqpdf/qpdf/QPDFCrypto_native.hh10
3 files changed, 95 insertions, 77 deletions
diff --git a/libqpdf/qpdf/MD5.hh b/libqpdf/qpdf/MD5.hh
new file mode 100644
index 00000000..d04a89b4
--- /dev/null
+++ b/libqpdf/qpdf/MD5.hh
@@ -0,0 +1,70 @@
+#ifndef MD5_HH
+#define MD5_HH
+
+#include <qpdf/DLL.h>
+#include <qpdf/Types.h>
+#include <qpdf/QPDFCryptoImpl.hh>
+#include <string>
+#include <memory>
+
+class MD5
+{
+ public:
+ typedef unsigned char Digest[16];
+
+ QPDF_DLL
+ MD5();
+ QPDF_DLL
+ void reset();
+
+ // encodes string and finalizes
+ QPDF_DLL
+ void encodeString(char const* input_string);
+
+ // encodes file and finalizes; offset < 0 reads whole file
+ QPDF_DLL
+ void encodeFile(char const* filename, qpdf_offset_t up_to_offset = -1);
+
+ // appends string to current md5 object
+ QPDF_DLL
+ void appendString(char const* input_string);
+
+ // appends arbitrary data to current md5 object
+ QPDF_DLL
+ void encodeDataIncrementally(char const* input_data, size_t len);
+
+ // computes a raw digest
+ QPDF_DLL
+ void digest(Digest);
+
+ // prints the digest to stdout terminated with \r\n (primarily for
+ // testing)
+ QPDF_DLL
+ void print();
+
+ // returns the digest as a hexadecimal string
+ QPDF_DLL
+ std::string unparse();
+
+ // Convenience functions
+ QPDF_DLL
+ static std::string getDataChecksum(char const* buf, size_t len);
+ QPDF_DLL
+ static std::string getFileChecksum(char const* filename,
+ qpdf_offset_t up_to_offset = -1);
+ QPDF_DLL
+ static bool checkDataChecksum(char const* const checksum,
+ char const* buf, size_t len);
+ QPDF_DLL
+ static bool checkFileChecksum(char const* const checksum,
+ char const* filename,
+ qpdf_offset_t up_to_offset = -1);
+
+ private:
+ void init();
+ void finalize();
+
+ std::shared_ptr<QPDFCryptoImpl> crypto;
+};
+
+#endif // MD5_HH
diff --git a/libqpdf/qpdf/MD5_native.hh b/libqpdf/qpdf/MD5_native.hh
index 02cdb3cf..d7e65a50 100644
--- a/libqpdf/qpdf/MD5_native.hh
+++ b/libqpdf/qpdf/MD5_native.hh
@@ -1,94 +1,32 @@
-#ifndef MD5_HH
-#define MD5_HH
+#ifndef MD5_NATIVE_HH
+#define MD5_NATIVE_HH
-#include <qpdf/DLL.h>
#include <qpdf/qpdf-config.h>
-#include <qpdf/Types.h>
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#include <string>
+#include <cstdint>
+#include <cstring>
-class MD5
+class MD5_native
{
public:
typedef unsigned char Digest[16];
- QPDF_DLL
- MD5();
- QPDF_DLL
- void reset();
-
- // encodes string and finalizes
- QPDF_DLL
- void encodeString(char const* input_string);
-
- // encodes file and finalizes; offset < 0 reads whole file
- QPDF_DLL
- void encodeFile(char const* filename, qpdf_offset_t up_to_offset = -1);
-
- // appends string to current md5 object
- QPDF_DLL
- void appendString(char const* input_string);
-
- // appends arbitrary data to current md5 object
- QPDF_DLL
- void encodeDataIncrementally(char const* input_data, size_t len);
-
- // computes a raw digest
- QPDF_DLL
- void digest(Digest);
-
- // prints the digest to stdout terminated with \r\n (primarily for
- // testing)
- QPDF_DLL
- void print();
-
- // returns the digest as a hexadecimal string
- QPDF_DLL
- std::string unparse();
-
- // Convenience functions
- QPDF_DLL
- static std::string getDataChecksum(char const* buf, size_t len);
- QPDF_DLL
- static std::string getFileChecksum(char const* filename,
- qpdf_offset_t up_to_offset = -1);
- QPDF_DLL
- static bool checkDataChecksum(char const* const checksum,
- char const* buf, size_t len);
- QPDF_DLL
- static bool checkFileChecksum(char const* const checksum,
- char const* filename,
- qpdf_offset_t up_to_offset = -1);
-
- private:
- // POINTER defines a generic pointer type
- typedef void *POINTER;
-
- // UINT2 defines a two byte word
- typedef uint16_t UINT2;
-
- // UINT4 defines a four byte word
- typedef uint32_t UINT4;
-
+ MD5_native();
void init();
void update(unsigned char *, size_t);
- void final();
+ void finalize();
+ void digest(Digest);
- static void transform(UINT4 [4], unsigned char [64]);
- static void encode(unsigned char *, UINT4 *, size_t);
- static void decode(UINT4 *, unsigned char *, size_t);
+ private:
+ static void transform(uint32_t[4], unsigned char[64]);
+ static void encode(unsigned char *, uint32_t *, size_t);
+ static void decode(uint32_t *, unsigned char *, size_t);
- UINT4 state[4]; // state (ABCD)
- UINT4 count[2]; // number of bits, modulo 2^64 (lsb first)
+ uint32_t state[4]; // state (ABCD)
+ uint32_t count[2]; // number of bits, modulo 2^64 (lsb first)
unsigned char buffer[64]; // input buffer
bool finalized;
Digest digest_val;
};
-#endif // MD5_HH
+#endif // MD5_NATIVE_HH
diff --git a/libqpdf/qpdf/QPDFCrypto_native.hh b/libqpdf/qpdf/QPDFCrypto_native.hh
index 785d6c6f..77179075 100644
--- a/libqpdf/qpdf/QPDFCrypto_native.hh
+++ b/libqpdf/qpdf/QPDFCrypto_native.hh
@@ -3,6 +3,8 @@
#include <qpdf/DLL.h>
#include <qpdf/QPDFCryptoImpl.hh>
+#include <qpdf/MD5_native.hh>
+#include <memory>
class QPDFCrypto_native: public QPDFCryptoImpl
{
@@ -11,6 +13,14 @@ class QPDFCrypto_native: public QPDFCryptoImpl
QPDF_DLL
virtual ~QPDFCrypto_native() = default;
+
+ virtual void MD5_init();
+ virtual void MD5_update(unsigned char const* data, size_t len);
+ virtual void MD5_finalize();
+ virtual void MD5_digest(MD5_Digest);
+
+ private:
+ std::shared_ptr<MD5_native> md5;
};
#endif // QPDFCRYPTO_NATIVE_HH