]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/commitdiff
Add Cosmos Hub (ATOM) support
authorIan Coleman <ian@iancoleman.io>
Thu, 11 Feb 2021 02:13:23 +0000 (02:13 +0000)
committerIan Coleman <ian@iancoleman.io>
Thu, 11 Feb 2021 02:34:38 +0000 (02:34 +0000)
Closes #452, thanks @conr2d

libs/combined/index.js
libs/combined/package.json
src/index.html
src/js/cosmos-util.js [new file with mode: 0644]
src/js/index.js
tests/spec/tests.js

index d3bc7a59d034d3c68991aedc369d215569f06cab..b020f593cce134170b9c57b765d5c883e42d6473 100644 (file)
@@ -14,6 +14,10 @@ module.exports.bchaddr = require('bchaddrjs')
 
 module.exports.bchaddrSlp = require('bchaddrjs-slp')
 
+/* bech32 */
+
+module.exports.bech32 = require('bech32')
+
 /* biginteger */
 
 module.exports.BigInteger = require('javascript-biginteger')
index 5b47f7404acb16ac5e137aa0529c6f036581b386..ed600593da967caa2a241871b07ed3e5cd05e55f 100644 (file)
@@ -8,6 +8,7 @@
     "base-x": "3.0.7",
     "bchaddrjs": "0.4.4",
     "bchaddrjs-slp": "git://github.com/simpleledger/bchaddrjs.git#af16e44a6bfbe4b3980a62dba50e2f68ed864c6b",
+    "bech32": "1.1.4",
     "bip38": "2.0.2",
     "bip38grs": "git://github.com/Groestlcoin/bip38grs.git#091975b01679b74dc0a4136bb743fe17791b0151",
     "bip85": "0.0.3",
index 4b61424572ec001475c4ad0aefb67cb4dfe5b8ae..34b43eccbab8ea2b27c3a516040a3d2c1ae8a9b4 100644 (file)
         <script src="js/ripple-util.js"></script>
         <script src="js/jingtum-util.js"></script>
         <script src="js/casinocoin-util.js"></script>
+        <script src="js/cosmos-util.js"></script>
         <script src="js/eos-util.js"></script>
         <script src="js/fio-util.js"></script>
         <script src="js/sjcl-bip39.js"></script>
diff --git a/src/js/cosmos-util.js b/src/js/cosmos-util.js
new file mode 100644 (file)
index 0000000..a7f4605
--- /dev/null
@@ -0,0 +1,13 @@
+function CosmosBufferToPublic(pubBuf) {
+  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));
+}
+
+function CosmosBufferToAddress(pubBuf) {
+  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));
+}
index 713b5e847c1a5da4046d89fccd790ca03e58c425..96fc4510c80c796a985fed943c92ff22671e003f 100644 (file)
                     privkey = FIObufferToPrivate(keyPair.d.toBuffer(32));
                 }
 
+                if (networks[DOM.network.val()].name == "ATOM - Cosmos Hub") {
+                    address = CosmosBufferToAddress(keyPair.getPublicKeyBuffer());
+                    pubkey = CosmosBufferToPublic(keyPair.getPublicKeyBuffer());
+                    privkey = keyPair.d.toBuffer().toString("base64");
+                }
+
                 //Groestlcoin Addresses are different
                 if(isGRS()) {
 
                 setHdCoin(357);
             },
         },
+        {
+            name: "ATOM - Cosmos Hub",
+            onSelect: function() {
+                network = libs.bitcoin.networks.bitcoin;
+                setHdCoin(118);
+            },
+        },
         {
             name: "AUR - Auroracoin",
             onSelect: function() {
index f350fa7a3d60db80a1d60138f54b97fa7db4f964..7e553afebc2ab7fa2b28e701b89a392a74ab880d 100644 (file)
@@ -917,6 +917,16 @@ it('Allows selection of Aryacoin', function(done) {
     };
     testNetwork(done, params);
 });
+it('Allows selection of Cosmos Hub', function(done) {
+    var params = {
+        selectText: "ATOM - Cosmos Hub",
+        phrase: "abandon abandon ability",
+        firstAddress: "cosmos17mkch9syem8gtf6wh7p38thdgav6dwezpkylny",
+        firstPubKey: "cosmospub1addwnpepq0sgn66ty4suk5vx3hsmxxqd5z3amegqwlu59funrzyz5u8r9758qhl84ys",
+        firstPrivKey: "zUnETPxmE2vkHzLHTAlO9wg8PL/GEEBc1I4yVwvSV8M=",
+    };
+    testNetwork(done, params);
+});
 it('Allows selection of Auroracoin', function(done) {
     var params = {
         selectText: "AUR - Auroracoin",