diff options
Diffstat (limited to 'src/common/md5calc.hpp')
-rw-r--r-- | src/common/md5calc.hpp | 37 |
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 |