forked from rsksmart/utils
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrsk-conversion-utils.js
61 lines (52 loc) · 1.73 KB
/
rsk-conversion-utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
var bs58 = require('bs58');
var wallet = require('ethereumjs-wallet').default;
var convertHex = require('convert-hex');
var sha256 = require('js-sha256');
function keyBtcToRskInBytes(privKeyAsExportedByBitcoinDumpprivkey) {
var decodedKey = bs58.decode(privKeyAsExportedByBitcoinDumpprivkey);
var privKeyBytes = decodedKey.slice(1, decodedKey.length - 5);
return privKeyBytes;
}
function privKeyToRskFormat(btcPrivateKey) {
var privKeyBytes = keyBtcToRskInBytes(btcPrivateKey);
var privKeyInRskFormat = new Buffer(privKeyBytes).toString('hex');
return privKeyInRskFormat;
}
function getRskAddress(btcPrivateKey) {
var myWallet = wallet.fromPrivateKey(new Buffer(keyBtcToRskInBytes(btcPrivateKey)));
var addressInRskFormat = myWallet.getAddress();
return addressInRskFormat.toString('hex');
}
function getBtcPrivateKey(btcNet, rskAddress) {
var addressArray = convertHex.hexToBytes(rskAddress);
var partialResult = new Array();
var result = new Array();
if(btcNet === 'MAIN_NET') {
partialResult.push(0x80);
} else {
partialResult.push(0xEF);
}
for (var i = 0; i < addressArray.length; i++) {
partialResult.push(addressArray[i]);
}
partialResult.push(0x01);
var check = convertHex.hexToBytes(sha256(convertHex.hexToBytes(sha256(partialResult))));
for (var i = 0; i < partialResult.length; i++) {
result.push(partialResult[i]);
}
for (var i = 0; i < 4; i++) {
result.push(check[i]);
}
return bs58.encode(result);
}
module.exports = {
privKeyToRskFormat: function (btcPrivateKey) {
return privKeyToRskFormat(btcPrivateKey);
},
getRskAddress: function (btcPrivateKey) {
return getRskAddress(btcPrivateKey);
},
getBtcPrivateKey: function (btcNet, rskAddress) {
return getBtcPrivateKey(btcNet, rskAddress);
}
};