Search in sources :

Example 6 with BIP38PrivateKey

use of org.bitcoinj.crypto.BIP38PrivateKey in project samourai-wallet-android by Samourai-Wallet.

the class BalanceActivity method doPrivKey.

private void doPrivKey(final String data) {
    PrivKeyReader privKeyReader = null;
    String format = null;
    try {
        privKeyReader = new PrivKeyReader(new CharSequenceX(data), null);
        format = privKeyReader.getFormat();
    } catch (Exception e) {
        Toast.makeText(BalanceActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
        return;
    }
    if (format != null) {
        if (format.equals(PrivKeyReader.BIP38)) {
            final PrivKeyReader pvr = privKeyReader;
            final EditText password38 = new EditText(BalanceActivity.this);
            AlertDialog.Builder dlg = new AlertDialog.Builder(BalanceActivity.this).setTitle(R.string.app_name).setMessage(R.string.bip38_pw).setView(password38).setCancelable(false).setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int whichButton) {
                    String password = password38.getText().toString();
                    ProgressDialog progress = new ProgressDialog(BalanceActivity.this);
                    progress.setCancelable(false);
                    progress.setTitle(R.string.app_name);
                    progress.setMessage(getString(R.string.decrypting_bip38));
                    progress.show();
                    boolean keyDecoded = false;
                    try {
                        BIP38PrivateKey bip38 = new BIP38PrivateKey(SamouraiWallet.getInstance().getCurrentNetworkParams(), data);
                        final ECKey ecKey = bip38.decrypt(password);
                        if (ecKey != null && ecKey.hasPrivKey()) {
                            if (progress != null && progress.isShowing()) {
                                progress.cancel();
                            }
                            pvr.setPassword(new CharSequenceX(password));
                            keyDecoded = true;
                            Toast.makeText(BalanceActivity.this, pvr.getFormat(), Toast.LENGTH_SHORT).show();
                            Toast.makeText(BalanceActivity.this, pvr.getKey().toAddress(SamouraiWallet.getInstance().getCurrentNetworkParams()).toString(), Toast.LENGTH_SHORT).show();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        Toast.makeText(BalanceActivity.this, R.string.bip38_pw_error, Toast.LENGTH_SHORT).show();
                    }
                    if (progress != null && progress.isShowing()) {
                        progress.cancel();
                    }
                    if (keyDecoded) {
                        SweepUtil.getInstance(BalanceActivity.this).sweep(pvr, false);
                    }
                }
            }).setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int whichButton) {
                    Toast.makeText(BalanceActivity.this, R.string.bip38_pw_error, Toast.LENGTH_SHORT).show();
                }
            });
            if (!isFinishing()) {
                dlg.show();
            }
        } else if (privKeyReader != null) {
            SweepUtil.getInstance(BalanceActivity.this).sweep(privKeyReader, false);
        } else {
            ;
        }
    } else {
        Toast.makeText(BalanceActivity.this, R.string.cannot_recognize_privkey, Toast.LENGTH_SHORT).show();
    }
}
Also used : EditText(android.widget.EditText) AlertDialog(android.app.AlertDialog) CharSequenceX(com.samourai.wallet.util.CharSequenceX) DialogInterface(android.content.DialogInterface) BIP38PrivateKey(org.bitcoinj.crypto.BIP38PrivateKey) PrivKeyReader(com.samourai.wallet.util.PrivKeyReader) ScriptBuilder(org.bitcoinj.script.ScriptBuilder) ECKey(org.bitcoinj.core.ECKey) ProgressDialog(android.app.ProgressDialog) JSONException(org.json.JSONException) AddressFormatException(org.bitcoinj.core.AddressFormatException) DecryptionException(com.samourai.wallet.crypto.DecryptionException) IOException(java.io.IOException) DecoderException(org.bouncycastle.util.encoders.DecoderException) MnemonicException(org.bitcoinj.crypto.MnemonicException) MyTransactionOutPoint(com.samourai.wallet.send.MyTransactionOutPoint) OnClickListener(android.view.View.OnClickListener)

Example 7 with BIP38PrivateKey

use of org.bitcoinj.crypto.BIP38PrivateKey in project bitcoin-wallet by bitcoin-wallet.

the class DecodePrivateKeyTask method decodePrivateKey.

public final void decodePrivateKey(final BIP38PrivateKey encryptedKey, final String passphrase) {
    backgroundHandler.post(() -> {
        try {
            // takes time
            final ECKey decryptedKey = encryptedKey.decrypt(passphrase);
            callbackHandler.post(() -> onSuccess(decryptedKey));
        } catch (final BIP38PrivateKey.BadPassphraseException x) {
            callbackHandler.post(() -> onBadPassphrase());
        }
    });
}
Also used : BIP38PrivateKey(org.bitcoinj.crypto.BIP38PrivateKey) ECKey(org.bitcoinj.core.ECKey)

Aggregations

ECKey (org.bitcoinj.core.ECKey)7 BIP38PrivateKey (org.bitcoinj.crypto.BIP38PrivateKey)7 AlertDialog (android.app.AlertDialog)3 ProgressDialog (android.app.ProgressDialog)3 DialogInterface (android.content.DialogInterface)3 EditText (android.widget.EditText)3 IOException (java.io.IOException)3 MnemonicException (org.bitcoinj.crypto.MnemonicException)3 JSONException (org.json.JSONException)3 OnClickListener (android.view.View.OnClickListener)2 DecryptionException (com.samourai.wallet.crypto.DecryptionException)2 MyTransactionOutPoint (com.samourai.wallet.send.MyTransactionOutPoint)2 CharSequenceX (com.samourai.wallet.util.CharSequenceX)2 PrivKeyReader (com.samourai.wallet.util.PrivKeyReader)2 AddressFormatException (org.bitcoinj.core.AddressFormatException)2 PrivKeyReader (com.samourai.sentinel.sweep.PrivKeyReader)1 CharSequenceX (com.samourai.sentinel.util.CharSequenceX)1 ConcurrentModificationException (java.util.ConcurrentModificationException)1 DecoderException (org.apache.commons.codec.DecoderException)1 DumpedPrivateKey (org.bitcoinj.core.DumpedPrivateKey)1