Statistics
| Branch: | Revision:

root / src / com / rackspacecloud / android / PasswordManager.java @ 006434d8

History | View | Annotate | Download (2.1 kB)

1 0ae79b26 Adam Menz
package com.rackspacecloud.android;
2 0ae79b26 Adam Menz
3 0ae79b26 Adam Menz
import java.security.MessageDigest;
4 0ae79b26 Adam Menz
import java.security.NoSuchAlgorithmException;
5 0ae79b26 Adam Menz
import java.util.Arrays;
6 0ae79b26 Adam Menz
7 0ae79b26 Adam Menz
import android.content.SharedPreferences;
8 0ae79b26 Adam Menz
9 0ae79b26 Adam Menz
public class PasswordManager {
10 0ae79b26 Adam Menz
        
11 0ae79b26 Adam Menz
        private SharedPreferences settings;
12 0ae79b26 Adam Menz
        
13 0ae79b26 Adam Menz
        public PasswordManager(SharedPreferences sp){
14 0ae79b26 Adam Menz
                settings = sp;
15 0ae79b26 Adam Menz
        }
16 0ae79b26 Adam Menz
        
17 0ae79b26 Adam Menz
        /*
18 0ae79b26 Adam Menz
         * checks the parameter string against the stored
19 0ae79b26 Adam Menz
         * password
20 0ae79b26 Adam Menz
         */
21 0ae79b26 Adam Menz
        public boolean verifyEnteredPassword(String password) {
22 0ae79b26 Adam Menz
                return Arrays.toString(getHash(password)).equals(getStoredPassword());
23 0ae79b26 Adam Menz
        }
24 0ae79b26 Adam Menz
        
25 0ae79b26 Adam Menz
        /*
26 0ae79b26 Adam Menz
         * return the hash of the password that is stored in
27 0ae79b26 Adam Menz
         * shared preferences
28 0ae79b26 Adam Menz
         */
29 0ae79b26 Adam Menz
        private String getStoredPassword(){
30 0ae79b26 Adam Menz
                return settings.getString(Preferences.PREF_KEY_PASSCODE_HASH, "");
31 0ae79b26 Adam Menz
        }
32 0ae79b26 Adam Menz
        
33 0ae79b26 Adam Menz
        /*
34 0ae79b26 Adam Menz
         * turns off password requirement 
35 0ae79b26 Adam Menz
         */
36 0ae79b26 Adam Menz
        public void turnOffPassword() {
37 0ae79b26 Adam Menz
                SharedPreferences.Editor editor = settings.edit();
38 0ae79b26 Adam Menz
                editor.putString(Preferences.PREF_KEY_PASSCODE_HASH, "");
39 0ae79b26 Adam Menz
                editor.putBoolean(Preferences.PREF_KEY_PASSWORD_LOCK, false);
40 0ae79b26 Adam Menz
                editor.commit();
41 0ae79b26 Adam Menz
        }
42 0ae79b26 Adam Menz
        
43 0ae79b26 Adam Menz
        /*
44 0ae79b26 Adam Menz
         * submits a password change into memory
45 0ae79b26 Adam Menz
         * stores the sha-256 hash of the password
46 0ae79b26 Adam Menz
         */
47 0ae79b26 Adam Menz
        private void storeNewPassword(String hashedPassword) {
48 0ae79b26 Adam Menz
                SharedPreferences.Editor editor = settings.edit();
49 0ae79b26 Adam Menz
                editor.putString(Preferences.PREF_KEY_PASSCODE_HASH, hashedPassword);
50 0ae79b26 Adam Menz
                editor.putBoolean(Preferences.PREF_KEY_PASSWORD_LOCK, true);
51 0ae79b26 Adam Menz
                editor.commit();
52 0ae79b26 Adam Menz
        }
53 0ae79b26 Adam Menz
        
54 0ae79b26 Adam Menz
        /*
55 0ae79b26 Adam Menz
         * changes the password for
56 0ae79b26 Adam Menz
         */
57 0ae79b26 Adam Menz
        public void changePassword(String password) {
58 0ae79b26 Adam Menz
                storeNewPassword(Arrays.toString(getHash(password)));
59 0ae79b26 Adam Menz
        }
60 0ae79b26 Adam Menz
        
61 0ae79b26 Adam Menz
        /*
62 0ae79b26 Adam Menz
         * returns the sha-256 hash for a given
63 0ae79b26 Adam Menz
         * string
64 0ae79b26 Adam Menz
         */
65 0ae79b26 Adam Menz
        private byte[] getHash(String password) {
66 0ae79b26 Adam Menz
                MessageDigest m = null;
67 0ae79b26 Adam Menz
                try {
68 0ae79b26 Adam Menz
                        m = MessageDigest.getInstance("SHA-256");
69 0ae79b26 Adam Menz
                        m.update(password.getBytes());
70 0ae79b26 Adam Menz
                } catch (NoSuchAlgorithmException e) {
71 0ae79b26 Adam Menz
                        // TODO Auto-generated catch block
72 0ae79b26 Adam Menz
                        e.printStackTrace();
73 0ae79b26 Adam Menz
                } catch (NullPointerException e) {
74 0ae79b26 Adam Menz
                        // TODO Auto-generated catch block
75 0ae79b26 Adam Menz
                        e.printStackTrace();
76 0ae79b26 Adam Menz
                }
77 0ae79b26 Adam Menz
                return m.digest();
78 0ae79b26 Adam Menz
        }
79 0ae79b26 Adam Menz
        
80 0ae79b26 Adam Menz
        /*
81 0ae79b26 Adam Menz
         * returns true if their is a password requirement
82 0ae79b26 Adam Menz
         */
83 0ae79b26 Adam Menz
        public boolean hasPassword() {
84 0ae79b26 Adam Menz
                return settings.getBoolean(Preferences.PREF_KEY_PASSWORD_LOCK, false);
85 0ae79b26 Adam Menz
        }
86 0ae79b26 Adam Menz
87 0ae79b26 Adam Menz
}