summaryrefslogtreecommitdiff
path: root/src/common/md5calc.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/md5calc.hpp')
-rw-r--r--src/common/md5calc.hpp37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/common/md5calc.hpp b/src/common/md5calc.hpp
index de19e0f..98f44d6 100644
--- a/src/common/md5calc.hpp
+++ b/src/common/md5calc.hpp
@@ -9,44 +9,51 @@
#include <cstddef>
#include <cstdio>
+#include <array>
+
+#include "mmo.hpp"
+#include "strings.hpp"
+
/// The digest state - becomes the output
-typedef struct
+struct MD5_state
{
// classically named {A,B,C,D}
// but use an so we can index
uint32_t val[4];
-} MD5_state;
-typedef struct
+};
+struct MD5_block
{
uint32_t data[16];
-} MD5_block;
+};
+
+struct md5_binary : std::array<uint8_t, 0x10> {};
+struct md5_string : VString<0x20> {};
+struct SaltString : VString<5> {};
// Implementation
-void MD5_init(MD5_state* state);
-void MD5_do_block(MD5_state* state, MD5_block block);
+void MD5_init(MD5_state *state);
+void MD5_do_block(MD5_state *state, MD5_block block);
// Output formatting
-void MD5_to_bin(MD5_state state, uint8_t out[0x10]);
-void MD5_to_str(MD5_state state, char out[0x21]);
+void MD5_to_bin(MD5_state state, md5_binary& out);
+void MD5_to_str(MD5_state state, md5_string& out);
// Convenience
-MD5_state MD5_from_string(const char* msg, const size_t msglen);
-MD5_state MD5_from_cstring(const char* msg);
+MD5_state MD5_from_string(XString msg);
MD5_state MD5_from_FILE(FILE* in);
-// statically-allocated output
// whoever wrote this fails basic understanding of
-const char *MD5_saltcrypt(const char *key, const char *salt);
+AccountCrypt MD5_saltcrypt(AccountPass key, SaltString salt);
/// return some random characters (statically allocated)
// Currently, returns a 5-char string
-const char *make_salt(void);
+SaltString make_salt(void);
/// check plaintext password against saved saltcrypt
-bool pass_ok(const char *password, const char *crypted);
+bool pass_ok(AccountPass password, AccountCrypt crypted);
/// This returns an in_addr because it is configurable whether it gets called at all
-struct in_addr MD5_ip(char *secret, struct in_addr ip);
+struct in_addr MD5_ip(struct in_addr ip);
#endif // MD5CALC_HPP