package de.pinyto.ctSESAM; import android.os.AsyncTask; import android.widget.AutoCompleteTextView; import android.widget.EditText; import java.lang.ref.WeakReference; import java.nio.ByteBuffer; import java.nio.ByteOrder; /** * Create kgk and password at once. */ class CreateKgkAndPasswordTask extends AsyncTask<byte[], Void, byte[]> { int iterations; private KgkManager kgkManager; private PasswordSettingsManager settingsManager; private WeakReference<MainActivity> mainActivityWeakRef; CreateKgkAndPasswordTask(MainActivity mainActivity, int iterations, KgkManager kgkManager, PasswordSettingsManager settingsManager) { super(); this.mainActivityWeakRef = new WeakReference<>(mainActivity); this.iterations = iterations; this.kgkManager = kgkManager; this.settingsManager = settingsManager; } @Override protected byte[] doInBackground(byte[]... params) { byte[] password = params[0]; byte[] salt = Crypter.createSalt(); byte[] ivKey = Crypter.createIvKey(password, salt); for (int i = 0; i < password.length; i++) { password[i] = 0x00; } return ivKey; } @Override protected void onPostExecute(byte[] ivKey) { kgkManager.createAndStoreNewKgkBlock(new Crypter(ivKey)); MainActivity activity = mainActivityWeakRef.get(); if (activity != null && !activity.isFinishing()) { AutoCompleteTextView autoCompleteTextViewDomain = (AutoCompleteTextView) activity.findViewById(R.id.autoCompleteTextViewDomain); String domainStr = autoCompleteTextViewDomain.getText().toString(); byte[] domain = UTF8.encode(autoCompleteTextViewDomain.getText()); PasswordSetting setting = settingsManager.getSetting(domainStr); EditText editTextUsername = (EditText) activity.findViewById(R.id.editTextUsername); byte[] username = UTF8.encode(editTextUsername.getText()); GeneratePasswordTask generatePasswordTask = new GeneratePasswordTask(activity); generatePasswordTask.execute( domain, username, kgkManager.getKgk(), setting.getSalt(), ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN).putInt(iterations).array()); } } }