package de.pinyto.ctSESAM; import android.os.AsyncTask; import java.lang.ref.WeakReference; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays; /** * Calculate a password and display it. */ class GeneratePasswordTask extends AsyncTask<byte[], Void, PasswordGenerator> { private WeakReference<MainActivity> mainActivityWeakRef; GeneratePasswordTask(MainActivity mainActivity) { super(); this.mainActivityWeakRef = new WeakReference<>(mainActivity); } @Override protected PasswordGenerator doInBackground(byte[]... params) { byte[] domain = params[0]; byte[] username = params[1]; byte[] kgk = params[2]; byte[] salt = params[3]; int iterations = ByteBuffer.wrap( Arrays.copyOfRange(params[4], 0, 4)).order(ByteOrder.BIG_ENDIAN).getInt(); try { return new PasswordGenerator( domain, username, kgk, salt, iterations); } catch (NotHashedException e) { e.printStackTrace(); return null; } } @Override protected void onPostExecute(PasswordGenerator generator) { MainActivity activity = mainActivityWeakRef.get(); if (activity != null && !activity.isFinishing()) { activity.setPasswordGenerator(generator); activity.generatePassword(); } } }