package com.z299studio.pb;
import android.os.AsyncTask;
import android.util.Log;
import java.security.GeneralSecurityException;
class DecryptTask extends AsyncTask<String, Void, Boolean> {
interface OnTaskFinishListener {
void preExecute();
void onFinished(boolean isSuccessful, AccountManager manager, String pwd,
byte[] data, Application.FileHeader header, Crypto crypto);
}
private byte[] mData;
private Application.FileHeader mHeader;
private OnTaskFinishListener mListener;
private AccountManager mMgr;
private Crypto mCrypto;
private String mPassword;
DecryptTask(byte[] data, Application.FileHeader header, OnTaskFinishListener listener) {
super();
mData = data;
mHeader = header;
mListener = listener;
}
@Override
protected void onPreExecute() {
if(mListener!=null) {
mListener.preExecute();
}
}
@Override
protected Boolean doInBackground(String... params) {
try {
if(mData!=null) {
mCrypto = new Crypto();
int total = mHeader.keyLength + mHeader.ivLength;
mPassword = params[0];
mCrypto.setPassword(params[0], mData, mHeader.size, total);
total += mHeader.size;
byte[] textData = new byte[mData.length - total];
System.arraycopy(mData, total, textData, 0, textData.length);
byte[] text = mCrypto.decrypt(textData);
mMgr = new AccountManager(new String(text));
return Boolean.TRUE;
}
return Boolean.FALSE;
}
catch(GeneralSecurityException e) {
Log.e("Passbook", "GeneralSecurityException caught.");
return Boolean.FALSE;
}
}
@Override
protected void onPostExecute(Boolean result) {
if(mListener != null) {
mListener.onFinished(result, mMgr, mPassword, mData, mHeader, mCrypto);
}
}
}