diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f77bd2..1d935c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,8 @@ add_executable(park headers/Park_spot.h Park_time.cpp headers/Park_time.h + encrypt.cpp + headers/encrypt.h ) @@ -30,6 +32,7 @@ if (UNIX) sqlite3 pthread dl + libsodium ) elseif (MSYS OR MINGW) target_link_libraries(park @@ -37,6 +40,7 @@ elseif (MSYS OR MINGW) sqlite3 pthread ssp + libsodium ) endif() diff --git a/data.cpp b/data.cpp index 7176131..a7286b8 100644 --- a/data.cpp +++ b/data.cpp @@ -6,7 +6,9 @@ SQLite::Database start_db() { SQLite::Database db("test.db3", SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE); - + while (sodium_init()< 0){ + std::cout << "SODIUM NOT WORKING"; + } db.exec( "create table if not exists Customer (id integer primary key, name " "text, card_code varchar(20), verhicle int)"); diff --git a/encrypt.cpp b/encrypt.cpp new file mode 100644 index 0000000..85f793e --- /dev/null +++ b/encrypt.cpp @@ -0,0 +1,35 @@ +#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 I want to call the function. Low level stuff in the + function, the least possible low level stuff outside. + */ + const char* password_ = password.c_str(); + char hashed_password_[crypto_pwhash_STRBYTES]; + int memory_limit = 1.28e+8; // 1.28 e+8 = 128 e6 = 128 mb + int cpu_limit = 2; // this is n_threads + + 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) { + 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; + } +} diff --git a/headers/data.h b/headers/data.h index 2684f60..08c6bd5 100644 --- a/headers/data.h +++ b/headers/data.h @@ -2,6 +2,8 @@ #define DATA_H #pragma once #include "../thirdparty/SQLiteCpp/include/SQLiteCpp/SQLiteCpp.h" +#include "encrypt.h" + namespace data { SQLite::Database start_db(); diff --git a/headers/encrypt.h b/headers/encrypt.h new file mode 100644 index 0000000..40169b0 --- /dev/null +++ b/headers/encrypt.h @@ -0,0 +1,15 @@ +#ifndef ENCRYPT_H +#define ENCRYPT_H +#pragma once + +#include +#include +#include +#include + +using std::string; + +string hash_password(string password); +bool verify_password(string hashed_password, string unhashed_password); + +#endif \ No newline at end of file diff --git a/main.cpp b/main.cpp index 0c03f7f..8ca82c6 100644 --- a/main.cpp +++ b/main.cpp @@ -2,6 +2,7 @@ #include + /* Code strucure like this: class declarations zijn in /headers/class_naam.h, en definitions van de member @@ -17,8 +18,7 @@ record die zegt dat een customer voor x tijd geparkeert heeft bij spot x, enz. De client clockt in en uit bij een spot. */ -void -Wait(int sec) +void Wait(int sec) /* a wait function where 1 sec represents 1 hour irl. */ @@ -26,14 +26,22 @@ a wait function where 1 sec represents 1 hour irl. std::this_thread::sleep_for(seconds{sec}); } -int -main() { +int main() { class Customer sagar { "Sagar Ramsaransing", Verhicle_type::bike }; sagar.update_db(); Park_spot p1; p1.clock(&sagar); - Wait(2); + // Wait(2); // p1.clock(&sagar); + string a = hash_password("test"); + string b = hash_password("test"); + string c = hash_password("test"); + string d = hash_password("tast"); + cout << a << "\n" << b << "\n" << c << "\n"; + cout << verify_password(a, "test") << "," + << verify_password(b, "test") << ", " + << verify_password(c, "test") << ", " + << verify_password(d, "test"); } diff --git a/test.db3 b/test.db3 index 794b7ed..d1b5a9b 100644 Binary files a/test.db3 and b/test.db3 differ