Skip to content

Commit

Permalink
Sign message / verify message
Browse files Browse the repository at this point in the history
  • Loading branch information
brainwallet committed Aug 12, 2012
1 parent 9062d3b commit 4711c54
Show file tree
Hide file tree
Showing 2 changed files with 190 additions and 12 deletions.
82 changes: 82 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@
<a data-toggle="tab" href="#transactions" id="tab-transactions">Transactions</a></li>
<li>
<a data-toggle="tab" href="#converter" id="tab-converter">Converter</a></li>
<li>
<a data-toggle="tab" href="#sign" id="tab-sign">Sign Message</a></li>
<li>
<a data-toggle="tab" href="#verify" id="tab-verify">Verify Message</a></li>
</ul>
</div>
</div>
Expand Down Expand Up @@ -294,6 +298,83 @@ <h3><span class="pull-right" id="qr_addr"></span></h3>
</fieldset>
</form>
</div>

<!-- Sign -->
<div class="tab-pane fade" id="sign">
<form action="/" class="form-horizontal" method="get" id="sgForm">
<fieldset> <legend>Sign Message</legend>
<div class="control-group">
<label class="control-label" for="sgSec">Private Key</label>
<div class="controls">
<input class="span5" id="sgSec" type="text">
<span class="help-inline errormsg"></span>
</div>
</div>
<div class="control-group">
<label class="control-label" for="sgAddr">Address</label>
<div class="controls">
<input class="span4" id="sgAddr" readonly type="text">
</div>
</div>
<div class="control-group">
<label class="control-label" for="sgMsg">Message</label>
<div class="controls">
<textarea class="span8" id="sgMsg" rows="10"></textarea>
</div>
</div>
<div class="control-group">
<label class="control-label" for="sgSig">Signature</label>
<div class="controls">
<input class="span8" id="sgSig" type="text" readonly>
</div>
</div>
<div class="control-group">
<label class="control-label" for="sgSign"></label>
<div class="controls">
<button class="btn" id="sgSign" type="button">Sign Message</button>
</div>
</div>
</fieldset>
</form>
</div>

<!-- Verify -->
<div class="tab-pane fade" id="verify">
<form action="/" class="form-horizontal" method="get" id="vrForm">
<fieldset> <legend>Verify Message</legend>
<div class="control-group">
<label class="control-label" for="vrAddr">Address</label>
<div class="controls">
<input class="span4" id="vrAddr" type="text">
</div>
</div>
<div class="control-group">
<label class="control-label" for="vrMsg">Message</label>
<div class="controls">
<textarea class="span8" id="vrMsg" rows="10"></textarea>
</div>
</div>

<div class="control-group">
<label class="control-label" for="vrSig">Signature</label>
<div class="controls">
<input class="span8" id="vrSig" type="text">
<span class="help-inline errormsg"></span>
</div>
</div>

<div class="control-group">
<label class="control-label" for="vrVerify"></label>
<div class="controls">
<button class="btn" id="vrVerify" type="button">Verify Message</button>
<span id="vrRes" class="help-inline errormsg"></span>
</div>
</div>
</fieldset>
</form>
</div>


<hr />
</div>
<FOOTER>
Expand All @@ -313,6 +394,7 @@ <h3><span class="pull-right" id="qr_addr"></span></h3>
<script src="js/armory.js"></script>
<script src="js/electrum.js"></script>
<script src="js/tx.js"></script>
<script src="js/bitcoinsig.js"></script>
<script src="js/brainwallet.js"></script>
</body>
</html>
120 changes: 108 additions & 12 deletions js/brainwallet.js
Original file line number Diff line number Diff line change
Expand Up @@ -698,10 +698,15 @@
var res = parseBase58Check(sec);
var version = res[0];
var payload = res[1];
var compressed = false;
if (payload.length > 32) {
payload.pop();
compressed = true;
}
var eckey = new Bitcoin.ECKey(payload);
var curve = getSECCurveByName("secp256k1");
var pt = curve.getG().multiply(eckey.priv);
eckey.pub = pt.getEncoded();
eckey.pub = getEncoded(pt, compressed);
eckey.pubKeyHash = Bitcoin.Util.sha256ripe160(eckey.pub);
addr = eckey.getBitcoinAddress();
} catch (err) {
Expand Down Expand Up @@ -784,11 +789,7 @@
}

function txSent(text) {
if (!text) {
alert("No response!");
} else {
alert(text);
}
alert(text ? text : 'No response!');
}

function txSend() {
Expand Down Expand Up @@ -829,6 +830,12 @@
return;
}

var compressed = false;
if (payload.length > 32) {
payload.pop();
compressed = true;
}

var eckey = new Bitcoin.ECKey(payload);

TX.init(eckey);
Expand Down Expand Up @@ -871,14 +878,80 @@
txGetUnspent();
}

// -- sign --

function updateAddr(from, to) {
var sec = from.val();
var addr = '';
var eckey = null;
var compressed = false;
try {
var res = parseBase58Check(sec);
var version = res[0];
var payload = res[1];
if (payload.length > 32) {
payload.pop();
compressed = true;
}
eckey = new Bitcoin.ECKey(payload);
var curve = getSECCurveByName("secp256k1");
var pt = curve.getG().multiply(eckey.priv);
eckey.pub = getEncoded(pt, compressed);
eckey.pubKeyHash = Bitcoin.Util.sha256ripe160(eckey.pub);
addr = eckey.getBitcoinAddress();
setErrorState(from, false);
} catch (err) {
setErrorState(from, true, "Bad private key");
}
to.val(addr);
return {"key":eckey, "compressed":compressed};
}

function sgGenAddr() {
updateAddr($('#sgSec'), $('#sgAddr'));
$('#vrAddr').val($('#sgAddr').val());
}

function sgOnChangeSec() {
clearTimeout(timeout);
timeout = setTimeout(sgGenAddr, TIMEOUT);
}

function sgSign() {
var message = $('#sgMsg').val();
var p = updateAddr($('#sgSec'), $('#sgAddr'));
var sig = sign_message(p.key, message, p.compressed);
$('#sgSig').val(sig);
}

function sgOnChangeMsg() {
clearTimeout(timeout);
timeout = setTimeout(sgUpdateMsg, TIMEOUT);
}

function sgUpdateMsg() {
$('#vrMsg').val($('#sgMsg').val());
}

// -- verify --

function vrVerify() {
var message = $('#vrMsg').val();
var addr = $('#vrAddr').val();
var sig = $('#vrSig').val();
var res = verify_message(addr, sig, message);
$('#vrRes').text(res);
return false;
}

function vrClearRes() {
$('#vrRes').text('');
}

$(document).ready( function() {

if (window.location.hash == '#converter')
$('#tab-converter').tab('show');
else if (window.location.hash == '#chains')
$('#tab-chains').tab('show');
else if (window.location.hash == '#transactions')
$('#tab-transactions').tab('show');
if (window.location.hash)
$('#tab-' + window.location.hash.substr(1)).tab('show');

// generator

Expand Down Expand Up @@ -944,5 +1017,28 @@
onInput('#src', onChangeFrom);
$("body").on("click", "#enc_from .btn", update_enc_from);
$("body").on("click", "#enc_to .btn", update_enc_to);

// sign

$('#sgSec').val('5JeWZ1z6sRcLTJXdQEDdB986E6XfLAkj9CgNE4EHzr5GmjrVFpf');
$('#sgAddr').val('17mDAmveV5wBwxajBsY7g1trbMW1DVWcgL');
$('#sgMsg').val("C'est par mon ordre et pour le bien de l'Etat que le porteur du présent a fait ce qu'il a fait.");

onInput('#sgSec', sgOnChangeSec);
onInput('#sgMsg', sgOnChangeMsg);

$('#sgSign').click(sgSign);
$('#sgForm').submit(sgSign);

// verify

$('#vrAddr').val('17mDAmveV5wBwxajBsY7g1trbMW1DVWcgL');
$('#vrMsg').val($('#sgMsg').val());

onInput('#vrAddr', vrClearRes);
onInput('#vrMsg', vrClearRes);
onInput('#vrSig', vrClearRes);
$('#vrVerify').click(vrVerify);

});
})(jQuery);

0 comments on commit 4711c54

Please sign in to comment.