#include "headers/encrypt.h" string hash_password(string password) { /* Passing strings and converting to char* because I do not want to be forced to use char * whenever the function is called. Low level stuff in the function, the least possible low level stuff outside. This uses the password hashing algorithm Argon2 implemented by libsodium. DO NOT MODIFY memory_limit and cpu_limit after you add customers to the db. When you do that, the hashed passwords can't be decrypted, and that would be BAD. */ const char* password_ = password.c_str(); char hashed_password_[crypto_pwhash_STRBYTES]; int memory_limit = 3.2e+7; // 3.2e7 = 32e6 = 32 mb int cpu_limit = 1; // this somewhat resembles n_threads, but is not a 1 to 1 match. int result = crypto_pwhash_str(hashed_password_, password_, strlen(password_), cpu_limit, memory_limit); string hashed_password{hashed_password_}; return hashed_password; } bool verify_password(string hashed_password, string unhashed_password) { /* this verifies the password. It's encryption magic and don't question it. */ const char* password_ = unhashed_password.c_str(); const char* hashed_password_ = hashed_password.c_str(); if (crypto_pwhash_str_verify(hashed_password_, password_, strlen(password_)) != 0) { return false; } else { return true; } }