From 365ec75087ebacbab4ed8e969542283079ffb4ae Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Sun, 13 Dec 2015 00:13:22 -0800 Subject: Detect key type --- public/js/wallet.js | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 3 deletions(-) (limited to 'public/js/wallet.js') diff --git a/public/js/wallet.js b/public/js/wallet.js index cadd6db3..9a2d1ff5 100644 --- a/public/js/wallet.js +++ b/public/js/wallet.js @@ -41,13 +41,73 @@ $(function() { getUser(); + $('#types').attr('data-content', "Bitcoin Address (starts with 1 or 3)
\nPrivate Key (starts with 5 or L)
\nHD Wallet pubkey (starts with xpub)
\nHD Wallet private key (starts with xprv)
\nAES Encrypted Private Key (starts with U)
\nBIP38 Encrypted Private Key (starts with 6)
\nBIP39 Mnemonic (series of 12-24 english words)").popover({ + html: true + }).on("show.bs.popover", function() { + return $(this).data("bs.popover").tip().css({ + minWidth: "400px" + }); + }); $('form').validator({ custom: validators, errors: errors }); - $('button[data-toggle=tooltip]').tooltip({ + $('[data-toggle=tooltip]').tooltip({ trigger: 'hover' }); + $('#pubkey').keyup(function() { + var key, val, _ref; + val = $(this).val(); + $('#type').val('unknown'); + switch (val[0]) { + case '1': + try { + bitcoin.address.fromBase58Check(val); + return $('#type').val('address'); + } catch (_error) {} + break; + case '5': + case 'L': + case 'K': + try { + bitcoin.ECPair.fromWIF(val); + return $('#type').val('private_key'); + } catch (_error) {} + break; + case 'U': + try { + CryptoJS.AES.decrypt(val, $('#new_password').val()); + return $('#type').val('aes'); + } catch (_error) {} + break; + case '6': + try { + key = bip38().decrypt(val, $('#new_password').val()); + bitcoin.ECPair.fromWIF(key); + return $('#type').val('bip38'); + } catch (_error) {} + break; + case 'x': + if ($(this).val()[3] === 'b') { + try { + bitcoin.HDNode.fromBase58(val); + return $('#type').val('xpub'); + } catch (_error) {} + } else { + try { + bitcoin.HDNode.fromBase58(val); + return $('#type').val('xprv'); + } catch (_error) {} + } + break; + default: + if ((_ref = val.split(' ').length) === 12 || _ref === 15 || _ref === 18 || _ref === 21 || _ref === 24) { + if (bip39.validateMnemonic(val)) { + return $('#type').val('bip39'); + } + } + } + }); $('#keys form input[type=button]').click(function() { $('.form-control').blur(); if ($('#keys .has-error').length > 0) { @@ -148,7 +208,7 @@ mnemonic = bip39.generateMnemonic(); key = bitcoin.HDNode.fromSeedBuffer(bip39.mnemonicToSeed(mnemonic)).deriveHardened(44).deriveHardened(0); g.privkey = key.toString(); - $('#pubkey').val(key.neutered().toString()).effect('highlight', {}, 2000); + $('#pubkey').val(key.neutered().toString()).effect('highlight', {}, 2000).keyup(); $('#privkey').val(''); $('#new_password').parent().show(); return $('#new_password').effect('shake', 500).focus(); @@ -161,7 +221,7 @@ getUser = function() { return $.getJSON("/" + ($('#username').val()) + ".json", function(user) { g.user = user; - $('#pubkey').val(user.pubkey); + $('#pubkey').val(user.pubkey).keyup(); $('#privkey').val(user.privkey); $('#address').val(user.address); $('#unit').html(user.unit); -- cgit v1.2.3