Socket
Socket
Sign inDemoInstall

bitcore-lib-cash

Package Overview
Dependencies
92
Maintainers
1
Versions
101
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.15.1 to 0.16.0

.package.json.swo

2

index.js

@@ -40,2 +40,4 @@ 'use strict';

bitcore.util.preconditions = require('./lib/util/preconditions');
bitcore.util.base32 = require('./lib/util/base32');
bitcore.util.convertBits = require('./lib/util/convertBits');

@@ -42,0 +44,0 @@ // errors thrown by the library

@@ -11,3 +11,7 @@ 'use strict';

var PublicKey = require('./publickey');
var BN = require('./crypto/bn');
var base32 = require('./util/base32');
var convertBits = require('./util/convertBits');
/**

@@ -270,4 +274,98 @@ * Instantiate an address from an address String or Buffer, a public key or script hash Buffer,

function decodeCashAddress(address) {
function hasSingleCase(string) {
var lowerCase = string.toLowerCase();
var upperCase = string.toUpperCase();
var hasSingleCase = string === lowerCase || string === upperCase;
return hasSingleCase;
}
function validChecksum(prefix, payload) {
function prefixToArray(prefix) {
var result = [];
for (var i=0; i<prefix.length; i++) {
result.push(prefix.charCodeAt(i) & 31);
}
return result;
}
var prefixData = prefixToArray(prefix).concat([0]);
return polymod(prefixData.concat(payload)).eqn(0);
}
$.checkArgument(hasSingleCase(address), 'Mixed case');
address = address.toLowerCase();
var pieces = address.split(':');
$.checkArgument(pieces.length <= 2, 'Invalid format:'+ address);
var prefix, encodedPayload;
if (pieces.length == 2) {
prefix = pieces[0];
encodedPayload = pieces[1];
} else {
prefix = null;
encodedPayload = pieces[0];
}
var payload = base32.decode(encodedPayload.toLowerCase());
if (prefix) {
$.checkArgument(validChecksum(prefix, payload), 'Invalid checksum:'+ address);
} else {
var netNames = ['livenet','testnet'];
var i;
while(!prefix && (i = netNames.shift())){
var p = Networks.get(i).prefix;
if(validChecksum(p, payload)) {
prefix = p;
}
}
$.checkArgument(prefix, 'Invalid checksum:'+ address);
}
var convertedBits = convertBits(payload.slice(0, -8), 5, 8, true);
var versionByte = convertedBits.shift();
var hash = convertedBits;
$.checkArgument(getHashSize(versionByte) === hash.length * 8, 'Invalid hash size:'+ address);
function getType(versionByte) {
switch (versionByte & 120) {
case 0:
return 'pubkeyhash';
case 8:
return 'scripthash';
default:
throw new Error('Invalid address type in version byte:' + versionByte);
}
}
var type = getType(versionByte);
var network = Networks.get(prefix, 'prefix');
//console.log('[address.js.336:network:]',network); //TODO
var info = {};
//return { prefix, type, hash };
//console.log('[address.js.339]', hash); //TODO
info.hashBuffer = new Buffer(hash);
info.network = network;
info.type = type;
return info;
};
/**
* Internal function to transform a bitcoin address string
* Internal function to transform a bitcoin cash address string
*

@@ -285,3 +383,12 @@ * @param {string} data

data = data.trim();
var addressBuffer = Base58Check.decode(data);
var addressBuffer;
try {
addressBuffer = Base58Check.decode(data);
} catch (e) {
info = decodeCashAddress(data);
return info;
}
// Legacy addr
var info = Address._transformBuffer(addressBuffer, network, type);

@@ -291,2 +398,3 @@ return info;

/**

@@ -487,3 +595,3 @@ * Instantiate an address from a PublicKey instance

/**
* Will return a the string representation of the address
* Will return a the base58 (legacy) string representation of the address
*

@@ -493,2 +601,3 @@ * @returns {string} Bitcoin address

Address.prototype.toString = function() {
//console.log('Warning: Using deprecated bitcoin cash address type. Replace to .toCashAddress');
return Base58Check.encode(this.toBuffer());

@@ -506,4 +615,152 @@ };

/***
* @license
* https://github.com/bitcoincashjs/cashaddr
* Copyright (c) 2017 Emilio Almansi
* Distributed under the MIT software license, see the accompanying
* file LICENSE or http://www.opensource.org/licenses/mit-license.php.
*/
Address.prototype.toCashBuffer = function() {
var version = new Buffer([this.network[this.type]]);
var buf = Buffer.concat([version, this.hashBuffer]);
return buf;
};
/**
* Will return a cashaddr representation of the address. Always return lower case
* Can be converted by the caller to uppercase is needed (still valid).
*
* @returns {string} Bitcoin Cash address
*/
Address.prototype.toCashAddress = function() {
function getTypeBits(type) {
switch (type) {
case 'pubkeyhash':
return 0;
case 'scripthash':
return 8;
default:
throw new Error('Invalid type:'+ type);
}
}
function getHashSizeBits(hash) {
switch (hash.length * 8) {
case 160:
return 0;
case 192:
return 1;
case 224:
return 2;
case 256:
return 3;
case 320:
return 4;
case 384:
return 5;
case 448:
return 6;
case 512:
return 7;
default:
throw new Error('Invalid hash size:'+ hash.length);
}
}
var eight0 = [0,0,0,0, 0,0,0,0];
var prefixData = this.network.prefixArray.concat([0]);
var versionByte = getTypeBits(this.type) + getHashSizeBits(this.hashBuffer);
var arr = Array.prototype.slice.call(this.hashBuffer, 0);
var payloadData = convertBits([versionByte].concat(arr), 8, 5);
var checksumData = prefixData.concat(payloadData).concat(eight0);
var payload = payloadData.concat(checksumToArray(polymod(checksumData)));
return this.network.prefix+ ':' + base32.encode(payload);
};
/***
* Retrieves the the length in bits of the encoded hash from its bit
* representation within the version byte.
*
* @param {number} versionByte
*/
function getHashSize(versionByte) {
switch (versionByte & 7) {
case 0:
return 160;
case 1:
return 192;
case 2:
return 224;
case 3:
return 256;
case 4:
return 320;
case 5:
return 384;
case 6:
return 448;
case 7:
return 512;
}
}
/***
* Returns an array representation of the given checksum to be encoded
* within the address' payload.
*
* @param {BigInteger} checksum Computed checksum.
*/
function checksumToArray(checksum) {
var result = [];
var N31 = new BN(31);
for (var i = 0; i < 8; ++i) {
result.push(checksum.and(N31).toNumber());
checksum = checksum.shrn(5);
}
return result.reverse();
}
/***
* Computes a checksum from the given input data as specified for the CashAddr
* format: https://github.com/Bitcoin-UAHF/spec/blob/master/cashaddr.md.
*
* @param {Array} data Array of 5-bit integers over which the checksum is to be computed.
*/
var GENERATOR = _.map(
[0x98f2bc8e61, 0x79b76d99e2, 0xf33e5fb3c4, 0xae2eabe2a8, 0x1e4f43e470], function(x){
return new BN(x);
}
);
function polymod(data) {
var checksum = new BN(1);
var C = new BN(0x07ffffffff);
for (var j=0; j<data.length; j++) {
var value = data[j];
var topBits = checksum.shrn(35);
checksum = checksum.and(C);
checksum = checksum.shln(5).xor(new BN(value));
for (var i = 0; i < GENERATOR.length; ++i) {
var D = topBits.shrn(i).and(BN.One);
if (D.eqn(1)) {
checksum = checksum.xor(GENERATOR[i]);
}
}
}
return checksum.xor(BN.One);
}
module.exports = Address;
var Script = require('./script');

@@ -50,2 +50,16 @@ 'use strict';

/***
* Derives an array from the given prefix to be used in the computation
* of the address' checksum.
*
* @param {string} prefix Network prefix. E.g.: 'bitcoincash'.
*/
function prefixToArray(prefix) {
var result = [];
for (var i=0; i<prefix.length; i++) {
result.push(prefix.charCodeAt(i) & 31);
}
return result;
}
/**

@@ -72,2 +86,4 @@ * @function

data.prefix = data.prefix || data.name;
JSUtil.defineImmutable(network, {

@@ -80,3 +96,5 @@ name: data.name,

xpubkey: data.xpubkey,
xprivkey: data.xprivkey
xprivkey: data.xprivkey,
prefix: data.prefix,
prefixArray: prefixToArray(data.prefix),
});

@@ -135,2 +153,3 @@

alias: 'mainnet',
prefix: 'bitcoincash',
pubkeyhash: 28,

@@ -160,3 +179,3 @@ privatekey: 0x80,

name: 'testnet',
alias: 'regtest',
prefix: 'bchtest',
pubkeyhash: 0x6f,

@@ -181,6 +200,7 @@ privatekey: 0xef,

DNS_SEEDS: [
'testnet-seed.bitcoin.petertodd.org',
'testnet-seed.bluematt.me',
'testnet-seed.alexykot.me',
'testnet-seed.bitcoin.schildbach.de'
'seed.bitcoinabc.org',
'seed-abc.bitcoinforks.org',
'seed.bitcoinunlimited.info',
'seed.bitprim.org ',
'seed.deadalnix.me',
]

@@ -187,0 +207,0 @@ };

5

package.json
{
"name": "bitcore-lib-cash",
"version": "0.15.1",
"version": "0.16.0",
"description": "A pure and powerful JavaScript Bitcoin Cash library.",

@@ -42,3 +42,4 @@ "author": "BitPay <dev@bitpay.com>",

"inherits": "=2.0.1",
"lodash": "=4.17.4"
"lodash": "=4.17.4",
"phantomjs-prebuilt": "^2.1.16"
},

@@ -45,0 +46,0 @@ "devDependencies": {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc