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 */
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
{
/* 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);
}
}
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");
}
/* 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 ++)
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 ++ )