package com.rackspacecloud.android;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import android.content.SharedPreferences;
public class PasswordManager {
private SharedPreferences settings;
public PasswordManager(SharedPreferences sp){
settings = sp;
}
/*
* checks the parameter string against the stored
* password
*/
public boolean verifyEnteredPassword(String password) {
return Arrays.toString(getHash(password)).equals(getStoredPassword());
}
/*
* return the hash of the password that is stored in
* shared preferences
*/
private String getStoredPassword(){
return settings.getString(Preferences.PREF_KEY_PASSCODE_HASH, "");
}
/*
* turns off password requirement
*/
public void turnOffPassword() {
SharedPreferences.Editor editor = settings.edit();
editor.putString(Preferences.PREF_KEY_PASSCODE_HASH, "");
editor.putBoolean(Preferences.PREF_KEY_PASSWORD_LOCK, false);
editor.commit();
}
/*
* submits a password change into memory
* stores the sha-256 hash of the password
*/
private void storeNewPassword(String hashedPassword) {
SharedPreferences.Editor editor = settings.edit();
editor.putString(Preferences.PREF_KEY_PASSCODE_HASH, hashedPassword);
editor.putBoolean(Preferences.PREF_KEY_PASSWORD_LOCK, true);
editor.commit();
}
/*
* changes the password for
*/
public void changePassword(String password) {
storeNewPassword(Arrays.toString(getHash(password)));
}
/*
* returns the sha-256 hash for a given
* string
*/
private byte[] getHash(String password) {
MessageDigest m = null;
try {
m = MessageDigest.getInstance("SHA-256");
m.update(password.getBytes());
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return m.digest();
}
/*
* returns true if their is a password requirement
*/
public boolean hasPassword() {
return settings.getBoolean(Preferences.PREF_KEY_PASSWORD_LOCK, false);
}
}