Preferences updated. Works as expected.

This commit is contained in:
Dmitry Isaenko 2019-05-23 00:35:57 +03:00
parent a6b46660d8
commit e2f7f93988
4 changed files with 114 additions and 59 deletions

View file

@ -7,10 +7,21 @@ public class AppPreferences {
public static AppPreferences getInstance() { return INSTANCE; }
private Preferences preferences;
private int titleKeysCount;
private int
kakAppCount,
kakOceanCount,
kakSysCount,
titleKeksCount,
titleKeysCount;
private AppPreferences(){
preferences = Preferences.userRoot().node("konogonka");
kakAppCount = getKAKAppCount();
kakOceanCount = getKAKOceanCount();
kakSysCount = getKAKSysCount();
titleKeksCount = getTitleKeksCount();
titleKeysCount = getTitleKeysCount();
}
@ -41,23 +52,65 @@ public class AppPreferences {
public String getHeaderKey(){ return preferences.get("header_key", "");}
public void setHeaderKey(String key){ preferences.put("header_key", key); }
public String getApplicationKey(int number){ return preferences.get("key_area_key_application_0"+number, "");}
public void setApplicationKey(int number, String key){ preferences.put("key_area_key_application_0"+number, key); }
public String getOceanKey(int number){ return preferences.get("key_area_key_ocean_0"+number, "");}
public void setOceanKey(int number, String key){ preferences.put("key_area_key_ocean_0"+number, key); }
public String getSystemKey(int number){ return preferences.get("key_area_key_system_0"+number, "");}
public void setSystemKey(int number, String key){ preferences.put("key_area_key_system_0"+number, key); }
public String getTitleKek(int number){ return preferences.get("titlekek_"+number, "");}
public void setTitleKek(int number, String key){ preferences.put("titlekek_"+number, key); }
public int getTitleKeysCount(){ // TODO: do the same for other multi-keys and single
return preferences.getInt("title_keys_count", 0);
// KAKs: Application/Ocean/System
public void setKAKAppCount(int number){
if (this.kakAppCount > number){
for (int i = number; i < this.kakAppCount; i++) {
preferences.remove(String.format("key_area_key_application_%02d", number));
}
}
preferences.putInt("key_area_key_application_count", number);
this.kakAppCount = number;
}
public void setKAKOceanCount(int number){
if (this.kakOceanCount > number){
for (int i = number; i < this.kakOceanCount; i++) {
preferences.remove(String.format("key_area_key_ocean_%02d", number));
}
}
preferences.putInt("key_area_key_ocean_count", number);
this.kakOceanCount = number;
}
public void setKAKSysCount(int number){
if (this.kakSysCount > number){
for (int i = number; i < this.kakSysCount; i++) {
preferences.remove(String.format("key_area_key_system_%02d", number));
}
}
preferences.putInt("key_area_key_system_count", number);
this.kakSysCount = number;
}
public void setTitleKeksCount(int number){
if (this.titleKeksCount > number){
for (int i = number; i < this.titleKeksCount; i++) {
preferences.remove(String.format("titlekek_%02d", number));
}
}
preferences.putInt("titlekek_count", number);
this.titleKeksCount = number;
}
public int getKAKAppCount(){ return preferences.getInt("key_area_key_application_count", 0); }
public int getKAKOceanCount(){ return preferences.getInt("key_area_key_ocean_count", 0); }
public int getKAKSysCount(){ return preferences.getInt("key_area_key_system_count", 0); }
public int getTitleKeksCount(){ return preferences.getInt("titlekek_count", 0); }
public String getApplicationKey(int number){ return preferences.get(String.format("key_area_key_application_%02d", number), "");}
public void setApplicationKey(int number, String key){ preferences.put(String.format("key_area_key_application_%02d", number), key); }
public String getOceanKey(int number){ return preferences.get(String.format("key_area_key_ocean_%02d", number), "");}
public void setOceanKey(int number, String key){ preferences.put(String.format("key_area_key_ocean_%02d", number), key); }
public String getSystemKey(int number){ return preferences.get(String.format("key_area_key_system_%02d", number), "");}
public void setSystemKey(int number, String key){ preferences.put(String.format("key_area_key_system_%02d", number), key); }
public String getTitleKek(int number){ return preferences.get(String.format("titlekek_%02d", number), "");}
public void setTitleKek(int number, String key){ preferences.put(String.format("titlekek_%02d", number), key); }
// Title keys
public int getTitleKeysCount(){ return preferences.getInt("title_keys_count", 0); }
// Since we don't want to store title keys that are no longer in use, we have to (try to) remove them.
// This part of code works as a charm. Don't touch.
public void setTitleKeysCount(int number){
@ -74,4 +127,4 @@ public class AppPreferences {
return preferences.get("title_key_"+number, "0 = 0").split(" = ", 2);
}
public void setTitleKey(int number, String pair){ preferences.put("title_key_"+number, pair); }
}
}

View file

@ -76,12 +76,15 @@ public class NCAController implements TabController {
this.selectedFile = file;
HashMap<String, String> keysMap = new HashMap<>();
keysMap.put("header_key", AppPreferences.getInstance().getHeaderKey());
for (int i = 0; i < 8; i++){ // TODO: FIX!!!!!!!!! URGENT!
keysMap.put("key_area_key_application_0"+i, AppPreferences.getInstance().getApplicationKey(i));
keysMap.put("key_area_key_ocean_0"+i, AppPreferences.getInstance().getOceanKey(i));
keysMap.put("key_area_key_system_0"+i, AppPreferences.getInstance().getSystemKey(i));
keysMap.put("titlekek_0"+i, AppPreferences.getInstance().getTitleKek(i));
}
for (int i = 0; i < AppPreferences.getInstance().getKAKAppCount(); i++)
keysMap.put(String.format("key_area_key_application_%02d", i), AppPreferences.getInstance().getApplicationKey(i));
for (int i = 0; i < AppPreferences.getInstance().getKAKOceanCount(); i++)
keysMap.put(String.format("key_area_key_ocean_%02d", i), AppPreferences.getInstance().getOceanKey(i));
for (int i = 0; i < AppPreferences.getInstance().getKAKSysCount(); i++)
keysMap.put(String.format("key_area_key_system_%02d", i), AppPreferences.getInstance().getSystemKey(i));
for (int i = 0; i < AppPreferences.getInstance().getTitleKeksCount(); i++)
keysMap.put(String.format("titlekek_%02d", i), AppPreferences.getInstance().getTitleKek(i));
for (int i = 0; i < AppPreferences.getInstance().getTitleKeysCount(); i++){
String[] pair = AppPreferences.getInstance().getTitleKeyPair(i);
if ( ! pair[0].equals("0") && ! pair[1].equals("0"))

View file

@ -42,40 +42,31 @@ public class SettingsController implements Initializable {
ListSelectorTitleKeysController.initSelector(32, null); // 32 required
LinkedHashMap<String, String> preparedPairsMapInit = new LinkedHashMap<>();
String kaekApp;
int cnt = 0;
while (!(kaekApp = AppPreferences.getInstance().getApplicationKey(cnt)).isEmpty()){
preparedPairsMapInit.put("key_area_key_application_"+String.format("%02d", cnt), kaekApp);
cnt++;
for (int i = 0; i < AppPreferences.getInstance().getKAKAppCount(); i++){
preparedPairsMapInit.put(String.format("key_area_key_application_%02d", i), AppPreferences.getInstance().getApplicationKey(i));
}
ListSelectorKAEKAppController.setList(preparedPairsMapInit);
preparedPairsMapInit.clear();
cnt = 0;
while (!(kaekApp = AppPreferences.getInstance().getOceanKey(cnt)).isEmpty()){
preparedPairsMapInit.put("key_area_key_ocean_"+String.format("%02d", cnt), kaekApp);
cnt++;
for (int i = 0; i < AppPreferences.getInstance().getKAKOceanCount(); i++){
preparedPairsMapInit.put(String.format("key_area_key_ocean_%02d", i), AppPreferences.getInstance().getOceanKey(i));
}
ListSelectorKAEKOceanController.setList(preparedPairsMapInit);
preparedPairsMapInit.clear();
cnt = 0;
while (!(kaekApp = AppPreferences.getInstance().getTitleKek(cnt)).isEmpty()){
preparedPairsMapInit.put("titlekek_"+String.format("%02d", cnt), kaekApp);
cnt++;
}
ListSelectorTitleKeksController.setList(preparedPairsMapInit);
preparedPairsMapInit.clear();
cnt = 0;
while (!(kaekApp = AppPreferences.getInstance().getSystemKey(cnt)).isEmpty()){
preparedPairsMapInit.put("key_area_key_system_"+String.format("%02d", cnt), kaekApp);
cnt++;
for (int i = 0; i < AppPreferences.getInstance().getKAKSysCount(); i++){
preparedPairsMapInit.put(String.format("key_area_key_system_%02d", i), AppPreferences.getInstance().getSystemKey(i));
}
ListSelectorKAEKSysController.setList(preparedPairsMapInit);
preparedPairsMapInit.clear();
for (int i = 0; i < AppPreferences.getInstance().getTitleKeksCount(); i++){
preparedPairsMapInit.put(String.format("titlekek_%02d", i), AppPreferences.getInstance().getTitleKek(i));
}
ListSelectorTitleKeksController.setList(preparedPairsMapInit);
preparedPairsMapInit.clear();
for (int i = 0; i < AppPreferences.getInstance().getTitleKeysCount(); i++){
preparedPairsMapInit.put(
AppPreferences.getInstance().getTitleKeyPair(i)[0],
@ -118,32 +109,32 @@ public class SettingsController implements Initializable {
String keyParsed;
int counter = 0;
while ((keyParsed = fileMap.get("key_area_key_application_"+String.format("%02d", counter))) != null){
kaekSingle.put("key_area_key_application_"+String.format("%02d", counter), keyParsed);
while ((keyParsed = fileMap.get(String.format("key_area_key_application_%02d", counter))) != null){
kaekSingle.put(String.format("key_area_key_application_%02d", counter), keyParsed);
counter++;
}
ListSelectorKAEKAppController.setList(kaekSingle);
kaekSingle.clear();
counter = 0;
while ((keyParsed = fileMap.get("key_area_key_ocean_"+String.format("%02d", counter))) != null){
kaekSingle.put("key_area_key_ocean_"+String.format("%02d", counter), keyParsed);
while ((keyParsed = fileMap.get(String.format("key_area_key_ocean_%02d", counter))) != null){
kaekSingle.put(String.format("key_area_key_ocean_%02d", counter), keyParsed);
counter++;
}
ListSelectorKAEKOceanController.setList(kaekSingle);
kaekSingle.clear();
counter = 0;
while ((keyParsed = fileMap.get("key_area_key_system_"+String.format("%02d", counter))) != null){
kaekSingle.put("key_area_key_system_"+String.format("%02d", counter), keyParsed);
while ((keyParsed = fileMap.get(String.format("key_area_key_system_%02d", counter))) != null){
kaekSingle.put(String.format("key_area_key_system_%02d", counter), keyParsed);
counter++;
}
ListSelectorKAEKSysController.setList(kaekSingle);
kaekSingle.clear();
counter = 0;
while ((keyParsed = fileMap.get("titlekek_"+String.format("%02d", counter))) != null){
kaekSingle.put("titlekek_"+String.format("%02d", counter), keyParsed);
while ((keyParsed = fileMap.get(String.format("titlekek_%02d", counter))) != null){
kaekSingle.put(String.format("titlekek_%02d", counter), keyParsed);
counter++;
}
ListSelectorTitleKeksController.setList(kaekSingle);
@ -203,24 +194,32 @@ public class SettingsController implements Initializable {
for (int i = 0; i < kaekAppKeySet.length; i++)
AppPreferences.getInstance().setApplicationKey(i, kaekAppKeySet[i].split("\\s=\\s", 2)[1]);
}
if (kaekAppKeySet != null)
AppPreferences.getInstance().setKAKAppCount(kaekAppKeySet.length);
String[] kaekOceanKeySet = ListSelectorKAEKOceanController.getList();
if (kaekOceanKeySet != null){
for (int i = 0; i < kaekOceanKeySet.length; i++)
AppPreferences.getInstance().setOceanKey(i, kaekOceanKeySet[i].split("\\s=\\s", 2)[1]);
}
if (kaekOceanKeySet != null)
AppPreferences.getInstance().setKAKOceanCount(kaekOceanKeySet.length);
String[] kaekSysKeySet = ListSelectorKAEKSysController.getList();
if (kaekSysKeySet != null){
for (int i = 0; i < kaekSysKeySet.length; i++)
AppPreferences.getInstance().setSystemKey(i, kaekSysKeySet[i].split("\\s=\\s", 2)[1]);
}
if (kaekSysKeySet != null)
AppPreferences.getInstance().setKAKSysCount(kaekSysKeySet.length);
String[] titleKekSet = ListSelectorTitleKeksController.getList();
if (titleKekSet != null){
for (int i = 0; i < titleKekSet.length; i++)
AppPreferences.getInstance().setTitleKek(i, titleKekSet[i].split("\\s=\\s", 2)[1]);
}
if (titleKekSet != null)
AppPreferences.getInstance().setTitleKeksCount(titleKekSet.length);
String[] titleKeysSet = ListSelectorTitleKeysController.getList();
if (titleKeysSet != null){

View file

@ -171,13 +171,13 @@ public class NCAProvider {
String keyAreaKey;
switch (keyIndex){
case 0:
keyAreaKey = keys.get("key_area_key_application_"+String.format("%02d", cryptoTypeReal));
keyAreaKey = keys.get(String.format("key_area_key_application_%02d", cryptoTypeReal));
break;
case 1:
keyAreaKey = keys.get("key_area_key_ocean_"+String.format("%02d", cryptoTypeReal));
keyAreaKey = keys.get(String.format("key_area_key_ocean_%02d", cryptoTypeReal));
break;
case 2:
keyAreaKey = keys.get("key_area_key_system_"+String.format("%02d", cryptoTypeReal));
keyAreaKey = keys.get(String.format("key_area_key_system_%02d", cryptoTypeReal));
break;
default:
keyAreaKey = null;
@ -259,7 +259,7 @@ public class NCAProvider {
try {
SecretKeySpec skSpec = new SecretKeySpec(
hexStrToByteArray(keys.get("titlekek_"+String.format("%02d", cryptoTypeReal))
hexStrToByteArray(keys.get(String.format("titlekek_%02d", cryptoTypeReal))
), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, skSpec);