Compare commits

..

24 Commits
0.5.2 ... 0.5.3

Author SHA1 Message Date
Ian Coleman
c4f0c2908f Release v0.5.3 2021-05-12 07:57:39 +10:00
Ian Coleman
941b099f14 Revert PR #486 2021-05-10 14:08:16 +10:00
iancoleman
83f23081a3 Merge pull request #485 from secinthenet/fix-zpub-from-seed
fix extended key version bytes not updating after switching tabs
2021-05-07 19:13:28 +10:00
iancoleman
1dab87d842 Merge pull request #496 from thisisvitto/patch-1
Incorrect HTML closing tag
2021-05-07 09:52:55 +10:00
iancoleman
83c580c678 Merge pull request #492 from HildisviniOttar/master
Support THORChain (RUNE) m/44/931
2021-05-07 09:51:38 +10:00
iancoleman
8b44f5d19a Merge branch 'master' into master 2021-05-07 09:51:28 +10:00
iancoleman
a7705b8ebc Merge pull request #484 from secinthenet/bip85-fix-from-ent
fix bip85 mode to work without mnemonic (using xprv or entropy)
2021-05-07 09:39:45 +10:00
iancoleman
f2081ee467 Merge pull request #486 from secinthenet/fix-seed-only-coin-switch
fix "blank mnemonic" error when only using a BIP39 seed (no mnemonic phrase) and then changing the coin
2021-05-07 09:34:41 +10:00
iancoleman
f50464249c Merge pull request #482 from interbiznw/btcp
add bitcoin private testnet support
2021-05-07 09:28:51 +10:00
iancoleman
ed720546bf Merge pull request #480 from xwcdev/master
Change xwc to xwcc according to slip-0044 and add xwc
2021-05-07 09:26:47 +10:00
iancoleman
e8f27ba2c3 Merge pull request #479 from a00a63/terra
Add Terra (LUNA) support
2021-05-07 09:24:28 +10:00
iancoleman
be946a2061 Merge branch 'master' into terra 2021-05-07 09:24:18 +10:00
iancoleman
a636b24619 Merge pull request #475 from davepuchyr/starname-iov
Add Starname (IOV) support
2021-05-07 09:17:46 +10:00
Vitto K
f8fd590588 Incorrect HTML closing tag
Fixed incorrect HTML closing tag, made it difficult to expand/collapse code folds correctly in text editors.
2021-05-01 21:52:50 +02:00
Hildisvíni Óttar
02eeb81713 Support THORChain (RUNE) m/44/931 2021-04-23 14:22:42 +09:30
Sylvia G
18d64d9586 fix bip85 root key when using non-xprv version bytes 2021-04-06 04:32:20 +03:00
Sylvia G
5b5b11fd96 fix "blank mnemonic" error when only using a BIP39 seed (no mnemonic phrase) and then changing the coin 2021-04-06 03:55:40 +03:00
Sylvia G
2c86fb4746 fix extended key version bytes not updating after switching tabs 2021-04-06 03:35:24 +03:00
Sylvia G
85711db3bb fix bip85 mode to work without mnemonic (using xprv or entropy) 2021-04-06 03:18:04 +03:00
J62
1820b6ac67 add bitcoin private testnet support 2021-03-29 19:46:51 -07:00
xwcdev
b500a60e28 fix test title 2021-03-28 19:13:33 +08:00
xwcdev
942de1bc5e change xwc to xwcc,add new xwc 2021-03-28 18:54:12 +08:00
a00a63
43bef4e19d Add Terra (LUNA) support 2021-03-27 14:04:07 +01:00
Dave Puchyr
20bd34b014 Add Starname (IOV) support 2021-02-25 15:51:45 +01:00
7 changed files with 194 additions and 21 deletions

View File

@@ -1,3 +1,14 @@
# 0.5.3
Add Starname network
Add Terra network
Add Bitcoin Private network
Add Thorchain network
Change Xwc network to Xwcc and add new Xwc
Fix Bip85 works without mnemonic (using xprv)
Fix extended key not updating when switching tabs
Fix incorrect html closing tag
# 0.5.2
* Show ethereum private keys with correct padding

View File

@@ -15,7 +15,7 @@
<div class="container">
<h1 class="text-center">Mnemonic Code Converter</h1>
<p class="version">v0.5.2</p>
<p class="version">v0.5.3</p>
<hr>
<div class="row">
<div class="col-md-12">
@@ -286,7 +286,7 @@
for more information.
</p>
</div>
</p>
</div>
<label for="bip85-application" class="col-sm-2 control-label">BIP85 Application</label>
<div class="col-sm-10">
<select id="bip85-application" class="form-control">
@@ -1104,6 +1104,7 @@
<script src="js/cosmos-util.js"></script>
<script src="js/eos-util.js"></script>
<script src="js/fio-util.js"></script>
<script src="js/xwc-util.js"></script>
<script src="js/sjcl-bip39.js"></script>
<script src="js/wordlist_english.js"></script>
<script src="js/wordlist_japanese.js"></script>

View File

@@ -1531,6 +1531,17 @@ libs.bitcoin.networks.bitcoinprivate = {
wif: 0x80,
};
libs.bitcoin.networks.bitcoinprivatetestnet = {
messagePrefix: '\x18BitcoinPrivate Signed Message:\n',
bip32: {
public: 0x043587CF,
private: 0x04358394,
},
pubKeyHash: 0x1957,
scriptHash: 0x19E0,
wif: 0xEF,
};
libs.bitcoin.networks.bitcoinz = {
messagePrefix: '\x18BitcoinZ Signed Message:\n',
bip32: {

View File

@@ -1,13 +1,13 @@
function CosmosBufferToPublic(pubBuf) {
function CosmosBufferToPublic(pubBuf, hrp = "cosmos") {
const Buffer = libs.buffer.Buffer;
const AminoSecp256k1PubkeyPrefix = Buffer.from("EB5AE987", "hex");
const AminoSecp256k1PubkeyLength = Buffer.from("21", "hex");
pubBuf = Buffer.concat([AminoSecp256k1PubkeyPrefix, AminoSecp256k1PubkeyLength, pubBuf]);
return libs.bech32.encode("cosmospub", libs.bech32.toWords(pubBuf));
return libs.bech32.encode(`${hrp}pub`, libs.bech32.toWords(pubBuf));
}
function CosmosBufferToAddress(pubBuf) {
function CosmosBufferToAddress(pubBuf, hrp = "cosmos") {
const sha256_ed = libs.createHash("sha256").update(pubBuf).digest();
const ripemd160_ed = libs.createHash("rmd160").update(sha256_ed).digest();
return libs.bech32.encode("cosmos", libs.bech32.toWords(ripemd160_ed));
return libs.bech32.encode(hrp, libs.bech32.toWords(ripemd160_ed));
}

View File

@@ -296,6 +296,7 @@
showPending();
adjustNetworkForSegwit();
var phrase = DOM.phrase.val();
var seed = DOM.seed.val();
if (phrase != "") {
// Calculate and display for mnemonic
var errorText = findPhraseErrors(phrase);
@@ -307,6 +308,11 @@
var passphrase = DOM.passphrase.val();
calcBip32RootKeyFromSeed(phrase, passphrase);
}
else if (seed != "") {
bip32RootKey = libs.bitcoin.HDNode.fromSeedHex(seed, network);
var rootKeyBase58 = bip32RootKey.toBase58();
DOM.rootKey.val(rootKeyBase58);
}
else {
// Calculate and display for root key
var rootKeyBase58 = DOM.rootKey.val();
@@ -495,13 +501,16 @@
var app = DOM.bip85application.val();
var phrase = DOM.phrase.val();
var passphrase = DOM.passphrase.val();
if (!phrase) {
var rootKeyBase58 = DOM.rootKey.val();
if (!rootKeyBase58) {
return;
}
try {
var master = libs.bip85.BIP85.fromMnemonic(phrase, passphrase);
// try parsing using base network params
// The bip85 lib only understands xpubs, so compute it
var rootKey = libs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
rootKey.keyPair.network = libs.bitcoin.networks['bitcoin']
var master = libs.bip85.BIP85.fromBase58(rootKey.toBase58());
var result;
@@ -1350,21 +1359,21 @@
}
// ZooBC address format may vary
if (networks[DOM.network.val()].name == "ZBC - ZooBlockchain") {
if (networks[DOM.network.val()].name == "ZBC - ZooBlockchain") {
var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
var path = "m/";
path += purpose + "'/";
path += coin + "'/" + index + "'";
var result = libs.zoobcUtil.getKeypair(path, seed);
let publicKey = result.pubKey.slice(1, 33);
let privateKey = result.key;
privkey = privateKey.toString('hex');
pubkey = publicKey.toString('hex');
indexText = path;
address = libs.zoobcUtil.getZBCAddress(publicKey, 'ZBC');
}
@@ -1420,12 +1429,40 @@
}
if (networks[DOM.network.val()].name == "ATOM - Cosmos Hub") {
address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer());
pubkey = CosmosBufferToPublic(keyPair.getPublicKeyBuffer());
const hrp = "cosmos";
address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer(), hrp);
pubkey = CosmosBufferToPublic(keyPair.getPublicKeyBuffer(), hrp);
privkey = keyPair.d.toBuffer().toString("base64");
}
if (networks[DOM.network.val()].name == "RUNE - THORChain") {
const hrp = "thor";
address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer(), hrp);
pubkey = keyPair.getPublicKeyBuffer().toString("hex");
privkey = keyPair.d.toBuffer().toString("hex");
}
if (networks[DOM.network.val()].name == "XWC - Whitecoin"){
address = XWCbufferToAddress(keyPair.getPublicKeyBuffer());
pubkey = XWCbufferToPublic(keyPair.getPublicKeyBuffer());
privkey = XWCbufferToPrivate(keyPair.d.toBuffer(32));
}
//Groestlcoin Addresses are different
if (networks[DOM.network.val()].name == "LUNA - Terra") {
const hrp = "terra";
address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer(), hrp);
pubkey = keyPair.getPublicKeyBuffer().toString("hex");
privkey = keyPair.d.toBuffer().toString("hex");
}
if (networks[DOM.network.val()].name == "IOV - Starname") {
const hrp = "star";
address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer(), hrp);
pubkey = CosmosBufferToPublic(keyPair.getPublicKeyBuffer(), hrp);
privkey = keyPair.d.toBuffer().toString("base64");
}
//Groestlcoin Addresses are different
if(isGRS()) {
if (isSegwit) {
@@ -2389,6 +2426,13 @@
setHdCoin(183);
},
},
{
name: "BTCPt - Bitcoin Private Testnet",
onSelect: function() {
network = libs.bitcoin.networks.bitcoinprivatetestnet;
setHdCoin(1);
},
},
{
name: "BSC - Binance Smart Chain",
onSelect: function() {
@@ -2851,6 +2895,13 @@
},
},
{
name: "IOV - Starname",
onSelect: function() {
network = libs.bitcoin.networks.bitcoin;
setHdCoin(234);
},
},
{
name: "IXC - Ixcoin",
onSelect: function() {
network = libs.bitcoin.networks.ixcoin;
@@ -2939,6 +2990,13 @@
setHdCoin(221);
},
},
{
name: "LUNA - Terra",
onSelect: function() {
network = libs.bitcoin.networks.bitcoin;
setHdCoin(330);
},
},
{
name: "LYNX - Lynx",
onSelect: function() {
@@ -3259,6 +3317,13 @@
setHdCoin(19169);
},
},
{
name: "RUNE - THORChain",
onSelect: function() {
network = libs.bitcoin.networks.bitcoin;
setHdCoin(931);
},
},
{
name: "RVR - RevolutionVR",
onSelect: function() {
@@ -3568,7 +3633,7 @@
},
},
{
name: "XWC - Whitecoin",
name: "XWCC - Whitecoin Classic",
onSelect: function() {
network = libs.bitcoin.networks.whitecoin;
setHdCoin(155);
@@ -3609,6 +3674,13 @@
setHdCoin(121);
},
},
{
name: "XWC - Whitecoin",
onSelect: function() {
network = libs.bitcoin.networks.bitcoin;
setHdCoin(559);
},
}
]
var clients = [

28
src/js/xwc-util.js Normal file
View File

@@ -0,0 +1,28 @@
function XWCbufferToAddress(pubBuf){
const Buffer = libs.buffer.Buffer;
const XWC_ADDRESS_PREFIX = "XWC";
const XWC_NORMAL_ADDRESS_VERSION = "35"
let addrData = libs.createHash("rmd160").update( libs.createHash("sha512").update(pubBuf).digest()).digest();
let addrBuf = Buffer.concat([Buffer.from(XWC_NORMAL_ADDRESS_VERSION, "hex") ,addrData])
let checksum = libs.createHash("rmd160").update(addrBuf).digest("hex").slice(0, 8);
addrBuf = Buffer.concat([addrBuf, Buffer.from(checksum, "hex")]);
return XWC_ADDRESS_PREFIX.concat(libs.bs58.encode(addrBuf));
}
function XWCbufferToPublic(pubBuf) {
const Buffer = libs.buffer.Buffer;
const XWC_PUBLIC_PREFIX = "XWC";
let checksum = libs.createHash("rmd160").update(pubBuf).digest("hex").slice(0, 8);
pubBuf = Buffer.concat([pubBuf, Buffer.from(checksum, "hex")]);
return XWC_PUBLIC_PREFIX.concat(libs.bs58.encode(pubBuf));
}
function XWCbufferToPrivate(privBuf) {
const Buffer = libs.buffer.Buffer;
const XWC_PRIVATE_PREFIX = "80";
privBuf = Buffer.concat([Buffer.from(XWC_PRIVATE_PREFIX, "hex"), privBuf]);
let tmp = libs.createHash("sha256").update(privBuf).digest();
let checksum = libs.createHash("sha256").update(tmp).digest("hex").slice(0, 8);
privBuf = Buffer.concat([privBuf, Buffer.from(checksum, "hex")]);
return libs.bs58.encode(privBuf);
}

View File

@@ -927,6 +927,16 @@ it('Allows selection of Cosmos Hub', function(done) {
};
testNetwork(done, params);
});
it('Allows selection of Terra', function(done) {
var params = {
selectText: "LUNA - Terra",
phrase: "abandon abandon ability",
firstAddress: "terra1txr4jwel3vjl64vrc08pljnjryqkhtffmyp265",
firstPubKey: "028e7658e3debb2d9d458919bfba0e85b0220e845f7552176f30a52acd0f809d71",
firstPrivKey: "d611b211e370aa1edd9743acd6ce537d16fade85d7ae7e88b32f3a0483f52535",
};
testNetwork(done, params);
});
it('Allows selection of Auroracoin', function(done) {
var params = {
selectText: "AUR - Auroracoin",
@@ -987,6 +997,16 @@ it('Allows selection of Bitcoin Private', function(done) {
};
testNetwork(done, params);
});
it('Allows selection of Bitcoin Private testnet', function(done) {
var params = {
selectText: "BTCPt - Bitcoin Private Testnet",
phrase: "abandon abandon ability",
firstAddress: "n1UcUUSDfDppfzh7XLJNHmZkLdbTQg3VAZL",
firstPubKey: "0382a5450765e2025bdb5f7d109c9254a11ef97a566228bf171d80ecb348763bb0",
firstPrivKey: "cV3coiYD2NhHKfhC6Gb8DzpvPzcGYYExYxuNxpUtKq3VUJrkFLZx",
};
testNetwork(done, params);
});
it('Allows selection of Bitcoin SV', function(done) {
var params = {
selectText: "BSV - BitcoinSV",
@@ -1355,6 +1375,16 @@ it('Allows selection of Iop', function(done) {
};
testNetwork(done, params);
});
it('Allows selection of Starname', function(done) {
var params = {
selectText: "IOV - Starname",
phrase: "abandon abandon ability",
firstAddress: "star1xgfvgq40r7ff8ylw9l95dw56xnr0pvtjnlp7h4",
firstPubKey: "starpub1addwnpepqg9x5cft48hcgx25vyzeyygntl7pt763datr6v50hrecafyane54xlqdxkd",
firstPrivKey: "bGI4BNRvMYT1lbCOoH000HvNFPkyXms9n3Xp1X/7E80=",
};
testNetwork(done, params);
});
it('Allows selection of Ixcoin', function(done) {
var params = {
selectText: "IXC - Ixcoin",
@@ -1665,6 +1695,16 @@ it('Allows selection of Rubycoin', function(done) {
};
testNetwork(done, params);
});
it('Allows selection of THORChain', function(done) {
var params = {
selectText: "RUNE - THORChain",
phrase: "flip vicious divorce angle toward say derive blue refuse load word creek once expire bounce",
firstAddress: "thor1zp3yx758t64vqvu8776vnwd0udrs2vwuxhc4ep",
firstPubKey: "02fa85b75ef37fe3a4f4a6d62352aa7de070d2b39af9c55be26f079d01f406851d",
firstPrivKey: "6020c0d5a9a8689c491c6a8f36beb70bf459e129e1428fed64aaf594beee54a6",
};
testNetwork(done, params);
});
it('Allows selection of Salus', function(done) {
var params = {
selectText: "SLS - Salus",
@@ -1875,9 +1915,9 @@ it('Allows selection of VeChain', function(done) {
};
testNetwork(done, params);
});
it('Allows selection of Whitecoin', function(done) {
it('Allows selection of Whitecoin Classic', function(done) {
var params = {
selectText: "XWC - Whitecoin",
selectText: "XWCC - Whitecoin Classic",
phrase: "abandon abandon ability",
firstAddress: "WcSwCAUqrSgeSYbsaS3SSWWhsx8KRYTFDR",
firstPubKey: "03d3f4fa758f6260bfb39664d248a32258b53a90a71224db056ee79abaa3e9f208",
@@ -1885,6 +1925,16 @@ it('Allows selection of Whitecoin', function(done) {
};
testNetwork(done, params);
});
it('Allows selection of Whitecoin', function(done) {
var params = {
selectText: "XWC - Whitecoin",
phrase: "abandon abandon ability",
firstAddress: "XWCNY5EQsC55ifxRVEbP7H28yc3TMXC2pqsb5",
firstPubKey: "XWC68fEy4cCc8G1UWyeMPnQ5NjEhMUFSvu1oz4gLKxvj3dPvh7v18",
firstPrivKey: "5K8toD6TYy5DMHkxjpywXNLj4M6CjZAT5h12uhRuVuBBRtci8Zw",
};
testNetwork(done, params);
});
it('Allows selection of Wincoin', function(done) {
var params = {
selectText: "WC - Wincoin",