Compare commits
12 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
72aefc03e0 | ||
![]() |
6ed51c86c4 | ||
![]() |
af91e78b98 | ||
![]() |
67e167930c | ||
![]() |
868b0300d8 | ||
![]() |
e87733f753 | ||
![]() |
834aad72d2 | ||
![]() |
6fbc3311db | ||
![]() |
ca08d645a4 | ||
![]() |
b282d5f16a | ||
![]() |
66fd8a2815 | ||
![]() |
37ec2b5600 |
17 changed files with 899 additions and 416 deletions
|
@ -15,19 +15,38 @@ https://bitcointalk.org/index.php?topic=43496.0
|
|||
Donation Address: 1NiNja1bUmhSoTXozBRBEtR8LeF9TGbZBN
|
||||
|
||||
END USER NOTES:
|
||||
1) To print QRCode in IE8 you must enable the "Print Background Colors and
|
||||
Images" checkbox on the "Page Setup" screen.
|
||||
2) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
|
||||
3) Requires IE8+, Firefox, Chrome or sufficient JavaScript support.
|
||||
4) Mobile Safari only works with iPhone4 or newer devices.
|
||||
1) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
|
||||
2) Requires IE9+, Firefox, Chrome or sufficient JavaScript support.
|
||||
3) Mobile Safari only works with iPhone4 or newer devices.
|
||||
Older devices timeout while executing JavaScript.
|
||||
5) DO NOT use Opera Mini it renders JavaScript output server side, therefore
|
||||
4) DO NOT use Opera Mini it renders JavaScript output server side, therefore
|
||||
they might record the private key you generated.
|
||||
6) Art Wallet does not work properly in IE8 due to CSS limitations.
|
||||
7) BIP38 most likely will not work on mobile devices due to hardware limitations.
|
||||
5) BIP38 most likely will not work on mobile devices due to hardware limitations.
|
||||
|
||||
Here is a signed list of file names and version history.
|
||||
|
||||
2016-12-23: status ACTIVE
|
||||
bitaddress.org-v3.3.0-SHA256-dec17c07685e1870960903d8f58090475b25af946fe95a734f88408cef4aa194.html
|
||||
- remove support for IE8
|
||||
- small translations updates for hu and pt-br
|
||||
|
||||
2016-11-27: status ACTIVE
|
||||
bitaddress.org-v3.2.3-SHA256-c9a0bb3ed50aa75a5ae9c606d81e3fd41a4ff686ad38ad5379e2402f481e79a4.html
|
||||
- wallet details: show error when checksum validation fails
|
||||
- wallet details: show error when private key outside of curve range
|
||||
|
||||
2016-08-21: status ACTIVE
|
||||
bitaddress.org-v3.2.2-SHA256-f4d047c264a2b71946de319482a9365e56d8d7289dd85a352da3b1448b7647df.html
|
||||
- version bump for unix line endings
|
||||
|
||||
2016-07-31: status ACTIVE
|
||||
bitaddress.org-v3.2.1-SHA256-42c3bcb643c451689e5bd1499ed4b516be2da06d2fe3886b0dd15b8fc2525ecd.html
|
||||
- BigInteger modInverse should be positive
|
||||
- throw if modInverse 0
|
||||
- improve BigInteger constructor so that it works if caller forgets 'new'
|
||||
- add unit tests for BigInteger
|
||||
- thanks to dooglus, jprichardson, dcousens
|
||||
|
||||
2016-02-19: status ACTIVE
|
||||
bitaddress.org-v3.2.0-SHA256-ad4fd171c647772aa76d0ce828731b01ca586596275d43a94008766b758e8736.html
|
||||
- switch languages without full page load
|
||||
|
|
|
@ -18,19 +18,38 @@ https://bitcointalk.org/index.php?topic=43496.0
|
|||
Donation Address: 1NiNja1bUmhSoTXozBRBEtR8LeF9TGbZBN
|
||||
|
||||
END USER NOTES:
|
||||
1) To print QRCode in IE8 you must enable the "Print Background Colors and
|
||||
Images" checkbox on the "Page Setup" screen.
|
||||
2) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
|
||||
3) Requires IE8+, Firefox, Chrome or sufficient JavaScript support.
|
||||
4) Mobile Safari only works with iPhone4 or newer devices.
|
||||
1) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
|
||||
2) Requires IE9+, Firefox, Chrome or sufficient JavaScript support.
|
||||
3) Mobile Safari only works with iPhone4 or newer devices.
|
||||
Older devices timeout while executing JavaScript.
|
||||
5) DO NOT use Opera Mini it renders JavaScript output server side, therefore
|
||||
4) DO NOT use Opera Mini it renders JavaScript output server side, therefore
|
||||
they might record the private key you generated.
|
||||
6) Art Wallet does not work properly in IE8 due to CSS limitations.
|
||||
7) BIP38 most likely will not work on mobile devices due to hardware limitations.
|
||||
5) BIP38 most likely will not work on mobile devices due to hardware limitations.
|
||||
|
||||
Here is a signed list of file names and version history.
|
||||
|
||||
2016-12-23: status ACTIVE
|
||||
bitaddress.org-v3.3.0-SHA256-dec17c07685e1870960903d8f58090475b25af946fe95a734f88408cef4aa194.html
|
||||
- remove support for IE8
|
||||
- small translations updates for hu and pt-br
|
||||
|
||||
2016-11-27: status ACTIVE
|
||||
bitaddress.org-v3.2.3-SHA256-c9a0bb3ed50aa75a5ae9c606d81e3fd41a4ff686ad38ad5379e2402f481e79a4.html
|
||||
- wallet details: show error when checksum validation fails
|
||||
- wallet details: show error when private key outside of curve range
|
||||
|
||||
2016-08-21: status ACTIVE
|
||||
bitaddress.org-v3.2.2-SHA256-f4d047c264a2b71946de319482a9365e56d8d7289dd85a352da3b1448b7647df.html
|
||||
- version bump for unix line endings
|
||||
|
||||
2016-07-31: status ACTIVE
|
||||
bitaddress.org-v3.2.1-SHA256-42c3bcb643c451689e5bd1499ed4b516be2da06d2fe3886b0dd15b8fc2525ecd.html
|
||||
- BigInteger modInverse should be positive
|
||||
- throw if modInverse 0
|
||||
- improve BigInteger constructor so that it works if caller forgets 'new'
|
||||
- add unit tests for BigInteger
|
||||
- thanks to dooglus, jprichardson, dcousens
|
||||
|
||||
2016-02-19: status ACTIVE
|
||||
bitaddress.org-v3.2.0-SHA256-ad4fd171c647772aa76d0ce828731b01ca586596275d43a94008766b758e8736.html
|
||||
- switch languages without full page load
|
||||
|
@ -321,11 +340,11 @@ bitaddress.org-v0.1-SHA1-f40e706490f3eb2be56c31ddbf4c8646cd51ef40.html
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1
|
||||
|
||||
iQEcBAEBAgAGBQJWx8DZAAoJEIdJe5Fjl09aFeEH/2wrQWW3YrDP1LuMfOEhydJ6
|
||||
4DsGN1hBRqR1qVzGWxFjwcHLrY95C0u+P0HI82riQF7+q+IKwU9KJWU2+ryfBTAG
|
||||
Px8CTMw2kL6lgk854UqbpdLvLiZUEgjpyiF2mtptlH4ruVFLzHmVe9CbjLU7GPOK
|
||||
Nni8oeYH5LWf5VUpSAZh6sGe39vfMQuEtREnpBcP+aJM8Mp5jwKHz2payWTNaTSa
|
||||
UXoYqY/ehQho3ILm0a5lEkGFyJC3ObJXRSiErGucFBDKM0SITlREfFEQDcRMvmrZ
|
||||
JaWrLi+dVmbMXXEVJZSoed5i1cOLA+byeay3UcDXcmz53PIAhSrZWFfMv22Re6M=
|
||||
=FiVM
|
||||
iQEcBAEBAgAGBQJYXsrGAAoJEIdJe5Fjl09aoeMH/jtuyhZTOsVcvR5AWlFDxCqe
|
||||
gEMXlBoss+ICZb+d394xkjqfczQwc8g3zg6CLmp13ftuqdC5BZSMEfZFb3Hj8fPo
|
||||
dGyRpNBpai19P6dt8g5BjQ/ZEejZrmQvNK8kCmmCf8fdBr95h09g0ZjQyLfLXUu2
|
||||
vzQBSNy1G9WL1xJmNhcRf6cn/wDQPDIKNUNDySuDPDNHWWUX4nswbggb4ae9Xmyg
|
||||
o9VhhCmkqgZ5Wd6f+AEXQVWe1uEaPmysRhaOHiw6DB6DpAZoeOG14LUQ/qTOtVFj
|
||||
nPrswwbrX3D2X0C+X0ZnZkFSkidj2MuPE53qnMa2NNMtzhvFS9cXP9i9xyiH6/w=
|
||||
=wZb6
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -9,7 +9,6 @@ module.exports = function (grunt) {
|
|||
input: "./src/bitaddress-ui.html",
|
||||
output: "./bitaddress.org.html",
|
||||
tokens: [
|
||||
{ token: "//array.map.js", file: "./src/array.map.js" },
|
||||
{ token: "//biginteger.js", file: "./src/biginteger.js" },
|
||||
{ token: "//bitcoinjs-lib.js", file: "./src/bitcoinjs-lib.js" },
|
||||
{ token: "//bitcoinjs-lib.address.js", file: "./src/bitcoinjs-lib.address.js" },
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
bitaddress.org
|
||||
# bitaddress.org
|
||||
JavaScript Client-Side Bitcoin Wallet Generator
|
||||
|
||||
Now Bitcoin addresses and their corresponding private key can be conveniently
|
||||
|
@ -18,16 +18,19 @@ Please send DONATIONS for this project to Bitcoin Address:
|
|||
1NiNja1bUmhSoTXozBRBEtR8LeF9TGbZBN
|
||||
|
||||
|
||||
END USER NOTES:
|
||||
1) To print QRCode in IE8 you must enable the "Print Background Colors and
|
||||
Images" checkbox on the "Page Setup" screen.
|
||||
2) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
|
||||
3) Requires IE8+, Firefox, Chrome or sufficient JavaScript support.
|
||||
4) Mobile Safari only works with iPhone4 or newer devices.
|
||||
END USER NOTES:
|
||||
|
||||
1) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
|
||||
|
||||
2) Requires IE9+, Firefox, Chrome or sufficient JavaScript support.
|
||||
|
||||
3) Mobile Safari only works with iPhone4 or newer devices.
|
||||
Older devices timeout while executing JavaScript.
|
||||
5) DO NOT use Opera Mini it renders JavaScript output server side, therefore
|
||||
|
||||
4) DO NOT use Opera Mini it renders JavaScript output server side, therefore
|
||||
they might record the private key you generated.
|
||||
6) Art Wallet does not work properly in IE8 due to CSS limitations.
|
||||
|
||||
5) BIP38 most likely will not work on mobile devices due to hardware limitations.
|
||||
|
||||
|
||||
Notice of Copyrights and Licenses:
|
||||
|
@ -44,15 +47,16 @@ throughout the document along with their licenses. Included JavaScript
|
|||
libraries are separated with HTML script tags.
|
||||
|
||||
Summary of JavaScript functions with a redistributable license:
|
||||
JavaScript function License
|
||||
------------------- --------------
|
||||
Array.prototype.map Public Domain
|
||||
window.Crypto BSD License
|
||||
window.SecureRandom BSD License
|
||||
window.EllipticCurve BSD License
|
||||
window.BigInteger BSD License
|
||||
window.QRCode MIT License
|
||||
window.Bitcoin MIT License
|
||||
|
||||
JavaScript function | License
|
||||
------------------- | --------------
|
||||
Array.prototype.map | Public Domain
|
||||
window.Crypto | BSD License
|
||||
window.SecureRandom | BSD License
|
||||
window.EllipticCurve | BSD License
|
||||
window.BigInteger | BSD License
|
||||
window.QRCode | MIT License
|
||||
window.Bitcoin | MIT License
|
||||
|
||||
The bitaddress.org software is available under The MIT License (MIT)
|
||||
Copyright (c) 2011-2013 bitaddress.org
|
|
@ -16,7 +16,6 @@
|
|||
Summary of JavaScript functions with a redistributable license:
|
||||
JavaScript function License
|
||||
******************* ***************
|
||||
Array.prototype.map Public Domain
|
||||
window.Crypto BSD License
|
||||
window.SecureRandom BSD License
|
||||
window.EllipticCurve BSD License
|
||||
|
@ -26,7 +25,7 @@
|
|||
window.Crypto_scrypt MIT License
|
||||
|
||||
The bitaddress.org software is available under The MIT License (MIT)
|
||||
Copyright (c) 2011-2013 bitaddress.org (pointbiz)
|
||||
Copyright (c) 2011-2016 bitaddress.org (pointbiz)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
|
@ -49,65 +48,6 @@
|
|||
<title>bitaddress.org</title>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<script type="text/javascript">
|
||||
// Array.prototype.map function is in the public domain.
|
||||
// Production steps of ECMA-262, Edition 5, 15.4.4.19
|
||||
// Reference: http://es5.github.com/#x15.4.4.19
|
||||
if (!Array.prototype.map) {
|
||||
Array.prototype.map = function (callback, thisArg) {
|
||||
var T, A, k;
|
||||
if (this == null) {
|
||||
throw new TypeError(" this is null or not defined");
|
||||
}
|
||||
// 1. Let O be the result of calling ToObject passing the |this| value as the argument.
|
||||
var O = Object(this);
|
||||
// 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
|
||||
// 3. Let len be ToUint32(lenValue).
|
||||
var len = O.length >>> 0;
|
||||
// 4. If IsCallable(callback) is false, throw a TypeError exception.
|
||||
// See: http://es5.github.com/#x9.11
|
||||
if ({}.toString.call(callback) != "[object Function]") {
|
||||
throw new TypeError(callback + " is not a function");
|
||||
}
|
||||
// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
|
||||
if (thisArg) {
|
||||
T = thisArg;
|
||||
}
|
||||
// 6. Let A be a new array created as if by the expression new Array(len) where Array is
|
||||
// the standard built-in constructor with that name and len is the value of len.
|
||||
A = new Array(len);
|
||||
// 7. Let k be 0
|
||||
k = 0;
|
||||
// 8. Repeat, while k < len
|
||||
while (k < len) {
|
||||
var kValue, mappedValue;
|
||||
// a. Let Pk be ToString(k).
|
||||
// This is implicit for LHS operands of the in operator
|
||||
// b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
|
||||
// This step can be combined with c
|
||||
// c. If kPresent is true, then
|
||||
if (k in O) {
|
||||
// i. Let kValue be the result of calling the Get internal method of O with argument Pk.
|
||||
kValue = O[k];
|
||||
// ii. Let mappedValue be the result of calling the Call internal method of callback
|
||||
// with T as the this value and argument list containing kValue, k, and O.
|
||||
mappedValue = callback.call(T, kValue, k, O);
|
||||
// iii. Call the DefineOwnProperty internal method of A with arguments
|
||||
// Pk, Property Descriptor {Value: mappedValue, Writable: true, Enumerable: true, Configurable: true},
|
||||
// and false.
|
||||
// In browsers that support Object.defineProperty, use the following:
|
||||
// Object.defineProperty(A, Pk, { value: mappedValue, writable: true, enumerable: true, configurable: true });
|
||||
// For best browser support, use the following:
|
||||
A[k] = mappedValue;
|
||||
}
|
||||
// d. Increase k by 1.
|
||||
k++;
|
||||
}
|
||||
// 9. return A
|
||||
return A;
|
||||
};
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
/*!
|
||||
* Crypto-JS v2.5.4 Crypto.js
|
||||
|
@ -2878,8 +2818,12 @@ exports.init();
|
|||
})(typeof module !== 'undefined' && module['exports'] ? module['exports'] : (window['secrets'] = {}), typeof GLOBAL !== 'undefined' ? GLOBAL : window );
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
// Upstream 'BigInteger' here:
|
||||
// Original Author: http://www-cs-students.stanford.edu/~tjw/jsbn/
|
||||
// Follows 'jsbn' on Github: https://github.com/jasondavies/jsbn
|
||||
// Review and Testing: https://github.com/cryptocoinjs/bigi/
|
||||
/*!
|
||||
* Basic JavaScript BN library - subset useful for RSA encryption. v1.3
|
||||
* Basic JavaScript BN library - subset useful for RSA encryption. v1.4
|
||||
*
|
||||
* Copyright (c) 2005 Tom Wu
|
||||
* All Rights Reserved.
|
||||
|
@ -2887,13 +2831,16 @@ exports.init();
|
|||
* http://www-cs-students.stanford.edu/~tjw/jsbn/LICENSE
|
||||
*
|
||||
* Copyright Stephan Thomas
|
||||
* Copyright bitaddress.org
|
||||
* Copyright pointbiz
|
||||
*/
|
||||
|
||||
(function () {
|
||||
|
||||
// (public) Constructor function of Global BigInteger object
|
||||
var BigInteger = window.BigInteger = function BigInteger(a, b, c) {
|
||||
if (!(this instanceof BigInteger))
|
||||
return new BigInteger(a, b, c);
|
||||
|
||||
if (a != null)
|
||||
if ("number" == typeof a) this.fromNumber(a, b, c);
|
||||
else if (b == null && "string" != typeof a) this.fromString(a, 256);
|
||||
|
@ -3824,6 +3771,7 @@ exports.init();
|
|||
// (public) 1/this % m (HAC 14.61)
|
||||
BigInteger.prototype.modInverse = function (m) {
|
||||
var ac = m.isEven();
|
||||
if (this.signum() === 0) throw new Error('division by zero');
|
||||
if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
|
||||
var u = m.clone(), v = this.clone();
|
||||
var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
|
||||
|
@ -3858,9 +3806,9 @@ exports.init();
|
|||
}
|
||||
}
|
||||
if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
|
||||
if (d.compareTo(m) >= 0) return d.subtract(m);
|
||||
if (d.signum() < 0) d.addTo(m, d); else return d;
|
||||
if (d.signum() < 0) return d.add(m); else return d;
|
||||
while (d.compareTo(m) >= 0) d.subTo(m, d);
|
||||
while (d.signum() < 0) d.addTo(m, d);
|
||||
return d;
|
||||
};
|
||||
|
||||
|
||||
|
@ -5712,19 +5660,23 @@ Bitcoin.ECKey = (function () {
|
|||
this.priv = BigInteger.fromByteArrayUnsigned(input);
|
||||
} else if ("string" == typeof input) {
|
||||
var bytes = null;
|
||||
if (ECKey.isWalletImportFormat(input)) {
|
||||
bytes = ECKey.decodeWalletImportFormat(input);
|
||||
} else if (ECKey.isCompressedWalletImportFormat(input)) {
|
||||
bytes = ECKey.decodeCompressedWalletImportFormat(input);
|
||||
this.compressed = true;
|
||||
} else if (ECKey.isMiniFormat(input)) {
|
||||
bytes = Crypto.SHA256(input, { asBytes: true });
|
||||
} else if (ECKey.isHexFormat(input)) {
|
||||
bytes = Crypto.util.hexToBytes(input);
|
||||
} else if (ECKey.isBase64Format(input)) {
|
||||
bytes = Crypto.util.base64ToBytes(input);
|
||||
try{
|
||||
if (ECKey.isWalletImportFormat(input)) {
|
||||
bytes = ECKey.decodeWalletImportFormat(input);
|
||||
} else if (ECKey.isCompressedWalletImportFormat(input)) {
|
||||
bytes = ECKey.decodeCompressedWalletImportFormat(input);
|
||||
this.compressed = true;
|
||||
} else if (ECKey.isMiniFormat(input)) {
|
||||
bytes = Crypto.SHA256(input, { asBytes: true });
|
||||
} else if (ECKey.isHexFormat(input)) {
|
||||
bytes = Crypto.util.hexToBytes(input);
|
||||
} else if (ECKey.isBase64Format(input)) {
|
||||
bytes = Crypto.util.base64ToBytes(input);
|
||||
}
|
||||
} catch (exc1) {
|
||||
this.setError(exc1);
|
||||
}
|
||||
|
||||
|
||||
if (ECKey.isBase6Format(input)) {
|
||||
this.priv = new BigInteger(input, 6);
|
||||
} else if (bytes == null || bytes.length != 32) {
|
||||
|
@ -5736,7 +5688,21 @@ Bitcoin.ECKey = (function () {
|
|||
}
|
||||
|
||||
this.compressed = (this.compressed == undefined) ? !!ECKey.compressByDefault : this.compressed;
|
||||
KeyPool.push(this);
|
||||
try {
|
||||
// check not zero
|
||||
if (this.priv != null && BigInteger.ZERO.compareTo(this.priv) == 0) this.setError("Error: BigInteger equal to zero.");
|
||||
// valid range [0x1, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140])
|
||||
var hexKeyRangeLimit = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140";
|
||||
var rangeLimitBytes = Crypto.util.hexToBytes(hexKeyRangeLimit);
|
||||
var limitBigInt = BigInteger.fromByteArrayUnsigned(rangeLimitBytes);
|
||||
if (this.priv != null && limitBigInt.compareTo(this.priv) < 0) this.setError("Error: BigInteger outside of curve range.")
|
||||
|
||||
if (this.priv != null) {
|
||||
KeyPool.push(this);
|
||||
}
|
||||
} catch (exc2) {
|
||||
this.setError(exc2);
|
||||
}
|
||||
};
|
||||
|
||||
ECKey.privateKeyPrefix = 0x80; // mainnet 0x80 testnet 0xEF
|
||||
|
@ -5746,6 +5712,15 @@ Bitcoin.ECKey = (function () {
|
|||
*/
|
||||
ECKey.compressByDefault = false;
|
||||
|
||||
/**
|
||||
* Set whether the public key should be returned compressed or not.
|
||||
*/
|
||||
ECKey.prototype.setError = function (err) {
|
||||
this.error = err;
|
||||
this.priv = null;
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set whether the public key should be returned compressed or not.
|
||||
*/
|
||||
|
@ -6528,11 +6503,6 @@ input[type=checkbox] { position: relative; z-index: 20; }
|
|||
#busyblock.busy { display: block; }
|
||||
.hide { display: none; }
|
||||
.show { display: block; }
|
||||
|
||||
/* IE8 */
|
||||
.qrcodetable { border-width: 0px; border-style: none; border-color: #0000ff; border-collapse: collapse; }
|
||||
.qrcodetddark { border-width: 0px; border-style: none; border-color: #0000ff; border-collapse: collapse; padding: 0; margin: 0; width: 2px; height: 2px; background-color: #000000; }
|
||||
.qrcodetdlight { border-width: 0px; border-style: none; border-color: #0000ff; border-collapse: collapse; padding: 0; margin: 0; width: 2px; height: 2px; background-color: #ffffff; }
|
||||
|
||||
@media screen
|
||||
{
|
||||
|
@ -7025,7 +6995,7 @@ input[type=checkbox] { position: relative; z-index: 20; }
|
|||
<div class="tooltip" id="statusprotocolbad">
|
||||
<span class="statuswarn" id="statuslabelprotocolbad">⚠ Think twice!</span>
|
||||
<span id="statuslabelprotocolbad1">You appear to be running this generator online from a live website. For valuable wallets it is recommended to</span>
|
||||
<a id="statuslabelprotocolbad2" href="https://github.com/pointbiz/bitaddress.org/archive/v3.2.0.zip">download</a>
|
||||
<a id="statuslabelprotocolbad2" href="https://github.com/pointbiz/bitaddress.org/archive/v3.3.0.zip">download</a>
|
||||
<span id="statuslabelprotocolbad3">the zip file from GitHub and run this generator offline as a local html file.</span>
|
||||
<br /><br /><input type="button" value="OK" class="button" id="statusokprotocolbad" onclick="document.getElementById('statusprotocolbad').style.display = 'none';" />
|
||||
</div>
|
||||
|
@ -7050,12 +7020,12 @@ input[type=checkbox] { position: relative; z-index: 20; }
|
|||
<span class="item"><span id="footerlabeldonations">Donations:</span> <b>1NiNja</b>1bUmhSoTXozBRBEtR8LeF9TGbZBN</span>
|
||||
<span class="item" id="footerlabeltranslatedby"></span>
|
||||
<span class="item"><a href="https://github.com/pointbiz/bitaddress.org" target="_blank" id="footerlabelgithub">GitHub Repository</a>
|
||||
(<a href="https://github.com/pointbiz/bitaddress.org/archive/v3.2.0.zip" target="_blank" id="footerlabelgithubzip">zip</a>)</span>
|
||||
(<a href="https://github.com/pointbiz/bitaddress.org/archive/v3.3.0.zip" target="_blank" id="footerlabelgithubzip">zip</a>)</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="authorpgp">
|
||||
<span class="item">
|
||||
<a href="CHANGELOG.txt.asc" target="_blank"><span id="footerlabelversion">Version History</span> (3.2.0)</a>
|
||||
<a href="CHANGELOG.txt.asc" target="_blank"><span id="footerlabelversion">Version History</span> (3.3.0)</a>
|
||||
|
||||
</span>
|
||||
<span class="item">527B 5C82 B1F6 B2DB 72A0<br />ECBF 8749 7B91 6397 4F5A</span>
|
||||
|
@ -7592,29 +7562,7 @@ ninja.publicKey = {
|
|||
return canvas;
|
||||
},
|
||||
|
||||
// generate a QRCode and return it's representation as an Html table
|
||||
createTableHtml: function (text) {
|
||||
var typeNumber = qrC.getTypeNumber(text);
|
||||
var qr = new QRCode(typeNumber, QRCode.ErrorCorrectLevel.H);
|
||||
qr.addData(text);
|
||||
qr.make();
|
||||
var tableHtml = "<table class='qrcodetable'>";
|
||||
for (var r = 0; r < qr.getModuleCount() ; r++) {
|
||||
tableHtml += "<tr>";
|
||||
for (var c = 0; c < qr.getModuleCount() ; c++) {
|
||||
if (qr.isDark(r, c)) {
|
||||
tableHtml += "<td class='qrcodetddark'/>";
|
||||
} else {
|
||||
tableHtml += "<td class='qrcodetdlight'/>";
|
||||
}
|
||||
}
|
||||
tableHtml += "</tr>";
|
||||
}
|
||||
tableHtml += "</table>";
|
||||
return tableHtml;
|
||||
},
|
||||
|
||||
// show QRCodes with canvas OR table (IE8)
|
||||
// show QRCodes with canvas
|
||||
// parameter: keyValuePair
|
||||
// example: { "id1": "string1", "id2": "string2"}
|
||||
// "id1" is the id of a div element where you want a QRCode inserted.
|
||||
|
@ -7628,10 +7576,7 @@ ninja.publicKey = {
|
|||
document.getElementById(key).appendChild(qrC.createCanvas(value, sizeMultiplier));
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
// for browsers that do not support canvas (IE8)
|
||||
document.getElementById(key).innerHTML = qrC.createTableHtml(value);
|
||||
}
|
||||
catch (e) { }
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -8779,8 +8724,8 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
"brainalertpassphrasetooshort": "A megadott jelmondat túl rövid.\n\n",
|
||||
"brainalertpassphrasewarning": "Figyelem: Fontos, hogy erős jelmondatot válasszon, mert különben a jelmondatot nyers erővel feltörhetik és a bitcoinjait ellophatják.",
|
||||
"brainalertpassphrasedoesnotmatch": "A jelmondat és az ellenőrző jelmondat nem azonos.",
|
||||
"detailalertnotvalidprivatekey": "A beadott szöveg nem érvénytelen Privát Kulcs",
|
||||
"detailconfirmsha256": "Az ön által beadott szöveg érvénytelen Privát Kulcs!\n\nSzeretné a beadott szöveget jelmondatként kezelni, és annak SHA256 zanzájából egy Privát Kulcsot előállítani?\n\nFigyelem: Fontos, hogy erős jelmondatot válasszon, mert különben a jelmondatot nyers erővel feltörhetik és a bitcoinjait ellophatják.",
|
||||
"detailalertnotvalidprivatekey": "A megadott szöveg nem érvényes Privát Kulcs",
|
||||
"detailconfirmsha256": "Az ön által megadott szöveg érvénytelen Privát Kulcs!\n\nSzeretné a megadott szöveget jelmondatként kezelni, és annak SHA256 zanzájából egy Privát Kulcsot előállítani?\n\nFigyelem: Fontos, hogy erős jelmondatot válasszon, mert különben a jelmondatot nyers erővel feltörhetik és a bitcoinjait ellophatják.",
|
||||
"bip38alertincorrectpassphrase": "Érvénytelen jelmondat a titkosított privát kulcshoz.",
|
||||
"bip38alertpassphraserequired": "A BIP38 kulcshoz jelmondat szükséges",
|
||||
"vanityinvalidinputcouldnotcombinekeys": "Érvénytelen bemenet. A kulcsok nem tartoznak össsze.",
|
||||
|
@ -8790,7 +8735,7 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
"vanityalertinvalidinputprivatekeysmatch": "Érvénytelen bemenet. A két megadott privát kulcs azonos. Két különböző kulcs bevitelére van szükség.",
|
||||
|
||||
// header and menu html
|
||||
"tagline": "Nyílt forráskódú, kliens oldali JavaScript, Bitcoin pénztárca előállítására",
|
||||
"tagline": "Nyílt forráskódú, ügyfél oldali JavaScript Bitcoin tárca készítő program",
|
||||
"generatelabelbitcoinaddress": "A bitcoin cím előállítása...",
|
||||
"generatelabelmovemouse": "MOZGASSA az egeret, ha fokozni szeretné a véletlenszerűséget...",
|
||||
"generatelabelkeypress": "VAGY gépeljen be néhány véletlenszerű karaktert ebbe a szövegdobozba",
|
||||
|
@ -8799,7 +8744,7 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
"bulkwallet": "Tömeges pénztárca",
|
||||
"brainwallet": "Fejben tartott pénztárca",
|
||||
"vanitywallet": "Kérkedő pénztárca",
|
||||
"splitwallet": "Részekre bontott ~",
|
||||
"splitwallet": "Felosztott tárca",
|
||||
"detailwallet": "A pénztárca részletei",
|
||||
|
||||
// footer html
|
||||
|
@ -8815,39 +8760,39 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
"footerlabelnowarranty": "Garancia nincs.",
|
||||
|
||||
// status html
|
||||
"statuslabelcryptogood": "✔ Good!", //TODO: please translate
|
||||
"statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate
|
||||
"statusokcryptogood": "OK", //TODO: please translate
|
||||
"statuslabelcryptobad": "× Oh no!", //TODO: please translate
|
||||
"statuslabelcryptobad1": "Your browser does NOT support window.crypto.getRandomValues. You should use a more modern browser with this generator to increase the security of the keys generated.",
|
||||
"statusokcryptobad": "OK", //TODO: please translate
|
||||
"statuslabelunittestsgood": "✔ Good!", //TODO: please translate
|
||||
"statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate
|
||||
"statusokunittestsgood": "OK", //TODO: please translate
|
||||
"statuslabelunittestsbad": "× Oh no!", //TODO: please translate
|
||||
"statuslabelunittestsbad1": "Some synchronous unit tests DID NOT pass. You should find another browser to use with this generator.", //TODO: please translate
|
||||
"statusokunittestsbad": "OK", //TODO: please translate
|
||||
"statuslabelprotocolgood": "✔ Good!", //TODO: please translate
|
||||
"statuslabelprotocolgood1": "You are running this generator from your local computer. <br />Tip: Double check you are offline by trying ", //TODO: please translate
|
||||
"statusokprotocolgood": "OK", //TODO: please translate
|
||||
"statuslabelprotocolbad": "⚠ Think twice!", //TODO: please translate
|
||||
"statuslabelprotocolbad1": "You appear to be running this generator online from a live website. For valuable wallets it is recommended to", //TODO: please translate
|
||||
"statuslabelprotocolbad2": "download", //TODO: please translate
|
||||
"statuslabelprotocolbad3": "the zip file from GitHub and run this generator offline as a local html file.", //TODO: please translate
|
||||
"statusokprotocolbad": "OK", //TODO: please translate
|
||||
"statuslabelkeypool1": "This is a log of all the Bitcoin Addresses and Private Keys you generated during your current session. Reloading the page will create a new session.", //TODO: please translate
|
||||
"statuskeypoolrefresh": "Refresh", //TODO: please translate
|
||||
"statusokkeypool": "OK", //TODO: please translate
|
||||
"statuslabelcryptogood": "✔ Helyes!",
|
||||
"statuslabelcryptogood1": "A böngészője képes kriptográfiai szempontból véletlen kulcsok generálására (a window.crypto.getRandomValues metódus támogatott)",
|
||||
"statusokcryptogood": "Rendben",
|
||||
"statuslabelcryptobad": "× Ó jaj!",
|
||||
"statuslabelcryptobad1": "Böngészője NEM támogatja a window.crypto.getRandomValues metódust. A metódust támogató, modernebb böngészőt kell használnia, ha növelni szeretné a generált kulcsok biztonsági szintjét!",
|
||||
"statusokcryptobad": "Rendben",
|
||||
"statuslabelunittestsgood": "✔ Helyes!",
|
||||
"statuslabelunittestsgood1": "Minden szinkron unit-teszt sikeres.",
|
||||
"statusokunittestsgood": "Rendben",
|
||||
"statuslabelunittestsbad": "× Ó, jaj!",
|
||||
"statuslabelunittestsbad1": "Néhány szinkron unit-teszt NEM volt sikeres. Jobb, ha egy másik böngészőt használ ehhez a generátorhoz!",
|
||||
"statusokunittestsbad": "Rendben",
|
||||
"statuslabelprotocolgood": "✔ Helyes!",
|
||||
"statuslabelprotocolgood1": "Ezt a generátort a helyi gépről futtatja. <br />Tipp: Győzdjön meg róla, hogy nem kapcsolódik a hálózatra: ",
|
||||
"statusokprotocolgood": "Rendben",
|
||||
"statuslabelprotocolbad": "⚠ Gondolja át!",
|
||||
"statuslabelprotocolbad1": "A jelek szerint élő honlapról futtatja a generátort. Használható tárcák készítéséhez javasoljuk, hogy ",
|
||||
"statuslabelprotocolbad2": "töltse le",
|
||||
"statuslabelprotocolbad3": "a GitHub-on található zip állományt és futtassa a generátort offline módban, helyi html állományként.",
|
||||
"statusokprotocolbad": "Rendben",
|
||||
"statuslabelkeypool1": "Az ügymenet során készített valamennyi Bitcoin cím és privát kulcs naplója. A lap újratöltésével új ügymenetet indíthat.",
|
||||
"statuskeypoolrefresh": "Frissítés",
|
||||
"statusokkeypool": "Rendben",
|
||||
|
||||
// single wallet html
|
||||
"newaddress": "Új cím előállítása",
|
||||
"singleprint": "Nyomtatás",
|
||||
"singlelabelbitcoinaddress": "Bitcoin cím:",
|
||||
"singlelabelprivatekey": "Privát kulcs (WIF, tárca import formátumban):",
|
||||
"singletip1": "<b>Egy bitcoin pénztárca</b> nem más, mint egy bitcoin címből és a hozzá tartozó privát kulcsból álló számpár. Egy ilyen pénztárcát állítottunk elő és jelenítettünk meg fent az Ön számára a Web böngészőben.",
|
||||
"singletip2": "<b>A pénztárca biztonságos megőrzése</b> érdekében nyomtassa ki vagy más módon rögzítse a bitcoin címet és privát kulcsot. Fontos, hogy a privát kulcsból készítsen másolatot, és tárolja biztonságos helyen. Ez a webhely nem tud az ön privát kulcsairól. Ha ismeri a PGP-t, akkor egyben letöltheti az egész web lapot, és ellenőrizheti, hogy a webhely szerzője álatal írt valódi változatot töltötte-e le. Ehhez össze kell hasonlítania a HTML-ből képzett SHA256 zanzát a webhely láblécében hivatkozott, aláírt verzió történetben lévő SHA256 zanzával. Ha elhagyja/megfrissíti a webhelyet vagy megnyomja az 'Új cím előállítása' gombot, akkor egy új privát kulcs áll elő, és az előzőleg megjelenített privát kulcs elvész. A bitcoin címhez tartozó privát kulcsot titokban kell tartani. Bárki, aki megszerzi ezt a kulcsot, el tudja költeni az ehhez a címhez tartozó összes bitcoint. Ha kinyomtatja a pénztárcát, akkor tárolja egy villámzáras vízhatlan nylon-zacskóban. A papír pénztárcát tekintse úgy, mintha pénz lenne.",
|
||||
"singlelabelprivatekey": "Privát kulcs:",
|
||||
"singletip1": "<b>A bitcoin pénztárca</b> nem más, mint egy bitcoin címből és a hozzá tartozó privát kulcsból álló számpár. Egy ilyen pénztárcát állítottunk elő és jelenítettünk meg fent az Ön számára a Web böngészőben.",
|
||||
"singletip2": "<b>A pénztárca biztonságos megőrzése</b> érdekében nyomtassa ki vagy más módon rögzítse a bitcoin címet és privát kulcsot. Fontos, hogy a privát kulcsból készítsen másolatot, és tárolja biztonságos helyen. Ez a webhely nem tárol az ön privát kulcsaival kapcsolatos információt. Ha ismeri a PGP-t, akkor egyben letöltheti az egész honlapot, és ellenőrizheti, hogy a webhely szerzője álatal írt valódi változatot töltötte-e le. Ehhez össze kell hasonlítania a HTML-ből képzett SHA256 zanzát a webhely láblécében hivatkozott, digitálisan aláírt verzió történetben lévő SHA256 zanzával. Amennyiben elhagyja vagy frissíti a webhelyet illetve megnyomja az 'Új cím előállítása' gombot, akkor új privát kulcs készül és az előzőleg megjelenített privát kulcs elvész. A bitcoin címhez tartozó privát kulcsot titokban kell tartani. Bárki, aki megszerzi ezt a kulcsot, el tudja költeni a címhez tartozó valamennyi bitcoint. Ha kinyomtatja a pénztárcát, akkor tárolja egy villámzáras vízhatlan nejlonzacskóban. A papírtárcát kezelje úgy, mintha pénz lenne.",
|
||||
"singletip3": "<b>Pénzt úgy tehet</b> a pénztárcájába, hogy másokkal bitcoinokat küldet erre a Bitcoin címre.",
|
||||
"singletip4": "<b>A pénztárca egyenlegét</b> úgy kérdezheti le, hogy elmegy a blockchain.info vagy a blockexplorer.com weblapokra, és ott beadja ezt a Bitcoin címet.",
|
||||
"singletip4": "<b>A pénztárca egyenlegét</b> úgy kérdezheti le, hogy elmegy a blockchain.info vagy a blockexplorer.com weblapokra, és ott begépeli ezt a Bitcoin címet.",
|
||||
"singletip5": "<b>Ha el akarja költeni a bitcoinjait,</b> akkor menjen a blockchain.info weblapra, és a privát kulcson lévő teljes egyenleget töltse át (sweep) a weblapon lévő számlájára. A pénzt úgy is elköltheti, hogy letölti valamelyik népszerű p2p bitcoin klienst, és beimportálja a privát kulcsot a p2p kliens pénztárcájába. Ne feledje, hogy miután beimportálta a kulcsot a p2p bitcoin kliensbe, a kulcsot a p2p kliens a pénztárcában lévő többi kulccsal együtt tárolja. Pénz küldésekor a visszajáró pénzt a p2p kliens pénztárcájában lévő másik bitcoin címre fogják küldeni. Ekkor biztonsági másolatot kell készítenie a p2p kliens pénztárcáról, és a másolatot biztos helyen kell őriznie, mivel a maradék bitcoinjait a pénztárca kulcsai tárolják. Satoshi tanácsa, hogy pénztárcát soha ne töröljünk.",
|
||||
|
||||
// paper wallet html
|
||||
|
@ -8935,11 +8880,12 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
"detaillabelprivmini": "Mini formátumú Privát Kulcs (22, 26 vagy 30 karakter, amely egy 'S'-sel kezdődik):",
|
||||
"detaillabelpassphrase": "BIP38 jelmondat",
|
||||
"detailbip38decryptbutton": "BIP38 dekódolás",
|
||||
"detailbip38encryptbutton": "Encrypt BIP38", //TODO: please translate
|
||||
"detailbip38encryptbutton": "BIP38 titkosítás",
|
||||
"detaillabelq1": "Hogyan lehet dobókockával pénztárcát készíteni? Mit jelent a B6 formátum?",
|
||||
"detaila1": "Egy Bitcoin pénztárca előállításakor nagyon fontos, hogy a felhasznált véletlen számok valóban véletlenek legyenek. A fizikai véletlen jobb, mint a számítógéppel előállított pszeudo-véletlen. Fizikai véletlen a legegyszerűbben egy dobókockával állítható elő. Ha szeretne egy Bitcoin privát címet előállítani, akkor csupán egy dobókockára van szüksége, mellyel 99-szer kell dobni. Jegyezze fel minden egyes dobása eredményét. Az eredmények feljegyzésekor a következő szabályokat kövesse: 1->1, 2->2, 3->3, 4->4, 5->5, 6->0. Ha így tesz, akkor a privát kulcshoz tartozó véletlen számot B6 formátumban, vagyis 6-os számrendszerben rögzíti. Írja be ezt a 99 karakterből álló 6-os számrendszerbeli privát kulcsot a fenti szövegmezőbe, majd nyomja meg a 'Részletek megjelenítése' gombot. Ekkor megjelenik az a Bitcoin cím, amely ehhez a privát kulcshoz tartozik. Érdemes felírni a WIF formátumú privát kulcsot is, mivel ezt szélesebb körben használják."
|
||||
"detaila1": "A Bitcoin pénztárca előállításakor nagyon fontos, hogy a felhasznált véletlen számok valóban véletlenek legyenek. A fizikai véletlen jobb, mint a számítógéppel előállított pszeudo-véletlen. Fizikai véletlen a legegyszerűbben egy dobókockával állítható elő. Ha szeretne egy Bitcoin privát címet előállítani, akkor csupán egy dobókockára van szüksége, mellyel 99-szer kell dobni. Jegyezze fel minden egyes dobása eredményét. Az eredmények feljegyzésekor a következő szabályokat kövesse: 1->1, 2->2, 3->3, 4->4, 5->5, 6->0. Ha így tesz, akkor a privát kulcshoz tartozó véletlen számot B6 formátumban, vagyis 6-os számrendszerben rögzíti. Írja be ezt a 99 karakterből álló 6-os számrendszerbeli privát kulcsot a fenti szövegmezőbe, majd nyomja meg a 'Részletek megjelenítése' gombot. Ekkor megjelenik az a Bitcoin cím, amely ehhez a privát kulcshoz tartozik. Érdemes felírni a WIF formátumú privát kulcsot is, mivel ezt szélesebb körben használják."
|
||||
};
|
||||
})(ninja.translator);
|
||||
|
||||
(function (translator) {
|
||||
translator.translations["it"] = {
|
||||
// javascript alerts or messages
|
||||
|
@ -9282,21 +9228,21 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
(function (translator) {
|
||||
translator.translations["pt-br"] = {
|
||||
// javascript alerts or messages
|
||||
"testneteditionactivated": "EDIÇÃO DO TESTNET ATIVADA",
|
||||
"testneteditionactivated": "EDIÇÃO DA TESTNET ATIVADA",
|
||||
"paperlabelbitcoinaddress": "Endereço Bitcoin:",
|
||||
"paperlabelprivatekey": "Chave privada:",
|
||||
"paperlabelencryptedkey": "Chave privada criptografada (Senha necessária)",
|
||||
"bulkgeneratingaddresses": "Generando endereços... ",
|
||||
"bulkgeneratingaddresses": "Gerando endereços... ",
|
||||
"brainalertpassphrasetooshort": "A senha introduzida é pequena demais.\n\n",
|
||||
"brainalertpassphrasewarning": "Aviso: É importante que escolha uma senha forte, para evitar ataques de força bruta que tentem adivinhar sua senha e roubar seus bitcoins.",
|
||||
"brainalertpassphrasewarning": "Aviso: É importante que você escolha uma senha forte, para evitar ataques de força bruta que tentem adivinhar sua senha e roubar seus bitcoins.",
|
||||
"brainalertpassphrasedoesnotmatch": "As senhas digitadas não são iguais.",
|
||||
"detailalertnotvalidprivatekey": "O texto que você digitou não é uma chave privada válida",
|
||||
"detailconfirmsha256": "O texto que você digitou não é uma chave privada válida\n\nQuer usar esse texto como se fosse uma senha e gerar uma chave privada usando um hash SHA256 dessa senha?\n\nAviso: É importante escolher uma senha forte para evitar ataques de força bruta que tentem adivinhá-la e roubar seus bitcoins.",
|
||||
"detailconfirmsha256": "O texto que você digitou não é uma chave privada válida\n\nDeseja usar esse texto como se fosse uma senha e gerar uma chave privada usando um hash SHA256 dessa senha?\n\nAviso: É importante escolher uma senha forte para evitar ataques de força bruta que tentem adivinhá-la e roubar seus bitcoins.",
|
||||
"bip38alertincorrectpassphrase": "Senha incorreta para essa chave privada criptografada.",
|
||||
"bip38alertpassphraserequired": "Senha necessária para a chave BIP38",
|
||||
"vanityinvalidinputcouldnotcombinekeys": "Entrada inválida. Não foi possível combinar as chaves.",
|
||||
"vanityalertinvalidinputpublickeysmatch": "Entrada inválida. As chaves públicas de ambas entradas são iguais. Você deve inserir duas chaves diferentes.",
|
||||
"vanityalertinvalidinputcannotmultiple": "Entrada inválida. Não é possível multiplicar duas chaves públicas. Clique em 'Somar' para somar duas chaves públicas para adquirir um endereço bitcoin.",
|
||||
"vanityalertinvalidinputpublickeysmatch": "Entrada inválida. As chaves públicas de ambas as entradas são iguais. Você deve inserir duas chaves diferentes.",
|
||||
"vanityalertinvalidinputcannotmultiple": "Entrada inválida. Não é possível multiplicar duas chaves públicas. Clique em 'Somar' e some duas chaves públicas para adquirir um endereço bitcoin.",
|
||||
"vanityprivatekeyonlyavailable": "Disponível apenas quando se combinam duas chaves privadas",
|
||||
"vanityalertinvalidinputprivatekeysmatch": "Entrada inválida. As chaves privadas de ambas as entradas são iguais. Você deve inserir duas chaves diferentes.",
|
||||
|
||||
|
@ -9310,7 +9256,7 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
"bulkwallet": "Múltiplos endereços",
|
||||
"brainwallet": "Carteira mental",
|
||||
"vanitywallet": "Carteira personalizada",
|
||||
"splitwallet": "Split Wallet", //TODO: please translate
|
||||
"splitwallet": "Carteira fracionada",
|
||||
"detailwallet": "Detalhes da carteira",
|
||||
|
||||
// footer html
|
||||
|
@ -9326,42 +9272,42 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
"footerlabelnowarranty": "Sem garantia.",
|
||||
|
||||
// status html
|
||||
"statuslabelcryptogood": "✔ Good!", //TODO: please translate
|
||||
"statuslabelcryptogood": "✔ Boa!",
|
||||
"statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate
|
||||
"statusokcryptogood": "OK", //TODO: please translate
|
||||
"statuslabelcryptobad": "× Oh no!", //TODO: please translate
|
||||
"statusokcryptogood": "OK",
|
||||
"statuslabelcryptobad": "× Oh não!",
|
||||
"statuslabelcryptobad1": "Your browser does NOT support window.crypto.getRandomValues. You should use a more modern browser with this generator to increase the security of the keys generated.",
|
||||
"statusokcryptobad": "OK", //TODO: please translate
|
||||
"statuslabelunittestsgood": "✔ Good!", //TODO: please translate
|
||||
"statusokcryptobad": "OK",
|
||||
"statuslabelunittestsgood": "✔ Boa!",
|
||||
"statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate
|
||||
"statusokunittestsgood": "OK", //TODO: please translate
|
||||
"statuslabelunittestsbad": "× Oh no!", //TODO: please translate
|
||||
"statusokunittestsgood": "OK",
|
||||
"statuslabelunittestsbad": "× Oh não!",
|
||||
"statuslabelunittestsbad1": "Some synchronous unit tests DID NOT pass. You should find another browser to use with this generator.", //TODO: please translate
|
||||
"statusokunittestsbad": "OK", //TODO: please translate
|
||||
"statuslabelprotocolgood": "✔ Good!", //TODO: please translate
|
||||
"statusokunittestsbad": "OK",
|
||||
"statuslabelprotocolgood": "✔ Boa!",
|
||||
"statuslabelprotocolgood1": "You are running this generator from your local computer. <br />Tip: Double check you are offline by trying ", //TODO: please translate
|
||||
"statusokprotocolgood": "OK", //TODO: please translate
|
||||
"statuslabelprotocolbad": "⚠ Think twice!", //TODO: please translate
|
||||
"statusokprotocolgood": "OK",
|
||||
"statuslabelprotocolbad": "⚠ Pense duas vezes!",
|
||||
"statuslabelprotocolbad1": "You appear to be running this generator online from a live website. For valuable wallets it is recommended to", //TODO: please translate
|
||||
"statuslabelprotocolbad2": "download", //TODO: please translate
|
||||
"statuslabelprotocolbad2": "download",
|
||||
"statuslabelprotocolbad3": "the zip file from GitHub and run this generator offline as a local html file.", //TODO: please translate
|
||||
"statusokprotocolbad": "OK", //TODO: please translate
|
||||
"statusokprotocolbad": "OK",
|
||||
"statuslabelkeypool1": "This is a log of all the Bitcoin Addresses and Private Keys you generated during your current session. Reloading the page will create a new session.", //TODO: please translate
|
||||
"statuskeypoolrefresh": "Refresh", //TODO: please translate
|
||||
"statusokkeypool": "OK", //TODO: please translate
|
||||
"statuskeypoolrefresh": "Atualizar",
|
||||
"statusokkeypool": "OK",
|
||||
|
||||
// single wallet html
|
||||
"newaddress": "Gerar endereço",
|
||||
"singleprint": "Imprimir",
|
||||
"singlelabelbitcoinaddress": "Endereço Bitcoin",
|
||||
"singlelabelprivatekey": "Chave privada (Wallet Import Format):",
|
||||
"singletip1": "<b>Uma carteira Bitcoin</b> é tão simples quanto um simples pareamento de um endereço Bitcoin com a sua chave privada Bitcoin correspondente. Essa carteira foi gerada para você em seu navegador web e está sendo exibida acima.",
|
||||
"singletip2": "<b>Para proteger essa carteira</b> você deve imprimir ou anotar/salvar o endereço Bitcoin e a chave privada. É importante que você faça uma cópia de segurança da sua chave privada e armazene-a em um local seguro. Esse site não toma conhecimento da sua chave privada. Se você for familiar com PGP, você pode baixar essa pagina HTML tudo-em-um e verificar se você tem uma versão autêntica do autor deste site ao fazer a correspondência do hash SHA256 deste HTML com o hash SHA256 disponível na versão assinada do documento linkado no rodapé deste site. Se você sair/atualizar essa página ou apertar o botão Gerar Novo Endereço, então uma nova chave privada será gerada e a chave exibida anteriormente não será recuperável. A sua chave privada Bitcoin deve ser mantida como um segredo. Qualquer pessoa que tiver acesso a ela poderá gastar todos os seus bitcoins associados com aquele endereço. Se você imprimir sua carteira, armazene-a em um saco plástico selado para mantê-la longe da água. Trate uma carteira em papel como se fosse dinheiro.",
|
||||
"singletip1": "<b>Uma carteira Bitcoin</b> nada mais é do que um endereço Bitcoin e a sua chave privada Bitcoin correspondente. Essa carteira foi gerada para você em seu navegador web e está sendo exibida acima.",
|
||||
"singletip2": "<b>Para proteger essa carteira</b> você deve imprimir ou anotar/salvar o endereço Bitcoin e a sua chave privada correspondente. É importante que você faça uma cópia de segurança da sua chave privada e armazene-a em um local seguro. Esse site não toma conhecimento da sua chave privada. Se você for familiar com criptografia PGP, você pode baixar essa página HTML em um arquivo único e verificar se você tem uma versão autêntica do autor deste site ao fazer a correspondência do hash SHA256 deste HTML com o hash SHA256 disponível na versão assinada do arquivo contido no link no rodapé deste site. Se você sair/atualizar essa página ou apertar o botão Gerar Novo Endereço, então uma nova chave privada será gerada e a chave exibida anteriormente não será recuperável. A sua chave privada Bitcoin deve ser mantida em um segredo. Qualquer pessoa que tiver acesso a ela poderá gastar todos os seus bitcoins associados com aquele endereço. Se você imprimir sua carteira, armazene-a em um saco plástico selado para mantê-la longe da água. Trate sua carteira em papel como se fosse dinheiro.",
|
||||
"singletip3": "<b>Adicione fundos</b> para essa carteira ao indicar para outras pessoas enviarem bitcoins para o seu endereço Bitcoin.",
|
||||
"singletip4": "<b>Verifique seu saldo</b> visitando os sites blockchain.info ou blockexplorer.com e digitando o seu endereço Bitcoin.",
|
||||
"singletip5": "<b>Gaste seus bitcoins</b> visitando o site blockchain.info e esvaziando completamente o seu saldo de sua chave privada para sua conta no site. Você também pode gastar seus fundos ao baixar um cliente bitcoin p2p popular e importar sua chave privada para a carteira do aplicativo. Tenha em mjente que quando você importa uma chave única para um cliente bitcoin p2p e gasta seus fundos, sua chave será agrupada com outras chavfes privadas no aplicativo de carteira. Quando você realizar uma transação o seu troco será enviado para outro endereço bitcoin dentro do seu aplicativo de carteira. Você deve então fazer backup da sua carteira em seu aplicativo e mantê-la em segurança, visto que seus bitcoins remanescentes agora serão armazenados nela. Um conselho do Satoshi Nakamoto é de que uma carteira nunca deve ser apagada.",
|
||||
"singleshare": "COMPARTILHE", //TODO: please translate
|
||||
"singlesecret": "SECRETA", //TODO: please translate
|
||||
"singletip5": "<b>Gaste seus bitcoins</b> visitando o site blockchain.info e esvaziando completamente o seu saldo de sua chave privada para sua conta no site. Você também pode gastar seus fundos ao baixar um cliente bitcoin p2p popular e importar sua chave privada para a carteira do aplicativo. Tenha em mente que quando você importa uma chave única para um cliente bitcoin p2p e gasta seus fundos, sua chave será agrupada com outras chavfes privadas no aplicativo de carteira. Quando você realizar uma transação o seu troco será enviado para outro endereço bitcoin dentro do seu aplicativo de carteira. Você deve então fazer backup da sua carteira em seu aplicativo e mantê-la em segurança, visto que seus bitcoins remanescentes agora serão armazenados nela. Um conselho do Satoshi Nakamoto é de que uma carteira nunca deve ser apagada.",
|
||||
"singleshare": "COMPARTILHE",
|
||||
"singlesecret": "SECRETA",
|
||||
|
||||
// paper wallet html
|
||||
"paperlabelhideart": "Ocultar figura",
|
||||
|
@ -9379,7 +9325,7 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
"bulkgenerate": "Gerar",
|
||||
"bulkprint": "Imprimir",
|
||||
"bulklabelcsv": "Valores separados por vírgula:",
|
||||
"bulklabelformat": "Índice,Dirección,Clave privada (formato para importar)",
|
||||
"bulklabelformat": "Índice,Endereço,Chave privada (formato para importar)",
|
||||
"bulklabelq1": "¿Por qué debo usar \"Direcciones en masa\" para aceptar Bitcoins en mi web?",
|
||||
"bulka1": "La forma tradicional de aceptar bitcoins en tu web requiere tener instalado el cliente oficial de bitcoin (\"bitcoind\"). Sin embargo muchos servicios de hosting no permiten instalar dicho cliente. Además, ejecutar el cliente en tu servidor supone que las claves privadas están también en el servidor y podrían ser comprometidas en caso de intrusión. Al usar este mecanismo, puedes subir al servidor sólo las dirección de bitcoin y no las claves privadas. De esta forma no te tienes que preocupar de que alguien robe la cartera si se cuelan en el servidor.",
|
||||
"bulklabelq2": "¿Cómo uso \"Direcciones en masa\" para aceptar bitcoins en mi web?",
|
||||
|
@ -9433,15 +9379,15 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
|
|||
"detaillabelpublickey": "Chave pública (130 caracteres [0-9A-F]):",
|
||||
"detaillabelpublickeycomp": "Chave pública (comprimida, 66 caracteres [0-9A-F]):",
|
||||
"detaillabelprivwif": "Chave privada para importação (51 caracteres em base58, inicia com um",
|
||||
"detaillabelprivwifcomp": "Chave privada para importação (comprimida, 52 caracteres em base58, inicia com",
|
||||
"detailcompwifprefix": "'K' o 'L'",
|
||||
"detaillabelprivwifcomp": "Chave privada para importação (comprimida, 52 caracteres em base58, inicia com",
|
||||
"detailcompwifprefix": "'K' ou 'L'",
|
||||
"detaillabelprivhex": "Chave privada em formato hexadecimal (64 caracteres [0-9A-F]):",
|
||||
"detaillabelprivb64": "Chave privada em base64 (44 caracteres):",
|
||||
"detaillabelprivmini": "Chave privada en formato mini (22, 26 ou 30 caracteres, inicia com 'S'):",
|
||||
"detaillabelpassphrase": "Senha BIP38",
|
||||
"detailbip38decryptbutton": "Desencriptar BIP38",
|
||||
"detailbip38encryptbutton": "Encrypt BIP38", //TODO: please translate
|
||||
"detaillabelq1": "Como eu faço uma carteira usando um dado? O que é B6?",
|
||||
"detailbip38decryptbutton": "Descriptografar BIP38",
|
||||
"detailbip38encryptbutton": "Criptografar em BIP38",
|
||||
"detaillabelq1": "Como eu faço uma carteira usando um dado? O que é o formato B6?",
|
||||
"detaila1": "Uma parte importante ao criar um carteira Bitcoin é se assegurar que os números aleatórios usados para criar a carteira sejam realmente aleatórios. A aleatoriedade física é melhor do que a pseudo-aleatoriedade gerada por computador. A maneira mais fácil de gerar aleatoriedade física é com dados. Para criar um chave privada Bitcoin você precisa de apenas um dado de seis lados, o qual você jogará 99 vezes. A cada jogada, anote o valor do dado. Ao anotar os valores, siga as seguintes regras: 1=1, 2=2, 3=3, 4=4, 5=5, 6=0. Ao fazer isso, você está anotando esse grande número aleatório, sua chave privada, no formato base 6 (B6). Você pode então digitar essa chave privada em base 6 contendo 99 caracteres no campo de texto acima e clicar em Ver Detalhes. Você então verá o endereço Bitcoin associado com sua chave privada. Você deve também anotar sua chave privada no formato WIF, já que ele é mais amplamente utilizado."
|
||||
};
|
||||
})(ninja.translator);
|
||||
|
@ -10440,7 +10386,10 @@ ninja.wallets.vanitywallet = {
|
|||
|
||||
keyToECKeyWithBrain: function (key) {
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.priv == null) {
|
||||
if (btcKey.error != null) {
|
||||
alert(translator.get("detailalertnotvalidprivatekey") + "\n" + btcKey.error);
|
||||
}
|
||||
else if (btcKey.priv == null) {
|
||||
// enforce a minimum passphrase length
|
||||
if (key.length >= wallets.brainwallet.minPassphraseLength) {
|
||||
// Deterministic Wallet confirm box to ask if user wants to SHA256 the input to get a private key
|
||||
|
@ -10817,7 +10766,7 @@ ninja.wallets.splitwallet = {
|
|||
}
|
||||
testResults += passCount + " of " + testCount + " synchronous tests passed";
|
||||
if (passCount < testCount) {
|
||||
testResults += "<b>" + (testCount - passCount) + " unit test(s) failed</b>";
|
||||
testResults += "<br/><b>" + (testCount - passCount) + " unit test(s) failed</b>";
|
||||
}
|
||||
if (showOutput) {
|
||||
div.innerHTML = "<h3>Unit Tests</h3><div id=\"unittestresults\">" + testResults + "<br/><br/></div>";
|
||||
|
@ -11406,6 +11355,279 @@ ninja.wallets.splitwallet = {
|
|||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
//BigInteger tests
|
||||
testBigIntegerShouldWorkWithoutNew: function () {
|
||||
var bi = BigInteger('12345')
|
||||
if (bi.toString(10) != '12345') {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldWorkWithStringInput: function () {
|
||||
if (new BigInteger('12345').toString(16) != '3039') return false;
|
||||
if (new BigInteger('29048849665247').toString(16) != '1a6b765d8cdf') return false;
|
||||
if (new BigInteger('-29048849665247').toString(16) != '-1a6b765d8cdf') return false;
|
||||
if (new BigInteger('1A6B765D8CDF', 16).toString(16) != '1a6b765d8cdf') return false;
|
||||
if (new BigInteger('FF', 16).toString() != '255') return false;
|
||||
if (new BigInteger('1A6B765D8CDF', 16).toString() != '29048849665247') return false;
|
||||
if (new BigInteger('a89c e5af8724 c0a23e0e 0ff77500', 16).toString(16) != 'a89ce5af8724c0a23e0e0ff77500') return false;
|
||||
if (new BigInteger('123456789abcdef123456789abcdef123456789abcdef', 16).toString(16) != '123456789abcdef123456789abcdef123456789abcdef') return false;
|
||||
if (new BigInteger('10654321').toString() != '10654321') return false;
|
||||
if (new BigInteger('10000000000000000').toString(10) != '10000000000000000') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldImportExportTwosComplementBigEndian: function () {
|
||||
if (new BigInteger([1, 2, 3], 256).toString(16) != '10203') return false;
|
||||
if (new BigInteger([1, 2, 3, 4], 256).toString(16) != '1020304') return false;
|
||||
if (new BigInteger([1, 2, 3, 4, 5], 256).toString(16) != '102030405') return false;
|
||||
if (new BigInteger([1, 2, 3, 4, 5, 6, 7, 8], 256).toString(16) != '102030405060708') return false;
|
||||
if (new BigInteger([1, 2, 3, 4], 256).toByteArray().join(',') != '1,2,3,4') return false;
|
||||
if (new BigInteger([1, 2, 3, 4, 5, 6, 7, 8], 256).toByteArray().join(',') != '1,2,3,4,5,6,7,8') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldReturnProperBitLength: function () {
|
||||
if (new BigInteger('0').bitLength() != 0) return false;
|
||||
if (new BigInteger('1', 16).bitLength() != 1) return false;
|
||||
if (new BigInteger('2', 16).bitLength() != 2) return false;
|
||||
if (new BigInteger('3', 16).bitLength() != 2) return false;
|
||||
if (new BigInteger('4', 16).bitLength() != 3) return false;
|
||||
if (new BigInteger('8', 16).bitLength() != 4) return false;
|
||||
if (new BigInteger('10', 16).bitLength() != 5) return false;
|
||||
if (new BigInteger('100', 16).bitLength() != 9) return false;
|
||||
if (new BigInteger('123456', 16).bitLength() != 21) return false;
|
||||
if (new BigInteger('123456789', 16).bitLength() != 33) return false;
|
||||
if (new BigInteger('8023456789', 16).bitLength() != 40) return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldAddNumbers: function () {
|
||||
// test 1
|
||||
if (new BigInteger('14').add(new BigInteger('26')).toString(16) != '28') return false;
|
||||
|
||||
// test 2
|
||||
var k = new BigInteger('1234', 16);
|
||||
var r = k;
|
||||
for (var i = 0; i < 257; i++) r = r.add(k);
|
||||
if (r.toString(16) != '125868') return false;
|
||||
|
||||
// test 3
|
||||
var k = new BigInteger('abcdefabcdefabcdef', 16);
|
||||
var r = new BigInteger('deadbeef', 16);
|
||||
for (var i = 0; i < 257; i++) {
|
||||
r = r.add(k);
|
||||
}
|
||||
if (r.toString(16) != 'ac79bd9b79be7a277bde') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldSubtractNumbers: function () {
|
||||
// test 1
|
||||
if (new BigInteger('14').subtract(new BigInteger('26')).toString(16) != '-c') return false;
|
||||
// test 2
|
||||
if (new BigInteger('26').subtract(new BigInteger('14')).toString(16) != 'c') return false;
|
||||
// test 3
|
||||
if (new BigInteger('26').subtract(new BigInteger('26')).toString(16) != '0') return false;
|
||||
// test 4
|
||||
if (new BigInteger('-26').subtract(new BigInteger('26')).toString(16) != '-34') return false;
|
||||
// test 5
|
||||
var a = new BigInteger('31ff3c61db2db84b9823d320907a573f6ad37c437abe458b1802cda041d6384a7d8daef41395491e2', 16);
|
||||
var b = new BigInteger('6f0e4d9f1d6071c183677f601af9305721c91d31b0bbbae8fb790000', 16);
|
||||
var r = new BigInteger('31ff3c61db2db84b9823d3208989726578fd75276287cd9516533a9acfb9a6776281f34583ddb91e2', 16);
|
||||
if (a.subtract(b).compareTo(r) != 0) return false;
|
||||
// test 6
|
||||
var r = b.subtract(new BigInteger('14'));
|
||||
if (b.clone().subtract(new BigInteger('14')).compareTo(r) != 0) return false;
|
||||
// test 7
|
||||
var r = new BigInteger('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b', 16);
|
||||
if (r.subtract(new BigInteger('-1')).toString(16) != '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681c') return false;
|
||||
// test 8
|
||||
// Carry and copy
|
||||
var a = new BigInteger('12345', 16);
|
||||
var b = new BigInteger('1000000000000', 16);
|
||||
if (a.subtract(b).toString(16) != '-fffffffedcbb') return false;
|
||||
// test 9
|
||||
var a = new BigInteger('12345', 16);
|
||||
var b = new BigInteger('1000000000000', 16);
|
||||
if (b.subtract(a).toString(16) != 'fffffffedcbb') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldMultiplyNumbers: function () {
|
||||
if (new BigInteger('1001', 16).multiply(new BigInteger('1234', 16)).toString(16) != '1235234') return false;
|
||||
if (new BigInteger('-1001', 16).multiply(new BigInteger('1234', 16)).toString(16) != '-1235234') return false;
|
||||
if (new BigInteger('-1001', 16).multiply(new BigInteger('-1234', 16)).toString(16) != '1235234') return false;
|
||||
|
||||
// test 4
|
||||
var n = new BigInteger('1001', 16);
|
||||
var r = n;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
r = r.multiply(n);
|
||||
}
|
||||
if (r.toString(16) != '100500a00a005001') return false;
|
||||
|
||||
var n = new BigInteger('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 16);
|
||||
if (n.multiply(n).toString(16) != '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9978a8bd8acaa40') return false;
|
||||
if (n.multiply(n).multiply(n).toString(16) != '1b888e01a06e974017a28a5b4da436169761c9730b7aeedf75fc60f687b46e0cf2cb11667f795d5569482640fe5f628939467a01a612b023500d0161e9730279a7561043af6197798e41b7432458463e64fa81158907322dc330562697d0d600') return false;
|
||||
|
||||
if (new BigInteger('-100000000000').multiply(new BigInteger('3').divide(new BigInteger('4'))).toString(16) != '0') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldDivideNumbers: function () {
|
||||
if (new BigInteger('10').divide(new BigInteger('256')).toString(16) != '0') return false;
|
||||
if (new BigInteger('69527932928').divide(new BigInteger('16974594')).toString(16) != 'fff') return false;
|
||||
if (new BigInteger('-69527932928').divide(new BigInteger('16974594')).toString(16) != '-fff') return false;
|
||||
|
||||
var b = new BigInteger('39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9978a8bd8acaa40', 16);
|
||||
var n = new BigInteger('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 16);
|
||||
if (b.divide(n).toString(16) != n.toString(16)) return false;
|
||||
|
||||
if (new BigInteger('1').divide(new BigInteger('-5')).toString(10) != '0') return false;
|
||||
|
||||
// // Regression after moving to word div
|
||||
var p = new BigInteger('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', 16);
|
||||
var a = new BigInteger('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 16);
|
||||
var as = a.square();
|
||||
if (as.divide(p).toString(16) != '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729e58090b9') return false;
|
||||
|
||||
var p = new BigInteger('ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', 16);
|
||||
var a = new BigInteger('fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);
|
||||
if (a.divide(p).toString(16) != 'ffffffff00000002000000000000000000000001000000000000000000000001') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldModNumbers: function () {
|
||||
if (new BigInteger('10').mod(new BigInteger('256')).toString(16) != 'a') return false;
|
||||
if (new BigInteger('69527932928').mod(new BigInteger('16974594')).toString(16) != '102f302') return false;
|
||||
if (new BigInteger('-69527932928').mod(new BigInteger('16974594')).toString(16) != '1000') return false;
|
||||
if (new BigInteger('10', 16).mod(new BigInteger('256')).toString(16) != '10') return false;
|
||||
if (new BigInteger('100', 16).mod(new BigInteger('256')).toString(16) != '0') return false;
|
||||
if (new BigInteger('1001', 16).mod(new BigInteger('256')).toString(16) != '1') return false;
|
||||
if (new BigInteger('100000000001', 16).mod(new BigInteger('256')).toString(16) != '1') return false;
|
||||
if (new BigInteger('100000000001', 16).mod(new BigInteger('257')).toString(16) != new BigInteger('100000000001', 16).mod(new BigInteger('257')).toString(16)) return false;
|
||||
if (new BigInteger('123456789012', 16).mod(new BigInteger('3')).toString(16) != new BigInteger('123456789012', 16).mod(new BigInteger('3')).toString(16)) return false;
|
||||
|
||||
var p = new BigInteger('ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', 16);
|
||||
var a = new BigInteger('fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);
|
||||
if (a.mod(p).toString(16) != '0') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldShiftLeftNumbers: function () {
|
||||
if (new BigInteger('69527932928').shiftLeft(13).toString(16) != '2060602000000') return false;
|
||||
if (new BigInteger('69527932928').shiftLeft(45).toString(16) != '206060200000000000000') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldShiftRightNumbers: function () {
|
||||
if (new BigInteger('69527932928').shiftRight(13).toString(16) != '818180') return false;
|
||||
if (new BigInteger('69527932928').shiftRight(17).toString(16) != '81818') return false;
|
||||
if (new BigInteger('69527932928').shiftRight(256).toString(16) != '0') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldModInverseNumbers: function () {
|
||||
var p = new BigInteger('257');
|
||||
var a = new BigInteger('3');
|
||||
var b = a.modInverse(p);
|
||||
if (a.multiply(b).mod(p).toString(16) != '1') return false;
|
||||
|
||||
var p192 = new BigInteger('fffffffffffffffffffffffffffffffeffffffffffffffff', 16);
|
||||
var a = new BigInteger('deadbeef', 16);
|
||||
var b = a.modInverse(p192);
|
||||
if (a.multiply(b).mod(p192).toString(16) != '1') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldThrowOnModInverseOfZero: function () {
|
||||
var p = new BigInteger('257');
|
||||
var a = new BigInteger('0');
|
||||
//division by zero
|
||||
try {
|
||||
a.modInverse(p);
|
||||
}
|
||||
catch (e) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
testBigIntegerShouldAlwaysReturnPositiveNumber: function () {
|
||||
var z = new BigInteger('cc61934972bba029382f0bef146b228ca15d54f7e38b6cd5f6b382398b7a97a8', 16);
|
||||
var p = new BigInteger('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', 16);
|
||||
var zInv = z.modInverse(p);
|
||||
if (zInv.signum() !== 1) return false; //zInv should be positive
|
||||
|
||||
return true;
|
||||
},
|
||||
testECKeyDoesntHangWithSpecificKey: function () {
|
||||
var key = "848b39bbe4c9ddf978d3d8f786315bdc3ba71237d5f780399e0026e1269313ef";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.getPubKeyHex() != "0478BC8F7CB4485E7A0314A698AA1600639FF2922D09C26DED5F730CAC4784477D2B325922459F017AC1E8775436D11D7F84BD84E11CB64FC9BE110931D0C990CE"
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
// test checksum exceptions
|
||||
testUncompressedWifShouldFailChecksum: function () {
|
||||
// original key: 5KjQAHniFiy18SU7eenyJ9EPYUkjrbiBPfDqw987QjT5vehVQZV K->k
|
||||
var key = "5kjQAHniFiy18SU7eenyJ9EPYUkjrbiBPfDqw987QjT5vehVQZV";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error.toString().indexOf("failed") == -1) { //Checksum validation failed!
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
},
|
||||
testCompressedWifShouldFailChecksum: function () {
|
||||
// original key: L5g9E16m5zEBZqQgMBouUfL6VwW49vCks1hgyxrPHkN8jNNdWTTk g->G
|
||||
var key = "L5G9E16m5zEBZqQgMBouUfL6VwW49vCks1hgyxrPHkN8jNNdWTTk";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error.toString().indexOf("failed") == -1) { //Checksum validation failed!
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
},
|
||||
// test range of valid private key values for the secp256k1 curve, when specified in hex is
|
||||
// [0x1, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140]
|
||||
testBigIntegerZeroShouldSetError: function () {
|
||||
var key = "0000000000000000000000000000000000000000000000000000000000000000";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
},
|
||||
testBigIntegerOutOfCurveRangeShouldSetError1: function () {
|
||||
var key = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
testBigIntegerOutOfCurveRangeShouldSetError2: function () {
|
||||
var key = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364142";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
testBigIntegerOutOfCurveRangeShouldSetError3: function () {
|
||||
var key = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
-----BEGIN PGP SIGNATURE-----
|
||||
Version: GnuPG v1
|
||||
|
||||
iQEcBAABAgAGBQJWx8DzAAoJEIdJe5Fjl09awNYIAIsrdkZJylt01F15y1jy5SUB
|
||||
elatgdvoWuvBtj1toTBknvWs3SrLbAi4OkzIZbZnu/QSf+6BejeGlus1AKJwbQFr
|
||||
srVVdw3x3I9T+mY3GLdrbrAhivulBQhGk+LSyJhp9/tVj6r924kbceK+QtV6GVLs
|
||||
6UXzjejbwoTF51av0n5isuF7tUIUC2cfpgvznSGVFGlUbseByBLIut+X0VgVwa7V
|
||||
zIjnkgI12tiAAWquZtaZ5H5SKcVOQ1+7MqcZ3m9fH7E3+st+xe6JczHIytqu0hVI
|
||||
IXs5TpzzdeXaxEuJPGa7w43M5e6CHKviDT8EjTnc/JBJjBLHymrTAa/jUkQXYaU=
|
||||
=y/7l
|
||||
iQEcBAABAgAGBQJYXsr+AAoJEIdJe5Fjl09aYRwH/AstuXuYvMhKQCh+xheAJUC9
|
||||
HZbRmV+Sj2rCjhi7EYnZUZ1KNvBQkQjn5ZkumjkSSroe1OdT1ci3wW3HOKlH3z7D
|
||||
Qqb1YnZguWdA0AfmsIOn9H0r4uX+8MohxTxsyPRkzEaV1mPfDvZS7Xr4xzeDsBsj
|
||||
szKi94z1BowoNe6JfOLgBRsri8R6LPbEZixVVbW6+KxicQUMsy6e8vatQOeNDf+I
|
||||
r3c61qujWHijJ6mEKbfnKosLybe1WJ8bsMKp6UAxJtdsKnfFQHw7lpjXPnp7KSlf
|
||||
2S74MfF/LNoCFpI68j8E3Lwy5bzel9Vl6I3Vp0N8tvMi9CSckDm0Q2nItYMLBco=
|
||||
=UFiT
|
||||
-----END PGP SIGNATURE-----
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"name": "bitaddress.org",
|
||||
"version": "3.2.0",
|
||||
"sha1sum": "057f3192b603d42c980ea23d5ae332a65f7a327c",
|
||||
"sha256sum": "ad4fd171c647772aa76d0ce828731b01ca586596275d43a94008766b758e8736",
|
||||
"version": "3.3.0",
|
||||
"sha1sum": "6cc839a9f60196e3c5e1ddf6cb9e49ce2ae85cb7",
|
||||
"sha256sum": "dec17c07685e1870960903d8f58090475b25af946fe95a734f88408cef4aa194",
|
||||
"description": "Open Source JavaScript Client-Side Bitcoin Wallet Generator",
|
||||
"main": "Gruntfile.js",
|
||||
"dependencies": {
|
||||
|
@ -27,7 +27,7 @@
|
|||
],
|
||||
"author": "pointbiz",
|
||||
"license": "MIT",
|
||||
"readmeFilename": "README",
|
||||
"readmeFilename": "README.md",
|
||||
"gitHead": "d77aaf687fca1f0e28388b0a8de5eb3d89d4fad3",
|
||||
"bugs": {
|
||||
"url": "https://github.com/pointbiz/bitaddress.org/issues"
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
// Array.prototype.map function is in the public domain.
|
||||
// Production steps of ECMA-262, Edition 5, 15.4.4.19
|
||||
// Reference: http://es5.github.com/#x15.4.4.19
|
||||
if (!Array.prototype.map) {
|
||||
Array.prototype.map = function (callback, thisArg) {
|
||||
var T, A, k;
|
||||
if (this == null) {
|
||||
throw new TypeError(" this is null or not defined");
|
||||
}
|
||||
// 1. Let O be the result of calling ToObject passing the |this| value as the argument.
|
||||
var O = Object(this);
|
||||
// 2. Let lenValue be the result of calling the Get internal method of O with the argument "length".
|
||||
// 3. Let len be ToUint32(lenValue).
|
||||
var len = O.length >>> 0;
|
||||
// 4. If IsCallable(callback) is false, throw a TypeError exception.
|
||||
// See: http://es5.github.com/#x9.11
|
||||
if ({}.toString.call(callback) != "[object Function]") {
|
||||
throw new TypeError(callback + " is not a function");
|
||||
}
|
||||
// 5. If thisArg was supplied, let T be thisArg; else let T be undefined.
|
||||
if (thisArg) {
|
||||
T = thisArg;
|
||||
}
|
||||
// 6. Let A be a new array created as if by the expression new Array(len) where Array is
|
||||
// the standard built-in constructor with that name and len is the value of len.
|
||||
A = new Array(len);
|
||||
// 7. Let k be 0
|
||||
k = 0;
|
||||
// 8. Repeat, while k < len
|
||||
while (k < len) {
|
||||
var kValue, mappedValue;
|
||||
// a. Let Pk be ToString(k).
|
||||
// This is implicit for LHS operands of the in operator
|
||||
// b. Let kPresent be the result of calling the HasProperty internal method of O with argument Pk.
|
||||
// This step can be combined with c
|
||||
// c. If kPresent is true, then
|
||||
if (k in O) {
|
||||
// i. Let kValue be the result of calling the Get internal method of O with argument Pk.
|
||||
kValue = O[k];
|
||||
// ii. Let mappedValue be the result of calling the Call internal method of callback
|
||||
// with T as the this value and argument list containing kValue, k, and O.
|
||||
mappedValue = callback.call(T, kValue, k, O);
|
||||
// iii. Call the DefineOwnProperty internal method of A with arguments
|
||||
// Pk, Property Descriptor {Value: mappedValue, Writable: true, Enumerable: true, Configurable: true},
|
||||
// and false.
|
||||
// In browsers that support Object.defineProperty, use the following:
|
||||
// Object.defineProperty(A, Pk, { value: mappedValue, writable: true, enumerable: true, configurable: true });
|
||||
// For best browser support, use the following:
|
||||
A[k] = mappedValue;
|
||||
}
|
||||
// d. Increase k by 1.
|
||||
k++;
|
||||
}
|
||||
// 9. return A
|
||||
return A;
|
||||
};
|
||||
}
|
|
@ -1,5 +1,9 @@
|
|||
// Upstream 'BigInteger' here:
|
||||
// Original Author: http://www-cs-students.stanford.edu/~tjw/jsbn/
|
||||
// Follows 'jsbn' on Github: https://github.com/jasondavies/jsbn
|
||||
// Review and Testing: https://github.com/cryptocoinjs/bigi/
|
||||
/*!
|
||||
* Basic JavaScript BN library - subset useful for RSA encryption. v1.3
|
||||
* Basic JavaScript BN library - subset useful for RSA encryption. v1.4
|
||||
*
|
||||
* Copyright (c) 2005 Tom Wu
|
||||
* All Rights Reserved.
|
||||
|
@ -7,13 +11,16 @@
|
|||
* http://www-cs-students.stanford.edu/~tjw/jsbn/LICENSE
|
||||
*
|
||||
* Copyright Stephan Thomas
|
||||
* Copyright bitaddress.org
|
||||
* Copyright pointbiz
|
||||
*/
|
||||
|
||||
(function () {
|
||||
|
||||
// (public) Constructor function of Global BigInteger object
|
||||
var BigInteger = window.BigInteger = function BigInteger(a, b, c) {
|
||||
if (!(this instanceof BigInteger))
|
||||
return new BigInteger(a, b, c);
|
||||
|
||||
if (a != null)
|
||||
if ("number" == typeof a) this.fromNumber(a, b, c);
|
||||
else if (b == null && "string" != typeof a) this.fromString(a, 256);
|
||||
|
@ -944,6 +951,7 @@
|
|||
// (public) 1/this % m (HAC 14.61)
|
||||
BigInteger.prototype.modInverse = function (m) {
|
||||
var ac = m.isEven();
|
||||
if (this.signum() === 0) throw new Error('division by zero');
|
||||
if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;
|
||||
var u = m.clone(), v = this.clone();
|
||||
var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);
|
||||
|
@ -978,9 +986,9 @@
|
|||
}
|
||||
}
|
||||
if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;
|
||||
if (d.compareTo(m) >= 0) return d.subtract(m);
|
||||
if (d.signum() < 0) d.addTo(m, d); else return d;
|
||||
if (d.signum() < 0) return d.add(m); else return d;
|
||||
while (d.compareTo(m) >= 0) d.subTo(m, d);
|
||||
while (d.signum() < 0) d.addTo(m, d);
|
||||
return d;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
Summary of JavaScript functions with a redistributable license:
|
||||
JavaScript function License
|
||||
******************* ***************
|
||||
Array.prototype.map Public Domain
|
||||
window.Crypto BSD License
|
||||
window.SecureRandom BSD License
|
||||
window.EllipticCurve BSD License
|
||||
|
@ -26,7 +25,7 @@
|
|||
window.Crypto_scrypt MIT License
|
||||
|
||||
The bitaddress.org software is available under The MIT License (MIT)
|
||||
Copyright (c) 2011-2013 bitaddress.org (pointbiz)
|
||||
Copyright (c) 2011-2016 bitaddress.org (pointbiz)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
|
@ -49,9 +48,6 @@
|
|||
<title>bitaddress.org</title>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<script type="text/javascript">
|
||||
//array.map.js
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
//cryptojs.js
|
||||
</script>
|
||||
|
|
|
@ -90,19 +90,23 @@ Bitcoin.ECKey = (function () {
|
|||
this.priv = BigInteger.fromByteArrayUnsigned(input);
|
||||
} else if ("string" == typeof input) {
|
||||
var bytes = null;
|
||||
if (ECKey.isWalletImportFormat(input)) {
|
||||
bytes = ECKey.decodeWalletImportFormat(input);
|
||||
} else if (ECKey.isCompressedWalletImportFormat(input)) {
|
||||
bytes = ECKey.decodeCompressedWalletImportFormat(input);
|
||||
this.compressed = true;
|
||||
} else if (ECKey.isMiniFormat(input)) {
|
||||
bytes = Crypto.SHA256(input, { asBytes: true });
|
||||
} else if (ECKey.isHexFormat(input)) {
|
||||
bytes = Crypto.util.hexToBytes(input);
|
||||
} else if (ECKey.isBase64Format(input)) {
|
||||
bytes = Crypto.util.base64ToBytes(input);
|
||||
try{
|
||||
if (ECKey.isWalletImportFormat(input)) {
|
||||
bytes = ECKey.decodeWalletImportFormat(input);
|
||||
} else if (ECKey.isCompressedWalletImportFormat(input)) {
|
||||
bytes = ECKey.decodeCompressedWalletImportFormat(input);
|
||||
this.compressed = true;
|
||||
} else if (ECKey.isMiniFormat(input)) {
|
||||
bytes = Crypto.SHA256(input, { asBytes: true });
|
||||
} else if (ECKey.isHexFormat(input)) {
|
||||
bytes = Crypto.util.hexToBytes(input);
|
||||
} else if (ECKey.isBase64Format(input)) {
|
||||
bytes = Crypto.util.base64ToBytes(input);
|
||||
}
|
||||
} catch (exc1) {
|
||||
this.setError(exc1);
|
||||
}
|
||||
|
||||
|
||||
if (ECKey.isBase6Format(input)) {
|
||||
this.priv = new BigInteger(input, 6);
|
||||
} else if (bytes == null || bytes.length != 32) {
|
||||
|
@ -114,7 +118,21 @@ Bitcoin.ECKey = (function () {
|
|||
}
|
||||
|
||||
this.compressed = (this.compressed == undefined) ? !!ECKey.compressByDefault : this.compressed;
|
||||
KeyPool.push(this);
|
||||
try {
|
||||
// check not zero
|
||||
if (this.priv != null && BigInteger.ZERO.compareTo(this.priv) == 0) this.setError("Error: BigInteger equal to zero.");
|
||||
// valid range [0x1, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140])
|
||||
var hexKeyRangeLimit = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140";
|
||||
var rangeLimitBytes = Crypto.util.hexToBytes(hexKeyRangeLimit);
|
||||
var limitBigInt = BigInteger.fromByteArrayUnsigned(rangeLimitBytes);
|
||||
if (this.priv != null && limitBigInt.compareTo(this.priv) < 0) this.setError("Error: BigInteger outside of curve range.")
|
||||
|
||||
if (this.priv != null) {
|
||||
KeyPool.push(this);
|
||||
}
|
||||
} catch (exc2) {
|
||||
this.setError(exc2);
|
||||
}
|
||||
};
|
||||
|
||||
ECKey.privateKeyPrefix = 0x80; // mainnet 0x80 testnet 0xEF
|
||||
|
@ -124,6 +142,15 @@ Bitcoin.ECKey = (function () {
|
|||
*/
|
||||
ECKey.compressByDefault = false;
|
||||
|
||||
/**
|
||||
* Set whether the public key should be returned compressed or not.
|
||||
*/
|
||||
ECKey.prototype.setError = function (err) {
|
||||
this.error = err;
|
||||
this.priv = null;
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set whether the public key should be returned compressed or not.
|
||||
*/
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
"brainalertpassphrasetooshort": "A megadott jelmondat túl rövid.\n\n",
|
||||
"brainalertpassphrasewarning": "Figyelem: Fontos, hogy erős jelmondatot válasszon, mert különben a jelmondatot nyers erővel feltörhetik és a bitcoinjait ellophatják.",
|
||||
"brainalertpassphrasedoesnotmatch": "A jelmondat és az ellenőrző jelmondat nem azonos.",
|
||||
"detailalertnotvalidprivatekey": "A beadott szöveg nem érvénytelen Privát Kulcs",
|
||||
"detailconfirmsha256": "Az ön által beadott szöveg érvénytelen Privát Kulcs!\n\nSzeretné a beadott szöveget jelmondatként kezelni, és annak SHA256 zanzájából egy Privát Kulcsot előállítani?\n\nFigyelem: Fontos, hogy erős jelmondatot válasszon, mert különben a jelmondatot nyers erővel feltörhetik és a bitcoinjait ellophatják.",
|
||||
"detailalertnotvalidprivatekey": "A megadott szöveg nem érvényes Privát Kulcs",
|
||||
"detailconfirmsha256": "Az ön által megadott szöveg érvénytelen Privát Kulcs!\n\nSzeretné a megadott szöveget jelmondatként kezelni, és annak SHA256 zanzájából egy Privát Kulcsot előállítani?\n\nFigyelem: Fontos, hogy erős jelmondatot válasszon, mert különben a jelmondatot nyers erővel feltörhetik és a bitcoinjait ellophatják.",
|
||||
"bip38alertincorrectpassphrase": "Érvénytelen jelmondat a titkosított privát kulcshoz.",
|
||||
"bip38alertpassphraserequired": "A BIP38 kulcshoz jelmondat szükséges",
|
||||
"vanityinvalidinputcouldnotcombinekeys": "Érvénytelen bemenet. A kulcsok nem tartoznak össsze.",
|
||||
|
@ -21,7 +21,7 @@
|
|||
"vanityalertinvalidinputprivatekeysmatch": "Érvénytelen bemenet. A két megadott privát kulcs azonos. Két különböző kulcs bevitelére van szükség.",
|
||||
|
||||
// header and menu html
|
||||
"tagline": "Nyílt forráskódú, kliens oldali JavaScript, Bitcoin pénztárca előállítására",
|
||||
"tagline": "Nyílt forráskódú, ügyfél oldali JavaScript Bitcoin tárca készítő program",
|
||||
"generatelabelbitcoinaddress": "A bitcoin cím előállítása...",
|
||||
"generatelabelmovemouse": "MOZGASSA az egeret, ha fokozni szeretné a véletlenszerűséget...",
|
||||
"generatelabelkeypress": "VAGY gépeljen be néhány véletlenszerű karaktert ebbe a szövegdobozba",
|
||||
|
@ -30,7 +30,7 @@
|
|||
"bulkwallet": "Tömeges pénztárca",
|
||||
"brainwallet": "Fejben tartott pénztárca",
|
||||
"vanitywallet": "Kérkedő pénztárca",
|
||||
"splitwallet": "Részekre bontott ~",
|
||||
"splitwallet": "Felosztott tárca",
|
||||
"detailwallet": "A pénztárca részletei",
|
||||
|
||||
// footer html
|
||||
|
@ -46,39 +46,39 @@
|
|||
"footerlabelnowarranty": "Garancia nincs.",
|
||||
|
||||
// status html
|
||||
"statuslabelcryptogood": "✔ Good!", //TODO: please translate
|
||||
"statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate
|
||||
"statusokcryptogood": "OK", //TODO: please translate
|
||||
"statuslabelcryptobad": "× Oh no!", //TODO: please translate
|
||||
"statuslabelcryptobad1": "Your browser does NOT support window.crypto.getRandomValues. You should use a more modern browser with this generator to increase the security of the keys generated.",
|
||||
"statusokcryptobad": "OK", //TODO: please translate
|
||||
"statuslabelunittestsgood": "✔ Good!", //TODO: please translate
|
||||
"statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate
|
||||
"statusokunittestsgood": "OK", //TODO: please translate
|
||||
"statuslabelunittestsbad": "× Oh no!", //TODO: please translate
|
||||
"statuslabelunittestsbad1": "Some synchronous unit tests DID NOT pass. You should find another browser to use with this generator.", //TODO: please translate
|
||||
"statusokunittestsbad": "OK", //TODO: please translate
|
||||
"statuslabelprotocolgood": "✔ Good!", //TODO: please translate
|
||||
"statuslabelprotocolgood1": "You are running this generator from your local computer. <br />Tip: Double check you are offline by trying ", //TODO: please translate
|
||||
"statusokprotocolgood": "OK", //TODO: please translate
|
||||
"statuslabelprotocolbad": "⚠ Think twice!", //TODO: please translate
|
||||
"statuslabelprotocolbad1": "You appear to be running this generator online from a live website. For valuable wallets it is recommended to", //TODO: please translate
|
||||
"statuslabelprotocolbad2": "download", //TODO: please translate
|
||||
"statuslabelprotocolbad3": "the zip file from GitHub and run this generator offline as a local html file.", //TODO: please translate
|
||||
"statusokprotocolbad": "OK", //TODO: please translate
|
||||
"statuslabelkeypool1": "This is a log of all the Bitcoin Addresses and Private Keys you generated during your current session. Reloading the page will create a new session.", //TODO: please translate
|
||||
"statuskeypoolrefresh": "Refresh", //TODO: please translate
|
||||
"statusokkeypool": "OK", //TODO: please translate
|
||||
"statuslabelcryptogood": "✔ Helyes!",
|
||||
"statuslabelcryptogood1": "A böngészője képes kriptográfiai szempontból véletlen kulcsok generálására (a window.crypto.getRandomValues metódus támogatott)",
|
||||
"statusokcryptogood": "Rendben",
|
||||
"statuslabelcryptobad": "× Ó jaj!",
|
||||
"statuslabelcryptobad1": "Böngészője NEM támogatja a window.crypto.getRandomValues metódust. A metódust támogató, modernebb böngészőt kell használnia, ha növelni szeretné a generált kulcsok biztonsági szintjét!",
|
||||
"statusokcryptobad": "Rendben",
|
||||
"statuslabelunittestsgood": "✔ Helyes!",
|
||||
"statuslabelunittestsgood1": "Minden szinkron unit-teszt sikeres.",
|
||||
"statusokunittestsgood": "Rendben",
|
||||
"statuslabelunittestsbad": "× Ó, jaj!",
|
||||
"statuslabelunittestsbad1": "Néhány szinkron unit-teszt NEM volt sikeres. Jobb, ha egy másik böngészőt használ ehhez a generátorhoz!",
|
||||
"statusokunittestsbad": "Rendben",
|
||||
"statuslabelprotocolgood": "✔ Helyes!",
|
||||
"statuslabelprotocolgood1": "Ezt a generátort a helyi gépről futtatja. <br />Tipp: Győzdjön meg róla, hogy nem kapcsolódik a hálózatra: ",
|
||||
"statusokprotocolgood": "Rendben",
|
||||
"statuslabelprotocolbad": "⚠ Gondolja át!",
|
||||
"statuslabelprotocolbad1": "A jelek szerint élő honlapról futtatja a generátort. Használható tárcák készítéséhez javasoljuk, hogy ",
|
||||
"statuslabelprotocolbad2": "töltse le",
|
||||
"statuslabelprotocolbad3": "a GitHub-on található zip állományt és futtassa a generátort offline módban, helyi html állományként.",
|
||||
"statusokprotocolbad": "Rendben",
|
||||
"statuslabelkeypool1": "Az ügymenet során készített valamennyi Bitcoin cím és privát kulcs naplója. A lap újratöltésével új ügymenetet indíthat.",
|
||||
"statuskeypoolrefresh": "Frissítés",
|
||||
"statusokkeypool": "Rendben",
|
||||
|
||||
// single wallet html
|
||||
"newaddress": "Új cím előállítása",
|
||||
"singleprint": "Nyomtatás",
|
||||
"singlelabelbitcoinaddress": "Bitcoin cím:",
|
||||
"singlelabelprivatekey": "Privát kulcs (WIF, tárca import formátumban):",
|
||||
"singletip1": "<b>Egy bitcoin pénztárca</b> nem más, mint egy bitcoin címből és a hozzá tartozó privát kulcsból álló számpár. Egy ilyen pénztárcát állítottunk elő és jelenítettünk meg fent az Ön számára a Web böngészőben.",
|
||||
"singletip2": "<b>A pénztárca biztonságos megőrzése</b> érdekében nyomtassa ki vagy más módon rögzítse a bitcoin címet és privát kulcsot. Fontos, hogy a privát kulcsból készítsen másolatot, és tárolja biztonságos helyen. Ez a webhely nem tud az ön privát kulcsairól. Ha ismeri a PGP-t, akkor egyben letöltheti az egész web lapot, és ellenőrizheti, hogy a webhely szerzője álatal írt valódi változatot töltötte-e le. Ehhez össze kell hasonlítania a HTML-ből képzett SHA256 zanzát a webhely láblécében hivatkozott, aláírt verzió történetben lévő SHA256 zanzával. Ha elhagyja/megfrissíti a webhelyet vagy megnyomja az 'Új cím előállítása' gombot, akkor egy új privát kulcs áll elő, és az előzőleg megjelenített privát kulcs elvész. A bitcoin címhez tartozó privát kulcsot titokban kell tartani. Bárki, aki megszerzi ezt a kulcsot, el tudja költeni az ehhez a címhez tartozó összes bitcoint. Ha kinyomtatja a pénztárcát, akkor tárolja egy villámzáras vízhatlan nylon-zacskóban. A papír pénztárcát tekintse úgy, mintha pénz lenne.",
|
||||
"singlelabelprivatekey": "Privát kulcs:",
|
||||
"singletip1": "<b>A bitcoin pénztárca</b> nem más, mint egy bitcoin címből és a hozzá tartozó privát kulcsból álló számpár. Egy ilyen pénztárcát állítottunk elő és jelenítettünk meg fent az Ön számára a Web böngészőben.",
|
||||
"singletip2": "<b>A pénztárca biztonságos megőrzése</b> érdekében nyomtassa ki vagy más módon rögzítse a bitcoin címet és privát kulcsot. Fontos, hogy a privát kulcsból készítsen másolatot, és tárolja biztonságos helyen. Ez a webhely nem tárol az ön privát kulcsaival kapcsolatos információt. Ha ismeri a PGP-t, akkor egyben letöltheti az egész honlapot, és ellenőrizheti, hogy a webhely szerzője álatal írt valódi változatot töltötte-e le. Ehhez össze kell hasonlítania a HTML-ből képzett SHA256 zanzát a webhely láblécében hivatkozott, digitálisan aláírt verzió történetben lévő SHA256 zanzával. Amennyiben elhagyja vagy frissíti a webhelyet illetve megnyomja az 'Új cím előállítása' gombot, akkor új privát kulcs készül és az előzőleg megjelenített privát kulcs elvész. A bitcoin címhez tartozó privát kulcsot titokban kell tartani. Bárki, aki megszerzi ezt a kulcsot, el tudja költeni a címhez tartozó valamennyi bitcoint. Ha kinyomtatja a pénztárcát, akkor tárolja egy villámzáras vízhatlan nejlonzacskóban. A papírtárcát kezelje úgy, mintha pénz lenne.",
|
||||
"singletip3": "<b>Pénzt úgy tehet</b> a pénztárcájába, hogy másokkal bitcoinokat küldet erre a Bitcoin címre.",
|
||||
"singletip4": "<b>A pénztárca egyenlegét</b> úgy kérdezheti le, hogy elmegy a blockchain.info vagy a blockexplorer.com weblapokra, és ott beadja ezt a Bitcoin címet.",
|
||||
"singletip4": "<b>A pénztárca egyenlegét</b> úgy kérdezheti le, hogy elmegy a blockchain.info vagy a blockexplorer.com weblapokra, és ott begépeli ezt a Bitcoin címet.",
|
||||
"singletip5": "<b>Ha el akarja költeni a bitcoinjait,</b> akkor menjen a blockchain.info weblapra, és a privát kulcson lévő teljes egyenleget töltse át (sweep) a weblapon lévő számlájára. A pénzt úgy is elköltheti, hogy letölti valamelyik népszerű p2p bitcoin klienst, és beimportálja a privát kulcsot a p2p kliens pénztárcájába. Ne feledje, hogy miután beimportálta a kulcsot a p2p bitcoin kliensbe, a kulcsot a p2p kliens a pénztárcában lévő többi kulccsal együtt tárolja. Pénz küldésekor a visszajáró pénzt a p2p kliens pénztárcájában lévő másik bitcoin címre fogják küldeni. Ekkor biztonsági másolatot kell készítenie a p2p kliens pénztárcáról, és a másolatot biztos helyen kell őriznie, mivel a maradék bitcoinjait a pénztárca kulcsai tárolják. Satoshi tanácsa, hogy pénztárcát soha ne töröljünk.",
|
||||
|
||||
// paper wallet html
|
||||
|
@ -166,8 +166,8 @@
|
|||
"detaillabelprivmini": "Mini formátumú Privát Kulcs (22, 26 vagy 30 karakter, amely egy 'S'-sel kezdődik):",
|
||||
"detaillabelpassphrase": "BIP38 jelmondat",
|
||||
"detailbip38decryptbutton": "BIP38 dekódolás",
|
||||
"detailbip38encryptbutton": "Encrypt BIP38", //TODO: please translate
|
||||
"detailbip38encryptbutton": "BIP38 titkosítás",
|
||||
"detaillabelq1": "Hogyan lehet dobókockával pénztárcát készíteni? Mit jelent a B6 formátum?",
|
||||
"detaila1": "Egy Bitcoin pénztárca előállításakor nagyon fontos, hogy a felhasznált véletlen számok valóban véletlenek legyenek. A fizikai véletlen jobb, mint a számítógéppel előállított pszeudo-véletlen. Fizikai véletlen a legegyszerűbben egy dobókockával állítható elő. Ha szeretne egy Bitcoin privát címet előállítani, akkor csupán egy dobókockára van szüksége, mellyel 99-szer kell dobni. Jegyezze fel minden egyes dobása eredményét. Az eredmények feljegyzésekor a következő szabályokat kövesse: 1->1, 2->2, 3->3, 4->4, 5->5, 6->0. Ha így tesz, akkor a privát kulcshoz tartozó véletlen számot B6 formátumban, vagyis 6-os számrendszerben rögzíti. Írja be ezt a 99 karakterből álló 6-os számrendszerbeli privát kulcsot a fenti szövegmezőbe, majd nyomja meg a 'Részletek megjelenítése' gombot. Ekkor megjelenik az a Bitcoin cím, amely ehhez a privát kulcshoz tartozik. Érdemes felírni a WIF formátumú privát kulcsot is, mivel ezt szélesebb körben használják."
|
||||
"detaila1": "A Bitcoin pénztárca előállításakor nagyon fontos, hogy a felhasznált véletlen számok valóban véletlenek legyenek. A fizikai véletlen jobb, mint a számítógéppel előállított pszeudo-véletlen. Fizikai véletlen a legegyszerűbben egy dobókockával állítható elő. Ha szeretne egy Bitcoin privát címet előállítani, akkor csupán egy dobókockára van szüksége, mellyel 99-szer kell dobni. Jegyezze fel minden egyes dobása eredményét. Az eredmények feljegyzésekor a következő szabályokat kövesse: 1->1, 2->2, 3->3, 4->4, 5->5, 6->0. Ha így tesz, akkor a privát kulcshoz tartozó véletlen számot B6 formátumban, vagyis 6-os számrendszerben rögzíti. Írja be ezt a 99 karakterből álló 6-os számrendszerbeli privát kulcsot a fenti szövegmezőbe, majd nyomja meg a 'Részletek megjelenítése' gombot. Ekkor megjelenik az a Bitcoin cím, amely ehhez a privát kulcshoz tartozik. Érdemes felírni a WIF formátumú privát kulcsot is, mivel ezt szélesebb körben használják."
|
||||
};
|
||||
})(ninja.translator);
|
||||
})(ninja.translator);
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
(function (translator) {
|
||||
translator.translations["pt-br"] = {
|
||||
// javascript alerts or messages
|
||||
"testneteditionactivated": "EDIÇÃO DO TESTNET ATIVADA",
|
||||
"testneteditionactivated": "EDIÇÃO DA TESTNET ATIVADA",
|
||||
"paperlabelbitcoinaddress": "Endereço Bitcoin:",
|
||||
"paperlabelprivatekey": "Chave privada:",
|
||||
"paperlabelencryptedkey": "Chave privada criptografada (Senha necessária)",
|
||||
"bulkgeneratingaddresses": "Generando endereços... ",
|
||||
"bulkgeneratingaddresses": "Gerando endereços... ",
|
||||
"brainalertpassphrasetooshort": "A senha introduzida é pequena demais.\n\n",
|
||||
"brainalertpassphrasewarning": "Aviso: É importante que escolha uma senha forte, para evitar ataques de força bruta que tentem adivinhar sua senha e roubar seus bitcoins.",
|
||||
"brainalertpassphrasewarning": "Aviso: É importante que você escolha uma senha forte, para evitar ataques de força bruta que tentem adivinhar sua senha e roubar seus bitcoins.",
|
||||
"brainalertpassphrasedoesnotmatch": "As senhas digitadas não são iguais.",
|
||||
"detailalertnotvalidprivatekey": "O texto que você digitou não é uma chave privada válida",
|
||||
"detailconfirmsha256": "O texto que você digitou não é uma chave privada válida\n\nQuer usar esse texto como se fosse uma senha e gerar uma chave privada usando um hash SHA256 dessa senha?\n\nAviso: É importante escolher uma senha forte para evitar ataques de força bruta que tentem adivinhá-la e roubar seus bitcoins.",
|
||||
"detailconfirmsha256": "O texto que você digitou não é uma chave privada válida\n\nDeseja usar esse texto como se fosse uma senha e gerar uma chave privada usando um hash SHA256 dessa senha?\n\nAviso: É importante escolher uma senha forte para evitar ataques de força bruta que tentem adivinhá-la e roubar seus bitcoins.",
|
||||
"bip38alertincorrectpassphrase": "Senha incorreta para essa chave privada criptografada.",
|
||||
"bip38alertpassphraserequired": "Senha necessária para a chave BIP38",
|
||||
"vanityinvalidinputcouldnotcombinekeys": "Entrada inválida. Não foi possível combinar as chaves.",
|
||||
"vanityalertinvalidinputpublickeysmatch": "Entrada inválida. As chaves públicas de ambas entradas são iguais. Você deve inserir duas chaves diferentes.",
|
||||
"vanityalertinvalidinputcannotmultiple": "Entrada inválida. Não é possível multiplicar duas chaves públicas. Clique em 'Somar' para somar duas chaves públicas para adquirir um endereço bitcoin.",
|
||||
"vanityalertinvalidinputpublickeysmatch": "Entrada inválida. As chaves públicas de ambas as entradas são iguais. Você deve inserir duas chaves diferentes.",
|
||||
"vanityalertinvalidinputcannotmultiple": "Entrada inválida. Não é possível multiplicar duas chaves públicas. Clique em 'Somar' e some duas chaves públicas para adquirir um endereço bitcoin.",
|
||||
"vanityprivatekeyonlyavailable": "Disponível apenas quando se combinam duas chaves privadas",
|
||||
"vanityalertinvalidinputprivatekeysmatch": "Entrada inválida. As chaves privadas de ambas as entradas são iguais. Você deve inserir duas chaves diferentes.",
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
|||
"bulkwallet": "Múltiplos endereços",
|
||||
"brainwallet": "Carteira mental",
|
||||
"vanitywallet": "Carteira personalizada",
|
||||
"splitwallet": "Split Wallet", //TODO: please translate
|
||||
"splitwallet": "Carteira fracionada",
|
||||
"detailwallet": "Detalhes da carteira",
|
||||
|
||||
// footer html
|
||||
|
@ -45,42 +45,42 @@
|
|||
"footerlabelnowarranty": "Sem garantia.",
|
||||
|
||||
// status html
|
||||
"statuslabelcryptogood": "✔ Good!", //TODO: please translate
|
||||
"statuslabelcryptogood": "✔ Boa!",
|
||||
"statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate
|
||||
"statusokcryptogood": "OK", //TODO: please translate
|
||||
"statuslabelcryptobad": "× Oh no!", //TODO: please translate
|
||||
"statusokcryptogood": "OK",
|
||||
"statuslabelcryptobad": "× Oh não!",
|
||||
"statuslabelcryptobad1": "Your browser does NOT support window.crypto.getRandomValues. You should use a more modern browser with this generator to increase the security of the keys generated.",
|
||||
"statusokcryptobad": "OK", //TODO: please translate
|
||||
"statuslabelunittestsgood": "✔ Good!", //TODO: please translate
|
||||
"statusokcryptobad": "OK",
|
||||
"statuslabelunittestsgood": "✔ Boa!",
|
||||
"statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate
|
||||
"statusokunittestsgood": "OK", //TODO: please translate
|
||||
"statuslabelunittestsbad": "× Oh no!", //TODO: please translate
|
||||
"statusokunittestsgood": "OK",
|
||||
"statuslabelunittestsbad": "× Oh não!",
|
||||
"statuslabelunittestsbad1": "Some synchronous unit tests DID NOT pass. You should find another browser to use with this generator.", //TODO: please translate
|
||||
"statusokunittestsbad": "OK", //TODO: please translate
|
||||
"statuslabelprotocolgood": "✔ Good!", //TODO: please translate
|
||||
"statusokunittestsbad": "OK",
|
||||
"statuslabelprotocolgood": "✔ Boa!",
|
||||
"statuslabelprotocolgood1": "You are running this generator from your local computer. <br />Tip: Double check you are offline by trying ", //TODO: please translate
|
||||
"statusokprotocolgood": "OK", //TODO: please translate
|
||||
"statuslabelprotocolbad": "⚠ Think twice!", //TODO: please translate
|
||||
"statusokprotocolgood": "OK",
|
||||
"statuslabelprotocolbad": "⚠ Pense duas vezes!",
|
||||
"statuslabelprotocolbad1": "You appear to be running this generator online from a live website. For valuable wallets it is recommended to", //TODO: please translate
|
||||
"statuslabelprotocolbad2": "download", //TODO: please translate
|
||||
"statuslabelprotocolbad2": "download",
|
||||
"statuslabelprotocolbad3": "the zip file from GitHub and run this generator offline as a local html file.", //TODO: please translate
|
||||
"statusokprotocolbad": "OK", //TODO: please translate
|
||||
"statusokprotocolbad": "OK",
|
||||
"statuslabelkeypool1": "This is a log of all the Bitcoin Addresses and Private Keys you generated during your current session. Reloading the page will create a new session.", //TODO: please translate
|
||||
"statuskeypoolrefresh": "Refresh", //TODO: please translate
|
||||
"statusokkeypool": "OK", //TODO: please translate
|
||||
"statuskeypoolrefresh": "Atualizar",
|
||||
"statusokkeypool": "OK",
|
||||
|
||||
// single wallet html
|
||||
"newaddress": "Gerar endereço",
|
||||
"singleprint": "Imprimir",
|
||||
"singlelabelbitcoinaddress": "Endereço Bitcoin",
|
||||
"singlelabelprivatekey": "Chave privada (Wallet Import Format):",
|
||||
"singletip1": "<b>Uma carteira Bitcoin</b> é tão simples quanto um simples pareamento de um endereço Bitcoin com a sua chave privada Bitcoin correspondente. Essa carteira foi gerada para você em seu navegador web e está sendo exibida acima.",
|
||||
"singletip2": "<b>Para proteger essa carteira</b> você deve imprimir ou anotar/salvar o endereço Bitcoin e a chave privada. É importante que você faça uma cópia de segurança da sua chave privada e armazene-a em um local seguro. Esse site não toma conhecimento da sua chave privada. Se você for familiar com PGP, você pode baixar essa pagina HTML tudo-em-um e verificar se você tem uma versão autêntica do autor deste site ao fazer a correspondência do hash SHA256 deste HTML com o hash SHA256 disponível na versão assinada do documento linkado no rodapé deste site. Se você sair/atualizar essa página ou apertar o botão Gerar Novo Endereço, então uma nova chave privada será gerada e a chave exibida anteriormente não será recuperável. A sua chave privada Bitcoin deve ser mantida como um segredo. Qualquer pessoa que tiver acesso a ela poderá gastar todos os seus bitcoins associados com aquele endereço. Se você imprimir sua carteira, armazene-a em um saco plástico selado para mantê-la longe da água. Trate uma carteira em papel como se fosse dinheiro.",
|
||||
"singletip1": "<b>Uma carteira Bitcoin</b> nada mais é do que um endereço Bitcoin e a sua chave privada Bitcoin correspondente. Essa carteira foi gerada para você em seu navegador web e está sendo exibida acima.",
|
||||
"singletip2": "<b>Para proteger essa carteira</b> você deve imprimir ou anotar/salvar o endereço Bitcoin e a sua chave privada correspondente. É importante que você faça uma cópia de segurança da sua chave privada e armazene-a em um local seguro. Esse site não toma conhecimento da sua chave privada. Se você for familiar com criptografia PGP, você pode baixar essa página HTML em um arquivo único e verificar se você tem uma versão autêntica do autor deste site ao fazer a correspondência do hash SHA256 deste HTML com o hash SHA256 disponível na versão assinada do arquivo contido no link no rodapé deste site. Se você sair/atualizar essa página ou apertar o botão Gerar Novo Endereço, então uma nova chave privada será gerada e a chave exibida anteriormente não será recuperável. A sua chave privada Bitcoin deve ser mantida em um segredo. Qualquer pessoa que tiver acesso a ela poderá gastar todos os seus bitcoins associados com aquele endereço. Se você imprimir sua carteira, armazene-a em um saco plástico selado para mantê-la longe da água. Trate sua carteira em papel como se fosse dinheiro.",
|
||||
"singletip3": "<b>Adicione fundos</b> para essa carteira ao indicar para outras pessoas enviarem bitcoins para o seu endereço Bitcoin.",
|
||||
"singletip4": "<b>Verifique seu saldo</b> visitando os sites blockchain.info ou blockexplorer.com e digitando o seu endereço Bitcoin.",
|
||||
"singletip5": "<b>Gaste seus bitcoins</b> visitando o site blockchain.info e esvaziando completamente o seu saldo de sua chave privada para sua conta no site. Você também pode gastar seus fundos ao baixar um cliente bitcoin p2p popular e importar sua chave privada para a carteira do aplicativo. Tenha em mjente que quando você importa uma chave única para um cliente bitcoin p2p e gasta seus fundos, sua chave será agrupada com outras chavfes privadas no aplicativo de carteira. Quando você realizar uma transação o seu troco será enviado para outro endereço bitcoin dentro do seu aplicativo de carteira. Você deve então fazer backup da sua carteira em seu aplicativo e mantê-la em segurança, visto que seus bitcoins remanescentes agora serão armazenados nela. Um conselho do Satoshi Nakamoto é de que uma carteira nunca deve ser apagada.",
|
||||
"singleshare": "COMPARTILHE", //TODO: please translate
|
||||
"singlesecret": "SECRETA", //TODO: please translate
|
||||
"singletip5": "<b>Gaste seus bitcoins</b> visitando o site blockchain.info e esvaziando completamente o seu saldo de sua chave privada para sua conta no site. Você também pode gastar seus fundos ao baixar um cliente bitcoin p2p popular e importar sua chave privada para a carteira do aplicativo. Tenha em mente que quando você importa uma chave única para um cliente bitcoin p2p e gasta seus fundos, sua chave será agrupada com outras chavfes privadas no aplicativo de carteira. Quando você realizar uma transação o seu troco será enviado para outro endereço bitcoin dentro do seu aplicativo de carteira. Você deve então fazer backup da sua carteira em seu aplicativo e mantê-la em segurança, visto que seus bitcoins remanescentes agora serão armazenados nela. Um conselho do Satoshi Nakamoto é de que uma carteira nunca deve ser apagada.",
|
||||
"singleshare": "COMPARTILHE",
|
||||
"singlesecret": "SECRETA",
|
||||
|
||||
// paper wallet html
|
||||
"paperlabelhideart": "Ocultar figura",
|
||||
|
@ -98,7 +98,7 @@
|
|||
"bulkgenerate": "Gerar",
|
||||
"bulkprint": "Imprimir",
|
||||
"bulklabelcsv": "Valores separados por vírgula:",
|
||||
"bulklabelformat": "Índice,Dirección,Clave privada (formato para importar)",
|
||||
"bulklabelformat": "Índice,Endereço,Chave privada (formato para importar)",
|
||||
"bulklabelq1": "¿Por qué debo usar \"Direcciones en masa\" para aceptar Bitcoins en mi web?",
|
||||
"bulka1": "La forma tradicional de aceptar bitcoins en tu web requiere tener instalado el cliente oficial de bitcoin (\"bitcoind\"). Sin embargo muchos servicios de hosting no permiten instalar dicho cliente. Además, ejecutar el cliente en tu servidor supone que las claves privadas están también en el servidor y podrían ser comprometidas en caso de intrusión. Al usar este mecanismo, puedes subir al servidor sólo las dirección de bitcoin y no las claves privadas. De esta forma no te tienes que preocupar de que alguien robe la cartera si se cuelan en el servidor.",
|
||||
"bulklabelq2": "¿Cómo uso \"Direcciones en masa\" para aceptar bitcoins en mi web?",
|
||||
|
@ -152,15 +152,15 @@
|
|||
"detaillabelpublickey": "Chave pública (130 caracteres [0-9A-F]):",
|
||||
"detaillabelpublickeycomp": "Chave pública (comprimida, 66 caracteres [0-9A-F]):",
|
||||
"detaillabelprivwif": "Chave privada para importação (51 caracteres em base58, inicia com um",
|
||||
"detaillabelprivwifcomp": "Chave privada para importação (comprimida, 52 caracteres em base58, inicia com",
|
||||
"detailcompwifprefix": "'K' o 'L'",
|
||||
"detaillabelprivwifcomp": "Chave privada para importação (comprimida, 52 caracteres em base58, inicia com",
|
||||
"detailcompwifprefix": "'K' ou 'L'",
|
||||
"detaillabelprivhex": "Chave privada em formato hexadecimal (64 caracteres [0-9A-F]):",
|
||||
"detaillabelprivb64": "Chave privada em base64 (44 caracteres):",
|
||||
"detaillabelprivmini": "Chave privada en formato mini (22, 26 ou 30 caracteres, inicia com 'S'):",
|
||||
"detaillabelpassphrase": "Senha BIP38",
|
||||
"detailbip38decryptbutton": "Desencriptar BIP38",
|
||||
"detailbip38encryptbutton": "Encrypt BIP38", //TODO: please translate
|
||||
"detaillabelq1": "Como eu faço uma carteira usando um dado? O que é B6?",
|
||||
"detailbip38decryptbutton": "Descriptografar BIP38",
|
||||
"detailbip38encryptbutton": "Criptografar em BIP38",
|
||||
"detaillabelq1": "Como eu faço uma carteira usando um dado? O que é o formato B6?",
|
||||
"detaila1": "Uma parte importante ao criar um carteira Bitcoin é se assegurar que os números aleatórios usados para criar a carteira sejam realmente aleatórios. A aleatoriedade física é melhor do que a pseudo-aleatoriedade gerada por computador. A maneira mais fácil de gerar aleatoriedade física é com dados. Para criar um chave privada Bitcoin você precisa de apenas um dado de seis lados, o qual você jogará 99 vezes. A cada jogada, anote o valor do dado. Ao anotar os valores, siga as seguintes regras: 1=1, 2=2, 3=3, 4=4, 5=5, 6=0. Ao fazer isso, você está anotando esse grande número aleatório, sua chave privada, no formato base 6 (B6). Você pode então digitar essa chave privada em base 6 contendo 99 caracteres no campo de texto acima e clicar em Ver Detalhes. Você então verá o endereço Bitcoin associado com sua chave privada. Você deve também anotar sua chave privada no formato WIF, já que ele é mais amplamente utilizado."
|
||||
};
|
||||
})(ninja.translator);
|
|
@ -144,11 +144,6 @@ input[type=checkbox] { position: relative; z-index: 20; }
|
|||
#busyblock.busy { display: block; }
|
||||
.hide { display: none; }
|
||||
.show { display: block; }
|
||||
|
||||
/* IE8 */
|
||||
.qrcodetable { border-width: 0px; border-style: none; border-color: #0000ff; border-collapse: collapse; }
|
||||
.qrcodetddark { border-width: 0px; border-style: none; border-color: #0000ff; border-collapse: collapse; padding: 0; margin: 0; width: 2px; height: 2px; background-color: #000000; }
|
||||
.qrcodetdlight { border-width: 0px; border-style: none; border-color: #0000ff; border-collapse: collapse; padding: 0; margin: 0; width: 2px; height: 2px; background-color: #ffffff; }
|
||||
|
||||
@media screen
|
||||
{
|
||||
|
|
|
@ -50,7 +50,10 @@
|
|||
|
||||
keyToECKeyWithBrain: function (key) {
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.priv == null) {
|
||||
if (btcKey.error != null) {
|
||||
alert(translator.get("detailalertnotvalidprivatekey") + "\n" + btcKey.error);
|
||||
}
|
||||
else if (btcKey.priv == null) {
|
||||
// enforce a minimum passphrase length
|
||||
if (key.length >= wallets.brainwallet.minPassphraseLength) {
|
||||
// Deterministic Wallet confirm box to ask if user wants to SHA256 the input to get a private key
|
||||
|
|
|
@ -48,29 +48,7 @@
|
|||
return canvas;
|
||||
},
|
||||
|
||||
// generate a QRCode and return it's representation as an Html table
|
||||
createTableHtml: function (text) {
|
||||
var typeNumber = qrC.getTypeNumber(text);
|
||||
var qr = new QRCode(typeNumber, QRCode.ErrorCorrectLevel.H);
|
||||
qr.addData(text);
|
||||
qr.make();
|
||||
var tableHtml = "<table class='qrcodetable'>";
|
||||
for (var r = 0; r < qr.getModuleCount() ; r++) {
|
||||
tableHtml += "<tr>";
|
||||
for (var c = 0; c < qr.getModuleCount() ; c++) {
|
||||
if (qr.isDark(r, c)) {
|
||||
tableHtml += "<td class='qrcodetddark'/>";
|
||||
} else {
|
||||
tableHtml += "<td class='qrcodetdlight'/>";
|
||||
}
|
||||
}
|
||||
tableHtml += "</tr>";
|
||||
}
|
||||
tableHtml += "</table>";
|
||||
return tableHtml;
|
||||
},
|
||||
|
||||
// show QRCodes with canvas OR table (IE8)
|
||||
// show QRCodes with canvas
|
||||
// parameter: keyValuePair
|
||||
// example: { "id1": "string1", "id2": "string2"}
|
||||
// "id1" is the id of a div element where you want a QRCode inserted.
|
||||
|
@ -84,10 +62,7 @@
|
|||
document.getElementById(key).appendChild(qrC.createCanvas(value, sizeMultiplier));
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
// for browsers that do not support canvas (IE8)
|
||||
document.getElementById(key).innerHTML = qrC.createTableHtml(value);
|
||||
}
|
||||
catch (e) { }
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
}
|
||||
testResults += passCount + " of " + testCount + " synchronous tests passed";
|
||||
if (passCount < testCount) {
|
||||
testResults += "<b>" + (testCount - passCount) + " unit test(s) failed</b>";
|
||||
testResults += "<br/><b>" + (testCount - passCount) + " unit test(s) failed</b>";
|
||||
}
|
||||
if (showOutput) {
|
||||
div.innerHTML = "<h3>Unit Tests</h3><div id=\"unittestresults\">" + testResults + "<br/><br/></div>";
|
||||
|
@ -621,6 +621,279 @@
|
|||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
//BigInteger tests
|
||||
testBigIntegerShouldWorkWithoutNew: function () {
|
||||
var bi = BigInteger('12345')
|
||||
if (bi.toString(10) != '12345') {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldWorkWithStringInput: function () {
|
||||
if (new BigInteger('12345').toString(16) != '3039') return false;
|
||||
if (new BigInteger('29048849665247').toString(16) != '1a6b765d8cdf') return false;
|
||||
if (new BigInteger('-29048849665247').toString(16) != '-1a6b765d8cdf') return false;
|
||||
if (new BigInteger('1A6B765D8CDF', 16).toString(16) != '1a6b765d8cdf') return false;
|
||||
if (new BigInteger('FF', 16).toString() != '255') return false;
|
||||
if (new BigInteger('1A6B765D8CDF', 16).toString() != '29048849665247') return false;
|
||||
if (new BigInteger('a89c e5af8724 c0a23e0e 0ff77500', 16).toString(16) != 'a89ce5af8724c0a23e0e0ff77500') return false;
|
||||
if (new BigInteger('123456789abcdef123456789abcdef123456789abcdef', 16).toString(16) != '123456789abcdef123456789abcdef123456789abcdef') return false;
|
||||
if (new BigInteger('10654321').toString() != '10654321') return false;
|
||||
if (new BigInteger('10000000000000000').toString(10) != '10000000000000000') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldImportExportTwosComplementBigEndian: function () {
|
||||
if (new BigInteger([1, 2, 3], 256).toString(16) != '10203') return false;
|
||||
if (new BigInteger([1, 2, 3, 4], 256).toString(16) != '1020304') return false;
|
||||
if (new BigInteger([1, 2, 3, 4, 5], 256).toString(16) != '102030405') return false;
|
||||
if (new BigInteger([1, 2, 3, 4, 5, 6, 7, 8], 256).toString(16) != '102030405060708') return false;
|
||||
if (new BigInteger([1, 2, 3, 4], 256).toByteArray().join(',') != '1,2,3,4') return false;
|
||||
if (new BigInteger([1, 2, 3, 4, 5, 6, 7, 8], 256).toByteArray().join(',') != '1,2,3,4,5,6,7,8') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldReturnProperBitLength: function () {
|
||||
if (new BigInteger('0').bitLength() != 0) return false;
|
||||
if (new BigInteger('1', 16).bitLength() != 1) return false;
|
||||
if (new BigInteger('2', 16).bitLength() != 2) return false;
|
||||
if (new BigInteger('3', 16).bitLength() != 2) return false;
|
||||
if (new BigInteger('4', 16).bitLength() != 3) return false;
|
||||
if (new BigInteger('8', 16).bitLength() != 4) return false;
|
||||
if (new BigInteger('10', 16).bitLength() != 5) return false;
|
||||
if (new BigInteger('100', 16).bitLength() != 9) return false;
|
||||
if (new BigInteger('123456', 16).bitLength() != 21) return false;
|
||||
if (new BigInteger('123456789', 16).bitLength() != 33) return false;
|
||||
if (new BigInteger('8023456789', 16).bitLength() != 40) return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldAddNumbers: function () {
|
||||
// test 1
|
||||
if (new BigInteger('14').add(new BigInteger('26')).toString(16) != '28') return false;
|
||||
|
||||
// test 2
|
||||
var k = new BigInteger('1234', 16);
|
||||
var r = k;
|
||||
for (var i = 0; i < 257; i++) r = r.add(k);
|
||||
if (r.toString(16) != '125868') return false;
|
||||
|
||||
// test 3
|
||||
var k = new BigInteger('abcdefabcdefabcdef', 16);
|
||||
var r = new BigInteger('deadbeef', 16);
|
||||
for (var i = 0; i < 257; i++) {
|
||||
r = r.add(k);
|
||||
}
|
||||
if (r.toString(16) != 'ac79bd9b79be7a277bde') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldSubtractNumbers: function () {
|
||||
// test 1
|
||||
if (new BigInteger('14').subtract(new BigInteger('26')).toString(16) != '-c') return false;
|
||||
// test 2
|
||||
if (new BigInteger('26').subtract(new BigInteger('14')).toString(16) != 'c') return false;
|
||||
// test 3
|
||||
if (new BigInteger('26').subtract(new BigInteger('26')).toString(16) != '0') return false;
|
||||
// test 4
|
||||
if (new BigInteger('-26').subtract(new BigInteger('26')).toString(16) != '-34') return false;
|
||||
// test 5
|
||||
var a = new BigInteger('31ff3c61db2db84b9823d320907a573f6ad37c437abe458b1802cda041d6384a7d8daef41395491e2', 16);
|
||||
var b = new BigInteger('6f0e4d9f1d6071c183677f601af9305721c91d31b0bbbae8fb790000', 16);
|
||||
var r = new BigInteger('31ff3c61db2db84b9823d3208989726578fd75276287cd9516533a9acfb9a6776281f34583ddb91e2', 16);
|
||||
if (a.subtract(b).compareTo(r) != 0) return false;
|
||||
// test 6
|
||||
var r = b.subtract(new BigInteger('14'));
|
||||
if (b.clone().subtract(new BigInteger('14')).compareTo(r) != 0) return false;
|
||||
// test 7
|
||||
var r = new BigInteger('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b', 16);
|
||||
if (r.subtract(new BigInteger('-1')).toString(16) != '7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681c') return false;
|
||||
// test 8
|
||||
// Carry and copy
|
||||
var a = new BigInteger('12345', 16);
|
||||
var b = new BigInteger('1000000000000', 16);
|
||||
if (a.subtract(b).toString(16) != '-fffffffedcbb') return false;
|
||||
// test 9
|
||||
var a = new BigInteger('12345', 16);
|
||||
var b = new BigInteger('1000000000000', 16);
|
||||
if (b.subtract(a).toString(16) != 'fffffffedcbb') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldMultiplyNumbers: function () {
|
||||
if (new BigInteger('1001', 16).multiply(new BigInteger('1234', 16)).toString(16) != '1235234') return false;
|
||||
if (new BigInteger('-1001', 16).multiply(new BigInteger('1234', 16)).toString(16) != '-1235234') return false;
|
||||
if (new BigInteger('-1001', 16).multiply(new BigInteger('-1234', 16)).toString(16) != '1235234') return false;
|
||||
|
||||
// test 4
|
||||
var n = new BigInteger('1001', 16);
|
||||
var r = n;
|
||||
for (var i = 0; i < 4; i++) {
|
||||
r = r.multiply(n);
|
||||
}
|
||||
if (r.toString(16) != '100500a00a005001') return false;
|
||||
|
||||
var n = new BigInteger('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 16);
|
||||
if (n.multiply(n).toString(16) != '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9978a8bd8acaa40') return false;
|
||||
if (n.multiply(n).multiply(n).toString(16) != '1b888e01a06e974017a28a5b4da436169761c9730b7aeedf75fc60f687b46e0cf2cb11667f795d5569482640fe5f628939467a01a612b023500d0161e9730279a7561043af6197798e41b7432458463e64fa81158907322dc330562697d0d600') return false;
|
||||
|
||||
if (new BigInteger('-100000000000').multiply(new BigInteger('3').divide(new BigInteger('4'))).toString(16) != '0') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldDivideNumbers: function () {
|
||||
if (new BigInteger('10').divide(new BigInteger('256')).toString(16) != '0') return false;
|
||||
if (new BigInteger('69527932928').divide(new BigInteger('16974594')).toString(16) != 'fff') return false;
|
||||
if (new BigInteger('-69527932928').divide(new BigInteger('16974594')).toString(16) != '-fff') return false;
|
||||
|
||||
var b = new BigInteger('39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729ab9b055c3a9458e4ce3289560a38e08ba8175a9446ce14e608245ab3a9978a8bd8acaa40', 16);
|
||||
var n = new BigInteger('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 16);
|
||||
if (b.divide(n).toString(16) != n.toString(16)) return false;
|
||||
|
||||
if (new BigInteger('1').divide(new BigInteger('-5')).toString(10) != '0') return false;
|
||||
|
||||
// // Regression after moving to word div
|
||||
var p = new BigInteger('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', 16);
|
||||
var a = new BigInteger('79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', 16);
|
||||
var as = a.square();
|
||||
if (as.divide(p).toString(16) != '39e58a8055b6fb264b75ec8c646509784204ac15a8c24e05babc9729e58090b9') return false;
|
||||
|
||||
var p = new BigInteger('ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', 16);
|
||||
var a = new BigInteger('fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);
|
||||
if (a.divide(p).toString(16) != 'ffffffff00000002000000000000000000000001000000000000000000000001') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldModNumbers: function () {
|
||||
if (new BigInteger('10').mod(new BigInteger('256')).toString(16) != 'a') return false;
|
||||
if (new BigInteger('69527932928').mod(new BigInteger('16974594')).toString(16) != '102f302') return false;
|
||||
if (new BigInteger('-69527932928').mod(new BigInteger('16974594')).toString(16) != '1000') return false;
|
||||
if (new BigInteger('10', 16).mod(new BigInteger('256')).toString(16) != '10') return false;
|
||||
if (new BigInteger('100', 16).mod(new BigInteger('256')).toString(16) != '0') return false;
|
||||
if (new BigInteger('1001', 16).mod(new BigInteger('256')).toString(16) != '1') return false;
|
||||
if (new BigInteger('100000000001', 16).mod(new BigInteger('256')).toString(16) != '1') return false;
|
||||
if (new BigInteger('100000000001', 16).mod(new BigInteger('257')).toString(16) != new BigInteger('100000000001', 16).mod(new BigInteger('257')).toString(16)) return false;
|
||||
if (new BigInteger('123456789012', 16).mod(new BigInteger('3')).toString(16) != new BigInteger('123456789012', 16).mod(new BigInteger('3')).toString(16)) return false;
|
||||
|
||||
var p = new BigInteger('ffffffff00000001000000000000000000000000ffffffffffffffffffffffff', 16);
|
||||
var a = new BigInteger('fffffffe00000003fffffffd0000000200000001fffffffe00000002ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);
|
||||
if (a.mod(p).toString(16) != '0') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldShiftLeftNumbers: function () {
|
||||
if (new BigInteger('69527932928').shiftLeft(13).toString(16) != '2060602000000') return false;
|
||||
if (new BigInteger('69527932928').shiftLeft(45).toString(16) != '206060200000000000000') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldShiftRightNumbers: function () {
|
||||
if (new BigInteger('69527932928').shiftRight(13).toString(16) != '818180') return false;
|
||||
if (new BigInteger('69527932928').shiftRight(17).toString(16) != '81818') return false;
|
||||
if (new BigInteger('69527932928').shiftRight(256).toString(16) != '0') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldModInverseNumbers: function () {
|
||||
var p = new BigInteger('257');
|
||||
var a = new BigInteger('3');
|
||||
var b = a.modInverse(p);
|
||||
if (a.multiply(b).mod(p).toString(16) != '1') return false;
|
||||
|
||||
var p192 = new BigInteger('fffffffffffffffffffffffffffffffeffffffffffffffff', 16);
|
||||
var a = new BigInteger('deadbeef', 16);
|
||||
var b = a.modInverse(p192);
|
||||
if (a.multiply(b).mod(p192).toString(16) != '1') return false;
|
||||
|
||||
return true;
|
||||
},
|
||||
testBigIntegerShouldThrowOnModInverseOfZero: function () {
|
||||
var p = new BigInteger('257');
|
||||
var a = new BigInteger('0');
|
||||
//division by zero
|
||||
try {
|
||||
a.modInverse(p);
|
||||
}
|
||||
catch (e) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
testBigIntegerShouldAlwaysReturnPositiveNumber: function () {
|
||||
var z = new BigInteger('cc61934972bba029382f0bef146b228ca15d54f7e38b6cd5f6b382398b7a97a8', 16);
|
||||
var p = new BigInteger('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f', 16);
|
||||
var zInv = z.modInverse(p);
|
||||
if (zInv.signum() !== 1) return false; //zInv should be positive
|
||||
|
||||
return true;
|
||||
},
|
||||
testECKeyDoesntHangWithSpecificKey: function () {
|
||||
var key = "848b39bbe4c9ddf978d3d8f786315bdc3ba71237d5f780399e0026e1269313ef";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.getPubKeyHex() != "0478BC8F7CB4485E7A0314A698AA1600639FF2922D09C26DED5F730CAC4784477D2B325922459F017AC1E8775436D11D7F84BD84E11CB64FC9BE110931D0C990CE"
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
// test checksum exceptions
|
||||
testUncompressedWifShouldFailChecksum: function () {
|
||||
// original key: 5KjQAHniFiy18SU7eenyJ9EPYUkjrbiBPfDqw987QjT5vehVQZV K->k
|
||||
var key = "5kjQAHniFiy18SU7eenyJ9EPYUkjrbiBPfDqw987QjT5vehVQZV";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error.toString().indexOf("failed") == -1) { //Checksum validation failed!
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
},
|
||||
testCompressedWifShouldFailChecksum: function () {
|
||||
// original key: L5g9E16m5zEBZqQgMBouUfL6VwW49vCks1hgyxrPHkN8jNNdWTTk g->G
|
||||
var key = "L5G9E16m5zEBZqQgMBouUfL6VwW49vCks1hgyxrPHkN8jNNdWTTk";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error.toString().indexOf("failed") == -1) { //Checksum validation failed!
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
},
|
||||
// test range of valid private key values for the secp256k1 curve, when specified in hex is
|
||||
// [0x1, 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364140]
|
||||
testBigIntegerZeroShouldSetError: function () {
|
||||
var key = "0000000000000000000000000000000000000000000000000000000000000000";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
||||
},
|
||||
testBigIntegerOutOfCurveRangeShouldSetError1: function () {
|
||||
var key = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
testBigIntegerOutOfCurveRangeShouldSetError2: function () {
|
||||
var key = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364142";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
testBigIntegerOutOfCurveRangeShouldSetError3: function () {
|
||||
var key = "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
|
||||
var btcKey = new Bitcoin.ECKey(key);
|
||||
if (btcKey.error == null) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
},
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue