Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ultraviolet
GitHub Repository: ultraviolet/bitaddress.org
Path: blob/master/src/bitcoinjs-lib.base58.js
248 views
1
//https://raw.github.com/bitcoinjs/bitcoinjs-lib/c952aaeb3ee472e3776655b8ea07299ebed702c7/src/base58.js
2
(function (Bitcoin) {
3
Bitcoin.Base58 = {
4
alphabet: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",
5
validRegex: /^[1-9A-HJ-NP-Za-km-z]+$/,
6
base: BigInteger.valueOf(58),
7
8
/**
9
* Convert a byte array to a base58-encoded string.
10
*
11
* Written by Mike Hearn for BitcoinJ.
12
* Copyright (c) 2011 Google Inc.
13
*
14
* Ported to JavaScript by Stefan Thomas.
15
*/
16
encode: function (input) {
17
var bi = BigInteger.fromByteArrayUnsigned(input);
18
var chars = [];
19
20
while (bi.compareTo(B58.base) >= 0) {
21
var mod = bi.mod(B58.base);
22
chars.unshift(B58.alphabet[mod.intValue()]);
23
bi = bi.subtract(mod).divide(B58.base);
24
}
25
chars.unshift(B58.alphabet[bi.intValue()]);
26
27
// Convert leading zeros too.
28
for (var i = 0; i < input.length; i++) {
29
if (input[i] == 0x00) {
30
chars.unshift(B58.alphabet[0]);
31
} else break;
32
}
33
34
return chars.join('');
35
},
36
37
/**
38
* Convert a base58-encoded string to a byte array.
39
*
40
* Written by Mike Hearn for BitcoinJ.
41
* Copyright (c) 2011 Google Inc.
42
*
43
* Ported to JavaScript by Stefan Thomas.
44
*/
45
decode: function (input) {
46
var bi = BigInteger.valueOf(0);
47
var leadingZerosNum = 0;
48
for (var i = input.length - 1; i >= 0; i--) {
49
var alphaIndex = B58.alphabet.indexOf(input[i]);
50
if (alphaIndex < 0) {
51
throw "Invalid character";
52
}
53
bi = bi.add(BigInteger.valueOf(alphaIndex)
54
.multiply(B58.base.pow(input.length - 1 - i)));
55
56
// This counts leading zero bytes
57
if (input[i] == "1") leadingZerosNum++;
58
else leadingZerosNum = 0;
59
}
60
var bytes = bi.toByteArrayUnsigned();
61
62
// Add leading zeros
63
while (leadingZerosNum-- > 0) bytes.unshift(0);
64
65
return bytes;
66
}
67
};
68
69
var B58 = Bitcoin.Base58;
70
})(
71
'undefined' != typeof Bitcoin ? Bitcoin : module.exports
72
);
73