Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node_modules/
bower_components/
33 changes: 33 additions & 0 deletions Gruntfile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
module.exports = function(grunt) {
grunt.initConfig({
/*
* warpwallet-dismantled v1.0.1
* https://github.com/davidapple/warpwallet-dismantled
* Use the default grunt task to recompile warpwallet js and verify the authenticity of the code.
*/
concat: {
options: {
separator: ';',
},
dist: {
src: [
'bower_components/warpwallet/src/js/deps.js',
],
dest: 'js/warpwallet.js'
},
},
uglify: {
options: {
mangle: false
},
target: {
files: {
'js/warpwallet.min.js': 'js/warpwallet.js',
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default', ['concat', 'uglify']);
};
18 changes: 18 additions & 0 deletions bower.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "coinbin",
"authors": [
"OutCast3k"
],
"description": "A Open Source Browser Based Bitcoin Wallet.",
"main": "index.html",
"license": "MIT",
"homepage": "https://coinb.in/",
"ignore": [
"bower_components"
],
"dependencies": {
"jquery": "^2.2.2",
"qrcode.js": "qrcode-js#*",
"warpwallet": "https://github.com/davidapple/warpwallet-dismantled.git#^1.0.1"
}
}
24 changes: 24 additions & 0 deletions css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -24,3 +24,27 @@ body {
background-color: #f5f5f5;
padding-top: 20px;
}


.form-horizontal .progress-form {
margin: 20px 0px 20px 0px;
}
.progress-form {
background-color: #eee;
}
.progress-form .bar {
background-color:#f8f8f8;
border-right:20px solid #6f6;
width:10%;
color:#f90;
overflow:hidden;
white-space: nowrap;
padding:3px 0 3px 10px;
font-family: 'courier new',courier,fixed;
}
.progress-scrypt {
color:#090;
}
.progress-pbkdf2 {
color:#f90;
}
48 changes: 45 additions & 3 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
<script type="text/javascript" src="js/jsbn.js"></script>
<script type="text/javascript" src="js/ellipticcurve.js"></script>

<script type="text/javascript" src="js/warpwallet.min.js"></script>

<script type="text/javascript" src="js/coin.js"></script>
<script type="text/javascript" src="js/coinbin.js"></script>
</head>
Expand Down Expand Up @@ -280,7 +282,37 @@ <h3>Address Options</h3>
<label><input type="checkbox" id="newBrainwallet" class="checkbox-inline"> Custom Seed or Brain Wallet</label>
<input type="text" class="form-control hidden" id="brainwallet">
</div>

<div class="checkbox">
<label><input type="checkbox" id="warpwallet" class="checkbox-inline"> Warp Wallet</label>
<div id="warpgen" class="row hidden">
<div class="col-md-12">
<div class="input-group">
<input type="password" class="form-control" id="warpphrase" placeholder="Enter Passphrase">
<span class="input-group-btn">
<button class="showKey btn btn-default" type="button">Show</button>
</span>
</div>
<div class="alert alert-danger hidden" id="warpwarning">
<span class="glyphicon glyphicon-exclamation-sign"></span> You must enter a passphrase
</div>
</div>
<hr>
<div class="col-md-12">
<div class="input-group">
<input type="password" class="form-control" id="warpsalt" placeholder="Enter email address for salt (optional)">
<span class="input-group-btn">
<button class="showKey btn btn-default" type="button">Show</button>
</span>
</div>
<div class="form-group progress-form" style="display:none;">
<div class="bar" style="width:10%;margin-top:10px;">
<span class="progress-scrypt"></span>
<span class="progress-pbkdf2"></span>
</div>
</div>
</div>
</div>
</div>
<div class="checkbox">
<label><input type="checkbox" id="encryptKey" class="checkbox-inline"> Encrypt Private Key with AES-256 Password</label>
<div id="aes256passform" class="row hidden">
Expand Down Expand Up @@ -515,7 +547,7 @@ <h2>Transaction <small>Create a new transaction</small></h2>

<label>Null Data</label> <span class="text-muted text-normal">(80 byte limit, <i>40 bytes recommended</i>)</span>
<p class="checkbox">
<label><input type="checkbox" id="opReturn" class="checkbox-inline"> Allow data to be sent within the transaction and stored in the blockchain by using <a href="https://bitcoin.org/en/developer-guide#null-data" target="_"blank">OP_RETURN</a>.</label>
<label><input type="checkbox" id="opReturn" class="checkbox-inline"> Allow data to be sent within the transaction and stored in the blockchain by using <a href="https://bitcoin.org/en/developer-guide#null-data" target="_blank">OP_RETURN</a>.</label>
<div class="text-muted">When using this option you may enter a hex string or address into the address field on the output tab.</div>
</p>

Expand Down Expand Up @@ -875,8 +907,18 @@ <h2>Sign Transaction <small>once a transaction has been verified</small></h2>
</div>
</div>
</div>
<div class="row hidden" id="brainkey" style="margin-top:10px;">
<div class="col-md-12">
<p><button type="button" class="btn btn-success keybrain"><span class="glyphicon glyphicon-refresh"></span> Brain Wallet (Compressed)</button> <button type="button" class="btn btn-success keybrain2"><span class="glyphicon glyphicon-refresh"></span> Brain Wallet (Uncompressed)</button> <button type="button" class="btn btn-success keywarp"><span class="glyphicon glyphicon-refresh"></span> Warp Wallet</button></p>
<div class="form-group progress-form" style="display:none;">
<div class="bar" style="width:10%;">
<span class="progress-scrypt"></span>
<span class="progress-pbkdf2"></span>
</div>
</div>
</div>
</div>
<br>

<div class="row">
<div class="col-md-12">
<textarea type="text" id="signTransaction" class="form-control" style="height:125px"></textarea>
Expand Down
116 changes: 115 additions & 1 deletion js/coinbin.js
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,60 @@ $(document).ready(function() {

/* new -> address code */

function addCommas(n){
while (/(\d+)(\d{3})/.test(n.toString())) {
n = n.toString().replace(/(\d+)(\d{3})/, '$1,$2');
}
return n;
}

function runwarp(parent,value, salt, result){
$('.progress-pbkdf2, .progress-scrypt',$(parent)).html('');
$('.progress-form',$(parent)).show();
return warpwallet.run({
passphrase: value,
salt: salt,
progress_hook: (function() {
return function(o) {
var w;
if (o.what === 'scrypt') {
w = (o.i / o.total) * 50;
$('.progress-form .bar',$(parent)).css('width', "" + w + "%");
return $('.progress-form .bar .progress-scrypt',$(parent)).html("scrypt " + (addCommas(o.i)) + " of " + (addCommas(o.total)));
} else if (o.what === 'pbkdf2') {
w = 50 + (o.i / o.total) * 50;
$('.progress-form .bar',$(parent)).css('width', "" + w + "%");
return $('.progress-form .bar .progress-pbkdf2',$(parent)).html("&nbsp; pbkdf2 " + (addCommas(o.i)) + " of " + (addCommas(o.total)));
}
};
})(this)
}, (function(_this) {
return function(res) {
$('.progress-form',$(parent)).hide();
$(result).val(res["private"]).trigger('keyup');
if(result == '#newPrivKey'){
$("#newBitcoinAddress").val(res["public"]);
var w2pubkey = coinjs.wif2pubkey(res["private"]);
$("#newPubKey").val(w2pubkey['pubkey']);
}
};
})(this));
}

$("#newKeysBtn").click(function(){

// Handle warp wallet
if($('#warpwallet:checked').length){
if($('#warpphrase').val() == ''){
$('#warpwarning').removeClass('hidden');
$('#warpphrase').closest('.input-group').addClass('has-error');
return false;
}
$("#newBitcoinAddress, #newPubKey, #newPrivKey").val('Loading...');
runwarp('#warpgen',$('#warpphrase').val(),$('#warpsalt').val(), '#newPrivKey');
return;
}

coinjs.compressed = false;
if($("#newCompressed").is(":checked")){
coinjs.compressed = true;
Expand Down Expand Up @@ -534,6 +587,61 @@ $(document).ready(function() {
}).keyup(function(){
totalInputAmount();
});

// Warp wallet keys
$('#signPrivateKey').keyup(function(){
var wif = $(this).val();
if(wif == ''){
$('#brainkey').addClass("hidden");
}else if(wif.length==51 || wif.length==52){
try {
var w2address = coinjs.wif2address(wif);
var w2pubkey = coinjs.wif2pubkey(wif);
var w2privkey = coinjs.wif2privkey(wif);

$('#brainkey').addClass("hidden");
} catch (e) {
$('#brainkey').removeClass("hidden");
}
} else {
$('#brainkey').removeClass("hidden");
}
});

$('#brainkey button').click(function(){
var value = $('#signPrivateKey').val();
if($(this).hasClass('keybrain') || $(this).hasClass('keybrain2')){
coinjs.compressed = $(this).hasClass('keybrain');
var coin = coinjs.newKeys(value);
value = coin.wif;
$('#signPrivateKey').val(value).trigger('keyup');
}else{
var salt = '';
var x;
if(x = prompt('If you have a salt enter it here','')){
salt = x;
}
runwarp('#brainkey',value,salt, '#signPrivateKey');
}
});

$('#newAddress input:checkbox').click(function(){
if($(this).attr('id') == 'warpwallet'){
$('#newAddress input:checked:not("#warpwallet")').each(function(){
$(this).attr('checked',false);
$('input[type="text"], .row',$(this).closest('.checkbox')).addClass('hidden');
});
$('.row',$('#warpwallet').closest('.checkbox')).removeClass('hidden');
}else{
$('.row',$('#warpwallet').closest('.checkbox')).addClass('hidden');
$('#warpwallet').attr('checked', false);
}
});

$('#warpphrase,#warpsalt').keyup(function(){
$(this).closest('.input-group').removeClass('has-error');
$('#warpwarning').addClass('hidden');
});

/* code for the qr code scanner */

Expand Down Expand Up @@ -1293,7 +1401,13 @@ $(document).ready(function() {
}

$(".showKey").click(function(){
$("input[type='password']",$(this).parent().parent()).attr('type','text');
if($(this).text() == 'Show'){
$(this).text('Hide');
$("input[type='password']",$(this).parent().parent()).attr('type','text');
}else{
$(this).text('Show');
$("input[type='text']",$(this).parent().parent()).attr('type','password');
}
});

$("#homeBtn").click(function(e){
Expand Down
Loading