/*
This file is part of jpcsp.
Jpcsp is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Jpcsp is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Jpcsp. If not, see <http://www.gnu.org/licenses/>.
*/
package jpcsp.crypto;
import jpcsp.settings.AbstractBoolSettingsListener;
import jpcsp.settings.Settings;
public class CryptoEngine {
private static final String name = "CryptEngine";
private static boolean isCryptoEngineInit;
private static boolean cryptoSavedata;
private static boolean extractEboot;
private static boolean extractSavedataKey;
private static KIRK kirk;
private static PRX prx;
private static SAVEDATA sd;
private static AMCTRL amctrl;
private static PGD pgd;
private static DRM drm;
private static CryptSavedataSettingsListerner cryptSavedataSettingsListerner;
private static ExtractEbootSettingsListerner extractEbootSettingsListerner;
private static ExtractSavedataKeySettingsListerner extractSavedataKeySettingsListerner;
private static class CryptSavedataSettingsListerner extends AbstractBoolSettingsListener {
@Override
protected void settingsValueChanged(boolean value) {
setSavedataCryptoStatus(!value);
}
}
private static class ExtractEbootSettingsListerner extends AbstractBoolSettingsListener {
@Override
protected void settingsValueChanged(boolean value) {
setExtractEbootStatus(value);
}
}
private static class ExtractSavedataKeySettingsListerner extends AbstractBoolSettingsListener {
@Override
protected void settingsValueChanged(boolean value) {
setExtractSavedataKeyStatus(value);
}
}
public CryptoEngine() {
installSettingsListeners();
setCryptoEngineStatus(true);
kirk = new KIRK();
prx = new PRX();
sd = new SAVEDATA();
amctrl = new AMCTRL();
pgd = new PGD();
drm = new DRM();
}
public KIRK getKIRKEngine() {
return kirk;
}
public PRX getPRXEngine() {
return prx;
}
public SAVEDATA getSAVEDATAEngine() {
return sd;
}
public AMCTRL getAMCTRLEngine() {
return amctrl;
}
public PGD getPGDEngine() {
return pgd;
}
public DRM getDRMEngine() {
return drm;
}
private static void installSettingsListeners() {
if (cryptSavedataSettingsListerner == null) {
cryptSavedataSettingsListerner = new CryptSavedataSettingsListerner();
Settings.getInstance().registerSettingsListener(name, "emu.cryptoSavedata", cryptSavedataSettingsListerner);
}
if (extractEbootSettingsListerner == null) {
extractEbootSettingsListerner = new ExtractEbootSettingsListerner();
Settings.getInstance().registerSettingsListener(name, "emu.extractEboot", extractEbootSettingsListerner);
}
if (extractSavedataKeySettingsListerner == null) {
extractSavedataKeySettingsListerner = new ExtractSavedataKeySettingsListerner();
Settings.getInstance().registerSettingsListener(name, "emu.extractSavedataKey", extractSavedataKeySettingsListerner);
}
}
/*
* Helper functions: used for status checking and parameter sorting.
*/
public static boolean getCryptoEngineStatus() {
return isCryptoEngineInit;
}
private static void setCryptoEngineStatus(boolean status) {
isCryptoEngineInit = status;
}
public static boolean getExtractEbootStatus() {
installSettingsListeners();
return extractEboot;
}
private static void setExtractEbootStatus(boolean status) {
extractEboot = status;
}
public static boolean getExtractSavedataKeyStatus() {
installSettingsListeners();
return extractSavedataKey;
}
private static void setExtractSavedataKeyStatus(boolean status) {
extractSavedataKey = status;
}
public static boolean getSavedataCryptoStatus() {
installSettingsListeners();
return cryptoSavedata;
}
private static void setSavedataCryptoStatus(boolean status) {
cryptoSavedata = status;
}
}