X-Git-Url: https://harishankar.org/repos/?p=wordblah.git;a=blobdiff_plain;f=wordblox.h;fp=wordblox.h;h=a355a09acf16e178ae3e46c02dce9c08f28fff98;hp=1925573ab7e069fe1ca54f0ae5c656dee331d15b;hb=8f3a3d44db5d297336dc1138193514c6d79d080e;hpb=d2f6f0eb05c333a2b0991bb7613780aab629460f diff --git a/wordblox.h b/wordblox.h index 1925573..a355a09 100644 --- a/wordblox.h +++ b/wordblox.h @@ -57,8 +57,8 @@ typedef struct { String clue_down[MAX_PUZZLE_SIZE][MAX_PUZZLE_SIZE]; int grid_size; bool grid_frozen; - char hashed_password[256]; - char salt[256]; + char hashed_master_password[256]; + char hashed_solution_password[256]; } Puzzle; /* The player data struct type - for the player app */ @@ -129,36 +129,75 @@ int get_num () return n; } -/* verify password */ -bool verify_password (Puzzle *p, const char* password) +/* verify solution password */ +bool verify_solution_password (Puzzle *p, const char* password) { /* no password set */ - if (strcmp (p->hashed_password, "\0") == 0) + if (strcmp (p->hashed_solution_password, "\0") == 0) return true; /* hash the user input password and compare it with the stored password */ - unsigned char* hashed_password; + unsigned char* hashed_sol_password; unsigned int len; digest_message ((const unsigned char *)password, strlen(password), - &hashed_password, &len); + &hashed_sol_password, &len); char hashed_hex_pwd[256] = { (char) NULL }; - to_hexadecimal (hashed_hex_pwd, hashed_password, len); + to_hexadecimal (hashed_hex_pwd, hashed_sol_password, len); - if (strcmp (p->hashed_password, hashed_hex_pwd) == 0) + if (strcmp (p->hashed_solution_password, hashed_hex_pwd) == 0) return true; return false; } -/* Set or reset password for puzzle */ -void set_puzzle_password (Puzzle *p, const char *password) + +/* verify master password */ +bool verify_master_password (Puzzle *p, const char* password) +{ + /* no password set */ + if (strcmp (p->hashed_master_password, "\0") == 0) + return true; + + /* hash the user input password and compare it with the stored password */ + unsigned char* hashed_mas_password; + unsigned int len; + digest_message ((const unsigned char *)password, strlen(password), + &hashed_mas_password, &len); + char hashed_hex_pwd[256] = { (char) NULL }; + to_hexadecimal (hashed_hex_pwd, hashed_mas_password, len); + + if (strcmp (p->hashed_master_password, hashed_hex_pwd) == 0) + return true; + + return false; +} + +/* Set or reset solution password for puzzle */ +void set_solution_password (Puzzle *p, const char *password) { /* if it is a null string, reset the password */ if (strcmp (password, "\0") == 0) + strcpy (p->hashed_solution_password, "\0"); + else { - strcpy (p->hashed_password, "\0"); - strcpy (p->salt, "\0"); + + unsigned char* hashedpwd; + unsigned int len; + digest_message ((const unsigned char *)password, strlen(password), + &hashedpwd, &len); + /* the hashedpwd contains binary data - we will convert it to + hexadecimal data and store in file */ + + to_hexadecimal (p->hashed_solution_password, hashedpwd, len); } +} + +/* Set or reset master password for puzzle */ +void set_master_password (Puzzle *p, const char *password) +{ + /* if it is a null string, reset the password */ + if (strcmp (password, "\0") == 0) + strcpy (p->hashed_master_password, "\0"); else { @@ -169,11 +208,7 @@ void set_puzzle_password (Puzzle *p, const char *password) /* the hashedpwd contains binary data - we will convert it to hexadecimal data and store in file */ - to_hexadecimal (p->hashed_password, hashedpwd, len); - printf ("%s\n", p->hashed_password); - - strcpy (p->salt, "\0"); - + to_hexadecimal (p->hashed_master_password, hashedpwd, len); } } @@ -465,8 +500,8 @@ void init_puzzle (Puzzle *p, int grid_size) strcpy (p->clue_down[i][j], ""); } } - strcpy (p->hashed_password, "\0"); - strcpy (p->salt, "\0"); + strcpy (p->hashed_master_password, "\0"); + strcpy (p->hashed_solution_password, "\0"); } @@ -485,9 +520,9 @@ void save_puzzle (Puzzle *puzzle, const char* file) { /* whether grid is frozen or not */ fprintf (outfile, "%d\n", puzzle->grid_frozen); /* the hashed password */ - fprintf (outfile, "%s\n", puzzle->hashed_password); - /* the salt */ - fprintf (outfile, "%s\n", puzzle->salt); + fprintf (outfile, "%s\n", puzzle->hashed_master_password); + /* the hashed_solution_password */ + fprintf (outfile, "%s\n", puzzle->hashed_solution_password); /* First output the grid characters columns/rows */ for (int i = 0; i < puzzle->grid_size; i ++) @@ -616,14 +651,14 @@ Puzzle load_puzzle (const char* file) { p.grid_frozen = atoi (line) == 0 ? false : true ; fgets (line, MAX_CLUE_LENGTH + 10, infile); if (strlen (line) != 1) - strcpy (p.hashed_password, strtok (line, "\n")); + strcpy (p.hashed_master_password, strtok (line, "\n")); else - strcpy (p.hashed_password, "\0"); + strcpy (p.hashed_master_password, "\0"); fgets (line, MAX_CLUE_LENGTH + 10, infile); if (strlen (line) != 1) - strcpy (p.salt, strtok (line, "\n")); + strcpy (p.hashed_solution_password, strtok (line, "\n")); else - strcpy (p.salt, "\0"); + strcpy (p.hashed_solution_password, "\0"); /* read each character of the grid */ for (int i = 0; i < p.grid_size; i ++ )