Separate solution password implemented
[wordblah.git] / wordblox.h
index 1925573..a355a09 100644 (file)
@@ -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 ++ )