Android Open Source - asecrypto-goes-mobile-app Slow Exponentiation Fragment






From Project

Back to project page asecrypto-goes-mobile-app.

License

The source code is released under:

GNU General Public License

If you think the Android project asecrypto-goes-mobile-app listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation;
//from   w w  w. j ava2s  .co m
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Random;

import at.fhj.gaar.asecrypto.mobile.R;
import at.fhj.gaar.asecrypto.mobile.crypto.AseInteger;
import at.fhj.gaar.asecrypto.mobile.ui.TaskFinishedCallable;
import at.fhj.gaar.asecrypto.mobile.ui.apptasks.BaseFragment;
import at.fhj.gaar.asecrypto.mobile.util.NumberHelper;

/**
 * Implements a slow exponentation (Lab2_Task1).
 */
public class SlowExponentiationFragment extends BaseFragment
        implements View.OnClickListener, TaskFinishedCallable<ExponentiationResult> {

    protected EditText txtBitsOfNumber;

    protected EditText txtBasisNumber;

    protected EditText txtExponentNumber;

    protected EditText txtModulusNumber;

    private Button btnCalculate;

    private Button btnCancel;

    private ProgressBar progressBar;

    private TextView lblResultNumber;

    private TextView lblTimeMeasurement;

    protected AsyncTask<AseInteger, Void, ExponentiationResult> exponentiationTask;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View viewRoot = inflater.inflate(R.layout.fragment_exponentiation, container, false);

        txtBitsOfNumber = (EditText) viewRoot.findViewById(R.id.txtBitsOfNumber);
        txtBasisNumber = (EditText) viewRoot.findViewById(R.id.txtBasisNumber);
        txtExponentNumber = (EditText) viewRoot.findViewById(R.id.txtExponentNumber);
        txtModulusNumber = (EditText) viewRoot.findViewById(R.id.txtModulusNumber);
        btnCalculate = (Button) viewRoot.findViewById(R.id.btnCalculate);
        btnCancel = (Button) viewRoot.findViewById(R.id.btnCancel);
        progressBar = (ProgressBar) viewRoot.findViewById(R.id.progressBar);
        lblResultNumber = (TextView) viewRoot.findViewById(R.id.lblResultNumber);
        lblTimeMeasurement = (TextView) viewRoot.findViewById(R.id.lblTimeMeasurement);

        btnCalculate.setOnClickListener(this);
        btnCancel.setOnClickListener(this);

        return viewRoot;
    }

    @Override
    public void onPause() {
        super.onPause();
        cancelTask();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        cancelTask();
    }

    private void cancelTask() {
        if (exponentiationTask != null && !exponentiationTask.isCancelled()) {
            exponentiationTask.cancel(true);
        }
    }

    @Override
    public void onClick(View view) {
        if (btnCalculate.equals(view)) {
            startExponentiation();
        } else if (btnCancel.equals(view)) {
            resetUIState();
            cancelTask();
        }
    }

    private void resetUIState() {
        btnCalculate.setEnabled(true);
        btnCancel.setVisibility(View.INVISIBLE);
        progressBar.setVisibility(View.INVISIBLE);
    }

    protected void startExponentiation() {
        String basisNumberAsText = txtBasisNumber.getText().toString();
        String exponentNumberAsText = txtExponentNumber.getText().toString();
        String modulusNumberAsText = txtModulusNumber.getText().toString();

        AseInteger basisNumber;
        AseInteger exponentNumber;
        AseInteger modulusNumber;

        if (NumberHelper.isValidBitNumberInTextView(txtBitsOfNumber)) {
            int bits = Integer.valueOf(txtBitsOfNumber.getText().toString());

            basisNumber = new AseInteger(bits, new Random());
            basisNumber = basisNumber.setBit(bits - 1); // assure it is a high number

            // exponent is 2^n-1
            exponentNumber = new AseInteger("2");
            exponentNumber = exponentNumber.pow(bits).subtract(AseInteger.ONE);

            // generate a random modulus
            modulusNumber = new AseInteger(bits, new Random());
            modulusNumber = modulusNumber.setBit(bits - 1); // assure it is a high number

            // show the numbers on the UI
            txtBasisNumber.setText(basisNumber.toString());
            txtExponentNumber.setText(exponentNumber.toString());
            txtModulusNumber.setText(modulusNumber.toString());
        } else if (basisNumberAsText.length() > 0 && exponentNumberAsText.length() > 0
                && modulusNumberAsText.length() > 0) {
            basisNumber = new AseInteger(basisNumberAsText);
            exponentNumber = new AseInteger(exponentNumberAsText);
            modulusNumber = new AseInteger(modulusNumberAsText);
        } else {
            Toast.makeText(getActivity(),
                    "You have to input either a bit number or your desired numbers!",
                    Toast.LENGTH_LONG).show();
            return;
        }

        exponentiationTask = new SlowExponentiationTask(this);
        exponentiationTask.execute(basisNumber, exponentNumber, modulusNumber);

        closeSoftKeyboard();
        putUIInWorkingState();
    }

    protected void putUIInWorkingState() {
        progressBar.setVisibility(View.VISIBLE);

        lblResultNumber.setVisibility(View.INVISIBLE);
        lblTimeMeasurement.setVisibility(View.INVISIBLE);

        btnCalculate.setEnabled(false);
        btnCancel.setVisibility(View.VISIBLE);
    }

    @Override
    public void onAsyncTaskFinished(AsyncTask task, ExponentiationResult result) {
        Toast.makeText(getActivity(), "Exponentiation has been finished",
                Toast.LENGTH_SHORT).show();

        progressBar.setVisibility(View.INVISIBLE);

        lblTimeMeasurement.setVisibility(View.VISIBLE);
        lblResultNumber.setVisibility(View.VISIBLE);

        btnCalculate.setEnabled(true);
        btnCancel.setVisibility(View.INVISIBLE);

        lblResultNumber.setText("Result: " + result.getExponentiationResult()); // TODO use StringBuilder
        lblTimeMeasurement.setText("Time taken: " + result.getWatchTime() + " milliseconds"); // TODO use StringBuilder
    }
}




Java Source Code List

at.fhj.gaar.asecrypto.mobile.crypto.AseInteger.java
at.fhj.gaar.asecrypto.mobile.crypto.RSAHelper.java
at.fhj.gaar.asecrypto.mobile.ui.FragmentFactory.java
at.fhj.gaar.asecrypto.mobile.ui.MainActivity.java
at.fhj.gaar.asecrypto.mobile.ui.SectionAttachable.java
at.fhj.gaar.asecrypto.mobile.ui.TaskFinishedCallable.java
at.fhj.gaar.asecrypto.mobile.ui.TaskIntermediateCallable.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.BaseFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.bezout.BezoutFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.bezout.BezoutIterativeTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.bezout.BezoutRecursiveTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.bezout.BezoutResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.carmichael.CarmichaelFinderTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.carmichael.CarmichaelGeneratorFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.carmichael.CarmichaelResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidFactorialTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidIterativeTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidRecursiveTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.euclid.EuclidResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.ExponentiationResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.FastExponentiationFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.FastExponentiationTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.SlowExponentiationFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.exponentiation.SlowExponentiationTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatProgress.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatTaskArguments.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.fermat.FermatTestFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinArguments.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinProgress.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.millerrabin.MillerRabinTestFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.numbercounter.NumberCounterFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.numbercounter.NumberCounterTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.primitiveroots.FinderArguments.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.primitiveroots.PrimitiveRootFinderFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.primitiveroots.PrimitiveRootLookupTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.primitiveroots.PrimitiveRootResult.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.ParameterCalculationHelperTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSACalculationFragment.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSADecryptionParameters.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSADecryptionTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSAEncryptionParameters.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSAEncryptionTask.java
at.fhj.gaar.asecrypto.mobile.ui.apptasks.rsa.RSAResult.java
at.fhj.gaar.asecrypto.mobile.ui.navigation.DrawerItemIdentifiers.java
at.fhj.gaar.asecrypto.mobile.ui.navigation.DrawerItem.java
at.fhj.gaar.asecrypto.mobile.ui.navigation.NavigationDrawerCallable.java
at.fhj.gaar.asecrypto.mobile.ui.navigation.NavigationDrawerFragment.java
at.fhj.gaar.asecrypto.mobile.util.NumberChoiceSelector.java
at.fhj.gaar.asecrypto.mobile.util.NumberHelper.java
at.fhj.gaar.asecrypto.mobile.util.StopWatch.java