summaryrefslogtreecommitdiff
path: root/sid/sidplay-libs-2.1.0/libsidutils/src/MD5/MD5.h
diff options
context:
space:
mode:
Diffstat (limited to 'sid/sidplay-libs-2.1.0/libsidutils/src/MD5/MD5.h')
-rw-r--r--sid/sidplay-libs-2.1.0/libsidutils/src/MD5/MD5.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/sid/sidplay-libs-2.1.0/libsidutils/src/MD5/MD5.h b/sid/sidplay-libs-2.1.0/libsidutils/src/MD5/MD5.h
new file mode 100644
index 00000000..7ced54f7
--- /dev/null
+++ b/sid/sidplay-libs-2.1.0/libsidutils/src/MD5/MD5.h
@@ -0,0 +1,135 @@
+/*
+ * This code has been derived by Michael Schwendt <mschwendt@yahoo.com>
+ * from original work by L. Peter Deutsch <ghost@aladdin.com>.
+ *
+ * The original C code (md5.c, md5.h) is available here:
+ * ftp://ftp.cs.wisc.edu/ghost/packages/md5.tar.gz
+ */
+
+/*
+ Copyright (C) 1999 Aladdin Enterprises. All rights reserved.
+
+ This software is provided 'as-is', without any express or implied
+ warranty. In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+ misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ L. Peter Deutsch
+ ghost@aladdin.com
+ */
+
+#ifndef MD5_H
+#define MD5_H
+
+#include "MD5_Defs.h"
+
+typedef unsigned char md5_byte_t; // 8-bit byte
+typedef unsigned int md5_word_t; // 32-bit word
+
+class MD5
+{
+ public:
+ // Initialize the algorithm. Reset starting values.
+ MD5();
+
+ // Append a string to the message.
+ void append(const void* data, int nbytes);
+
+ // Finish the message.
+ void finish();
+
+ // Return pointer to 16-byte fingerprint.
+ const md5_byte_t* getDigest();
+
+ // Initialize the algorithm. Reset starting values.
+ void reset();
+
+ private:
+
+ /* Define the state of the MD5 Algorithm. */
+ md5_word_t count[2]; /* message length in bits, lsw first */
+ md5_word_t abcd[4]; /* digest buffer */
+ md5_byte_t buf[64]; /* accumulate block */
+
+ md5_byte_t digest[16];
+
+ md5_word_t tmpBuf[16];
+ const md5_word_t* X;
+
+ void
+ process(const md5_byte_t data[64]);
+
+ md5_word_t
+ ROTATE_LEFT(const md5_word_t x, const int n);
+
+ md5_word_t
+ F(const md5_word_t x, const md5_word_t y, const md5_word_t z);
+
+ md5_word_t
+ G(const md5_word_t x, const md5_word_t y, const md5_word_t z);
+
+ md5_word_t
+ H(const md5_word_t x, const md5_word_t y, const md5_word_t z);
+
+ md5_word_t
+ I(const md5_word_t x, const md5_word_t y, const md5_word_t z);
+
+ typedef md5_word_t (MD5::*md5func)(const md5_word_t x, const md5_word_t y, const md5_word_t z);
+
+ void
+ SET(md5func func, md5_word_t& a, md5_word_t& b, md5_word_t& c,
+ md5_word_t& d, const int k, const int s,
+ const md5_word_t Ti);
+};
+
+inline md5_word_t
+MD5::ROTATE_LEFT(const md5_word_t x, const int n)
+{
+ return ( (x<<n) | (x>>(32-n)) );
+}
+
+inline md5_word_t
+MD5::F(const md5_word_t x, const md5_word_t y, const md5_word_t z)
+{
+ return ( (x&y) | (~x&z) );
+}
+
+inline md5_word_t
+MD5::G(const md5_word_t x, const md5_word_t y, const md5_word_t z)
+{
+ return ( (x&z) | (y&~z) );
+}
+
+inline md5_word_t
+MD5::H(const md5_word_t x, const md5_word_t y, const md5_word_t z)
+{
+ return ( x^y^z );
+}
+
+inline md5_word_t
+MD5::I(const md5_word_t x, const md5_word_t y, const md5_word_t z)
+{
+ return ( y ^ (x|~z) );
+}
+
+inline void
+MD5::SET(md5func func, md5_word_t& a, md5_word_t& b, md5_word_t& c,
+ md5_word_t& d, const int k, const int s,
+ const md5_word_t Ti)
+{
+ md5_word_t t = a + (this->*func)(b,c,d) + X[k] + Ti;
+ a = ROTATE_LEFT(t, s) + b;
+}
+
+#endif /* MD5_H */