This commit is contained in:
Katherine Fang 2017-11-07 04:01:02 +00:00 committed by GitHub
commit ecc9473b5c
16 changed files with 434 additions and 407 deletions

View file

@ -15,21 +15,32 @@ https://bitcointalk.org/index.php?topic=43496.0
Donation Address: 1NiNja1bUmhSoTXozBRBEtR8LeF9TGbZBN Donation Address: 1NiNja1bUmhSoTXozBRBEtR8LeF9TGbZBN
END USER NOTES: END USER NOTES:
1) To print QRCode in IE8 you must enable the "Print Background Colors and 1) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
Images" checkbox on the "Page Setup" screen. 2) Requires IE9+, Firefox, Chrome or sufficient JavaScript support.
2) For Bulk Wallet I recommended using Google Chrome, it's the fastest. 3) Mobile Safari only works with iPhone4 or newer devices.
3) Requires IE8+, Firefox, Chrome or sufficient JavaScript support.
4) Mobile Safari only works with iPhone4 or newer devices.
Older devices timeout while executing JavaScript. 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. 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.
7) BIP38 most likely will not work on mobile devices due to hardware limitations.
Here is a signed list of file names and version history. 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 2016-07-31: status ACTIVE
bitaddress.org-v3.2.1-SHA256-.html bitaddress.org-v3.2.1-SHA256-42c3bcb643c451689e5bd1499ed4b516be2da06d2fe3886b0dd15b8fc2525ecd.html
- BigInteger modInverse should be positive - BigInteger modInverse should be positive
- throw if modInverse 0 - throw if modInverse 0
- improve BigInteger constructor so that it works if caller forgets 'new' - improve BigInteger constructor so that it works if caller forgets 'new'

View file

@ -18,19 +18,38 @@ https://bitcointalk.org/index.php?topic=43496.0
Donation Address: 1NiNja1bUmhSoTXozBRBEtR8LeF9TGbZBN Donation Address: 1NiNja1bUmhSoTXozBRBEtR8LeF9TGbZBN
END USER NOTES: END USER NOTES:
1) To print QRCode in IE8 you must enable the "Print Background Colors and 1) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
Images" checkbox on the "Page Setup" screen. 2) Requires IE9+, Firefox, Chrome or sufficient JavaScript support.
2) For Bulk Wallet I recommended using Google Chrome, it's the fastest. 3) Mobile Safari only works with iPhone4 or newer devices.
3) Requires IE8+, Firefox, Chrome or sufficient JavaScript support.
4) Mobile Safari only works with iPhone4 or newer devices.
Older devices timeout while executing JavaScript. 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. 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.
7) BIP38 most likely will not work on mobile devices due to hardware limitations.
Here is a signed list of file names and version history. 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 2016-02-19: status ACTIVE
bitaddress.org-v3.2.0-SHA256-ad4fd171c647772aa76d0ce828731b01ca586596275d43a94008766b758e8736.html bitaddress.org-v3.2.0-SHA256-ad4fd171c647772aa76d0ce828731b01ca586596275d43a94008766b758e8736.html
- switch languages without full page load - switch languages without full page load
@ -321,11 +340,11 @@ bitaddress.org-v0.1-SHA1-f40e706490f3eb2be56c31ddbf4c8646cd51ef40.html
-----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1 Version: GnuPG v1
iQEcBAEBAgAGBQJWx8DZAAoJEIdJe5Fjl09aFeEH/2wrQWW3YrDP1LuMfOEhydJ6 iQEcBAEBAgAGBQJYXsrGAAoJEIdJe5Fjl09aoeMH/jtuyhZTOsVcvR5AWlFDxCqe
4DsGN1hBRqR1qVzGWxFjwcHLrY95C0u+P0HI82riQF7+q+IKwU9KJWU2+ryfBTAG gEMXlBoss+ICZb+d394xkjqfczQwc8g3zg6CLmp13ftuqdC5BZSMEfZFb3Hj8fPo
Px8CTMw2kL6lgk854UqbpdLvLiZUEgjpyiF2mtptlH4ruVFLzHmVe9CbjLU7GPOK dGyRpNBpai19P6dt8g5BjQ/ZEejZrmQvNK8kCmmCf8fdBr95h09g0ZjQyLfLXUu2
Nni8oeYH5LWf5VUpSAZh6sGe39vfMQuEtREnpBcP+aJM8Mp5jwKHz2payWTNaTSa vzQBSNy1G9WL1xJmNhcRf6cn/wDQPDIKNUNDySuDPDNHWWUX4nswbggb4ae9Xmyg
UXoYqY/ehQho3ILm0a5lEkGFyJC3ObJXRSiErGucFBDKM0SITlREfFEQDcRMvmrZ o9VhhCmkqgZ5Wd6f+AEXQVWe1uEaPmysRhaOHiw6DB6DpAZoeOG14LUQ/qTOtVFj
JaWrLi+dVmbMXXEVJZSoed5i1cOLA+byeay3UcDXcmz53PIAhSrZWFfMv22Re6M= nPrswwbrX3D2X0C+X0ZnZkFSkidj2MuPE53qnMa2NNMtzhvFS9cXP9i9xyiH6/w=
=FiVM =wZb6
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----

View file

@ -9,7 +9,6 @@ module.exports = function (grunt) {
input: "./src/bitaddress-ui.html", input: "./src/bitaddress-ui.html",
output: "./bitaddress.org.html", output: "./bitaddress.org.html",
tokens: [ tokens: [
{ token: "//array.map.js", file: "./src/array.map.js" },
{ token: "//biginteger.js", file: "./src/biginteger.js" }, { token: "//biginteger.js", file: "./src/biginteger.js" },
{ token: "//bitcoinjs-lib.js", file: "./src/bitcoinjs-lib.js" }, { token: "//bitcoinjs-lib.js", file: "./src/bitcoinjs-lib.js" },
{ token: "//bitcoinjs-lib.address.js", file: "./src/bitcoinjs-lib.address.js" }, { token: "//bitcoinjs-lib.address.js", file: "./src/bitcoinjs-lib.address.js" },

View file

@ -1,4 +1,4 @@
bitaddress.org # bitaddress.org
JavaScript Client-Side Bitcoin Wallet Generator JavaScript Client-Side Bitcoin Wallet Generator
Now Bitcoin addresses and their corresponding private key can be conveniently 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 1NiNja1bUmhSoTXozBRBEtR8LeF9TGbZBN
END USER NOTES: END USER NOTES:
1) To print QRCode in IE8 you must enable the "Print Background Colors and
Images" checkbox on the "Page Setup" screen. 1) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
2) For Bulk Wallet I recommended using Google Chrome, it's the fastest.
3) Requires IE8+, Firefox, Chrome or sufficient JavaScript support. 2) Requires IE9+, Firefox, Chrome or sufficient JavaScript support.
4) Mobile Safari only works with iPhone4 or newer devices.
3) Mobile Safari only works with iPhone4 or newer devices.
Older devices timeout while executing JavaScript. 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. 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: 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. libraries are separated with HTML script tags.
Summary of JavaScript functions with a redistributable license: Summary of JavaScript functions with a redistributable license:
JavaScript function License
------------------- -------------- JavaScript function | License
Array.prototype.map Public Domain ------------------- | --------------
window.Crypto BSD License Array.prototype.map | Public Domain
window.SecureRandom BSD License window.Crypto | BSD License
window.EllipticCurve BSD License window.SecureRandom | BSD License
window.BigInteger BSD License window.EllipticCurve | BSD License
window.QRCode MIT License window.BigInteger | BSD License
window.Bitcoin MIT License window.QRCode | MIT License
window.Bitcoin | MIT License
The bitaddress.org software is available under The MIT License (MIT) The bitaddress.org software is available under The MIT License (MIT)
Copyright (c) 2011-2013 bitaddress.org Copyright (c) 2011-2013 bitaddress.org

View file

@ -16,7 +16,6 @@
Summary of JavaScript functions with a redistributable license: Summary of JavaScript functions with a redistributable license:
JavaScript function License JavaScript function License
******************* *************** ******************* ***************
Array.prototype.map Public Domain
window.Crypto BSD License window.Crypto BSD License
window.SecureRandom BSD License window.SecureRandom BSD License
window.EllipticCurve BSD License window.EllipticCurve BSD License
@ -26,7 +25,7 @@
window.Crypto_scrypt MIT License window.Crypto_scrypt MIT License
The bitaddress.org software is available under The MIT License (MIT) 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 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 associated documentation files (the "Software"), to deal in the Software without restriction, including
@ -49,65 +48,6 @@
<title>bitaddress.org</title> <title>bitaddress.org</title>
<meta charset="utf-8"> <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"> <script type="text/javascript">
/*! /*!
* Crypto-JS v2.5.4 Crypto.js * Crypto-JS v2.5.4 Crypto.js
@ -5720,19 +5660,23 @@ Bitcoin.ECKey = (function () {
this.priv = BigInteger.fromByteArrayUnsigned(input); this.priv = BigInteger.fromByteArrayUnsigned(input);
} else if ("string" == typeof input) { } else if ("string" == typeof input) {
var bytes = null; var bytes = null;
if (ECKey.isWalletImportFormat(input)) { try{
bytes = ECKey.decodeWalletImportFormat(input); if (ECKey.isWalletImportFormat(input)) {
} else if (ECKey.isCompressedWalletImportFormat(input)) { bytes = ECKey.decodeWalletImportFormat(input);
bytes = ECKey.decodeCompressedWalletImportFormat(input); } else if (ECKey.isCompressedWalletImportFormat(input)) {
this.compressed = true; bytes = ECKey.decodeCompressedWalletImportFormat(input);
} else if (ECKey.isMiniFormat(input)) { this.compressed = true;
bytes = Crypto.SHA256(input, { asBytes: true }); } else if (ECKey.isMiniFormat(input)) {
} else if (ECKey.isHexFormat(input)) { bytes = Crypto.SHA256(input, { asBytes: true });
bytes = Crypto.util.hexToBytes(input); } else if (ECKey.isHexFormat(input)) {
} else if (ECKey.isBase64Format(input)) { bytes = Crypto.util.hexToBytes(input);
bytes = Crypto.util.base64ToBytes(input); } else if (ECKey.isBase64Format(input)) {
bytes = Crypto.util.base64ToBytes(input);
}
} catch (exc1) {
this.setError(exc1);
} }
if (ECKey.isBase6Format(input)) { if (ECKey.isBase6Format(input)) {
this.priv = new BigInteger(input, 6); this.priv = new BigInteger(input, 6);
} else if (bytes == null || bytes.length != 32) { } else if (bytes == null || bytes.length != 32) {
@ -5744,7 +5688,21 @@ Bitcoin.ECKey = (function () {
} }
this.compressed = (this.compressed == undefined) ? !!ECKey.compressByDefault : this.compressed; 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 ECKey.privateKeyPrefix = 0x80; // mainnet 0x80 testnet 0xEF
@ -5754,6 +5712,15 @@ Bitcoin.ECKey = (function () {
*/ */
ECKey.compressByDefault = false; 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. * Set whether the public key should be returned compressed or not.
*/ */
@ -6536,11 +6503,6 @@ input[type=checkbox] { position: relative; z-index: 20; }
#busyblock.busy { display: block; } #busyblock.busy { display: block; }
.hide { display: none; } .hide { display: none; }
.show { display: block; } .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 @media screen
{ {
@ -7033,7 +6995,7 @@ input[type=checkbox] { position: relative; z-index: 20; }
<div class="tooltip" id="statusprotocolbad"> <div class="tooltip" id="statusprotocolbad">
<span class="statuswarn" id="statuslabelprotocolbad">&#9888; Think twice!</span> <span class="statuswarn" id="statuslabelprotocolbad">&#9888; 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> <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.1.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> <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';" /> <br /><br /><input type="button" value="OK" class="button" id="statusokprotocolbad" onclick="document.getElementById('statusprotocolbad').style.display = 'none';" />
</div> </div>
@ -7058,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"><span id="footerlabeldonations">Donations:</span> <b>1NiNja</b>1bUmhSoTXozBRBEtR8LeF9TGbZBN</span>
<span class="item" id="footerlabeltranslatedby"></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> <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.1.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> </div>
<div class="authorpgp"> <div class="authorpgp">
<span class="item"> <span class="item">
<a href="CHANGELOG.txt.asc" target="_blank"><span id="footerlabelversion">Version History</span> (3.2.1)</a> <a href="CHANGELOG.txt.asc" target="_blank"><span id="footerlabelversion">Version History</span> (3.3.0)</a>
</span> </span>
<span class="item">527B 5C82 B1F6 B2DB 72A0<br />ECBF 8749 7B91 6397 4F5A</span> <span class="item">527B 5C82 B1F6 B2DB 72A0<br />ECBF 8749 7B91 6397 4F5A</span>
@ -7600,29 +7562,7 @@ ninja.publicKey = {
return canvas; return canvas;
}, },
// generate a QRCode and return it's representation as an Html table // show QRCodes with canvas
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)
// parameter: keyValuePair // parameter: keyValuePair
// example: { "id1": "string1", "id2": "string2"} // example: { "id1": "string1", "id2": "string2"}
// "id1" is the id of a div element where you want a QRCode inserted. // "id1" is the id of a div element where you want a QRCode inserted.
@ -7636,10 +7576,7 @@ ninja.publicKey = {
document.getElementById(key).appendChild(qrC.createCanvas(value, sizeMultiplier)); document.getElementById(key).appendChild(qrC.createCanvas(value, sizeMultiplier));
} }
} }
catch (e) { catch (e) { }
// for browsers that do not support canvas (IE8)
document.getElementById(key).innerHTML = qrC.createTableHtml(value);
}
} }
} }
}; };
@ -8787,8 +8724,8 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
"brainalertpassphrasetooshort": "A megadott jelmondat túl rövid.\n\n", "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.", "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.", "brainalertpassphrasedoesnotmatch": "A jelmondat és az ellenőrző jelmondat nem azonos.",
"detailalertnotvalidprivatekey": "A beadott szöveg nem érvénytelen Privát Kulcs", "detailalertnotvalidprivatekey": "A megadott szöveg nem érvényes 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.", "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.", "bip38alertincorrectpassphrase": "Érvénytelen jelmondat a titkosított privát kulcshoz.",
"bip38alertpassphraserequired": "A BIP38 kulcshoz jelmondat szükséges", "bip38alertpassphraserequired": "A BIP38 kulcshoz jelmondat szükséges",
"vanityinvalidinputcouldnotcombinekeys": "Érvénytelen bemenet. A kulcsok nem tartoznak össsze.", "vanityinvalidinputcouldnotcombinekeys": "Érvénytelen bemenet. A kulcsok nem tartoznak össsze.",
@ -8798,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.", "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 // 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...", "generatelabelbitcoinaddress": "A bitcoin cím előállítása...",
"generatelabelmovemouse": "MOZGASSA az egeret, ha fokozni szeretné a véletlenszerűséget...", "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", "generatelabelkeypress": "VAGY gépeljen be néhány véletlenszerű karaktert ebbe a szövegdobozba",
@ -8807,7 +8744,7 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
"bulkwallet": "Tömeges pénztárca", "bulkwallet": "Tömeges pénztárca",
"brainwallet": "Fejben tartott pénztárca", "brainwallet": "Fejben tartott pénztárca",
"vanitywallet": "Kérkedő pénztárca", "vanitywallet": "Kérkedő pénztárca",
"splitwallet": "Részekre bontott ~", "splitwallet": "Felosztott tárca",
"detailwallet": "A pénztárca részletei", "detailwallet": "A pénztárca részletei",
// footer html // footer html
@ -8823,39 +8760,39 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
"footerlabelnowarranty": "Garancia nincs.", "footerlabelnowarranty": "Garancia nincs.",
// status html // status html
"statuslabelcryptogood": "&#10004; Good!", //TODO: please translate "statuslabelcryptogood": "&#10004; Helyes!",
"statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate "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": "OK", //TODO: please translate "statusokcryptogood": "Rendben",
"statuslabelcryptobad": "&times; Oh no!", //TODO: please translate "statuslabelcryptobad": "&times; Ó jaj!",
"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.", "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": "OK", //TODO: please translate "statusokcryptobad": "Rendben",
"statuslabelunittestsgood": "&#10004; Good!", //TODO: please translate "statuslabelunittestsgood": "&#10004; Helyes!",
"statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate "statuslabelunittestsgood1": "Minden szinkron unit-teszt sikeres.",
"statusokunittestsgood": "OK", //TODO: please translate "statusokunittestsgood": "Rendben",
"statuslabelunittestsbad": "&times; Oh no!", //TODO: please translate "statuslabelunittestsbad": "&times; Ó, jaj!",
"statuslabelunittestsbad1": "Some synchronous unit tests DID NOT pass. You should find another browser to use with this generator.", //TODO: please translate "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": "OK", //TODO: please translate "statusokunittestsbad": "Rendben",
"statuslabelprotocolgood": "&#10004; Good!", //TODO: please translate "statuslabelprotocolgood": "&#10004; Helyes!",
"statuslabelprotocolgood1": "You are running this generator from your local computer. <br />Tip: Double check you are offline by trying ", //TODO: please translate "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": "OK", //TODO: please translate "statusokprotocolgood": "Rendben",
"statuslabelprotocolbad": "&#9888; Think twice!", //TODO: please translate "statuslabelprotocolbad": "&#9888; Gondolja át!",
"statuslabelprotocolbad1": "You appear to be running this generator online from a live website. For valuable wallets it is recommended to", //TODO: please translate "statuslabelprotocolbad1": "A jelek szerint élő honlapról futtatja a generátort. Használható tárcák készítéséhez javasoljuk, hogy ",
"statuslabelprotocolbad2": "download", //TODO: please translate "statuslabelprotocolbad2": "töltse le",
"statuslabelprotocolbad3": "the zip file from GitHub and run this generator offline as a local html file.", //TODO: please translate "statuslabelprotocolbad3": "a GitHub-on található zip állományt és futtassa a generátort offline módban, helyi html állományként.",
"statusokprotocolbad": "OK", //TODO: please translate "statusokprotocolbad": "Rendben",
"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 "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": "Refresh", //TODO: please translate "statuskeypoolrefresh": "Frissítés",
"statusokkeypool": "OK", //TODO: please translate "statusokkeypool": "Rendben",
// single wallet html // single wallet html
"newaddress": "Új cím előállítása", "newaddress": "Új cím előállítása",
"singleprint": "Nyomtatás", "singleprint": "Nyomtatás",
"singlelabelbitcoinaddress": "Bitcoin cím:", "singlelabelbitcoinaddress": "Bitcoin cím:",
"singlelabelprivatekey": "Privát kulcs (WIF, tárca import formátumban):", "singlelabelprivatekey": "Privát kulcs:",
"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.", "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 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.", "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.", "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.", "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 // paper wallet html
@ -8943,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):", "detaillabelprivmini": "Mini formátumú Privát Kulcs (22, 26 vagy 30 karakter, amely egy 'S'-sel kezdődik):",
"detaillabelpassphrase": "BIP38 jelmondat", "detaillabelpassphrase": "BIP38 jelmondat",
"detailbip38decryptbutton": "BIP38 dekódolás", "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?", "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);
(function (translator) { (function (translator) {
translator.translations["it"] = { translator.translations["it"] = {
// javascript alerts or messages // javascript alerts or messages
@ -9290,21 +9228,21 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
(function (translator) { (function (translator) {
translator.translations["pt-br"] = { translator.translations["pt-br"] = {
// javascript alerts or messages // javascript alerts or messages
"testneteditionactivated": "EDIÇÃO DO TESTNET ATIVADA", "testneteditionactivated": "EDIÇÃO DA TESTNET ATIVADA",
"paperlabelbitcoinaddress": "Endereço Bitcoin:", "paperlabelbitcoinaddress": "Endereço Bitcoin:",
"paperlabelprivatekey": "Chave privada:", "paperlabelprivatekey": "Chave privada:",
"paperlabelencryptedkey": "Chave privada criptografada (Senha necessária)", "paperlabelencryptedkey": "Chave privada criptografada (Senha necessária)",
"bulkgeneratingaddresses": "Generando endereços... ", "bulkgeneratingaddresses": "Gerando endereços... ",
"brainalertpassphrasetooshort": "A senha introduzida é pequena demais.\n\n", "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.", "brainalertpassphrasedoesnotmatch": "As senhas digitadas não são iguais.",
"detailalertnotvalidprivatekey": "O texto que você digitou não é uma chave privada válida", "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.", "bip38alertincorrectpassphrase": "Senha incorreta para essa chave privada criptografada.",
"bip38alertpassphraserequired": "Senha necessária para a chave BIP38", "bip38alertpassphraserequired": "Senha necessária para a chave BIP38",
"vanityinvalidinputcouldnotcombinekeys": "Entrada inválida. Não foi possível combinar as chaves.", "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.", "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' para somar duas chaves públicas para adquirir um endereço bitcoin.", "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", "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.", "vanityalertinvalidinputprivatekeysmatch": "Entrada inválida. As chaves privadas de ambas as entradas são iguais. Você deve inserir duas chaves diferentes.",
@ -9318,7 +9256,7 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
"bulkwallet": "Múltiplos endereços", "bulkwallet": "Múltiplos endereços",
"brainwallet": "Carteira mental", "brainwallet": "Carteira mental",
"vanitywallet": "Carteira personalizada", "vanitywallet": "Carteira personalizada",
"splitwallet": "Split Wallet", //TODO: please translate "splitwallet": "Carteira fracionada",
"detailwallet": "Detalhes da carteira", "detailwallet": "Detalhes da carteira",
// footer html // footer html
@ -9334,42 +9272,42 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
"footerlabelnowarranty": "Sem garantia.", "footerlabelnowarranty": "Sem garantia.",
// status html // status html
"statuslabelcryptogood": "&#10004; Good!", //TODO: please translate "statuslabelcryptogood": "&#10004; Boa!",
"statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate "statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate
"statusokcryptogood": "OK", //TODO: please translate "statusokcryptogood": "OK",
"statuslabelcryptobad": "&times; Oh no!", //TODO: please translate "statuslabelcryptobad": "&times; 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.", "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 "statusokcryptobad": "OK",
"statuslabelunittestsgood": "&#10004; Good!", //TODO: please translate "statuslabelunittestsgood": "&#10004; Boa!",
"statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate "statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate
"statusokunittestsgood": "OK", //TODO: please translate "statusokunittestsgood": "OK",
"statuslabelunittestsbad": "&times; Oh no!", //TODO: please translate "statuslabelunittestsbad": "&times; Oh não!",
"statuslabelunittestsbad1": "Some synchronous unit tests DID NOT pass. You should find another browser to use with this generator.", //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 "statusokunittestsbad": "OK",
"statuslabelprotocolgood": "&#10004; Good!", //TODO: please translate "statuslabelprotocolgood": "&#10004; Boa!",
"statuslabelprotocolgood1": "You are running this generator from your local computer. <br />Tip: Double check you are offline by trying ", //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 "statusokprotocolgood": "OK",
"statuslabelprotocolbad": "&#9888; Think twice!", //TODO: please translate "statuslabelprotocolbad": "&#9888; 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 "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 "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 "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 "statuskeypoolrefresh": "Atualizar",
"statusokkeypool": "OK", //TODO: please translate "statusokkeypool": "OK",
// single wallet html // single wallet html
"newaddress": "Gerar endereço", "newaddress": "Gerar endereço",
"singleprint": "Imprimir", "singleprint": "Imprimir",
"singlelabelbitcoinaddress": "Endereço Bitcoin", "singlelabelbitcoinaddress": "Endereço Bitcoin",
"singlelabelprivatekey": "Chave privada (Wallet Import Format):", "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.", "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 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.", "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.", "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.", "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.", "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", //TODO: please translate "singleshare": "COMPARTILHE",
"singlesecret": "SECRETA", //TODO: please translate "singlesecret": "SECRETA",
// paper wallet html // paper wallet html
"paperlabelhideart": "Ocultar figura", "paperlabelhideart": "Ocultar figura",
@ -9387,7 +9325,7 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
"bulkgenerate": "Gerar", "bulkgenerate": "Gerar",
"bulkprint": "Imprimir", "bulkprint": "Imprimir",
"bulklabelcsv": "Valores separados por vírgula:", "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?", "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.", "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?", "bulklabelq2": "¿Cómo uso \"Direcciones en masa\" para aceptar bitcoins en mi web?",
@ -9441,15 +9379,15 @@ ninja.foreachSerialized = function (collection, whatToDo, onComplete) {
"detaillabelpublickey": "Chave pública (130 caracteres [0-9A-F]):", "detaillabelpublickey": "Chave pública (130 caracteres [0-9A-F]):",
"detaillabelpublickeycomp": "Chave pública (comprimida, 66 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", "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", "detaillabelprivwifcomp": "Chave privada para importação (comprimida, 52 caracteres em base58, inicia com",
"detailcompwifprefix": "'K' o 'L'", "detailcompwifprefix": "'K' ou 'L'",
"detaillabelprivhex": "Chave privada em formato hexadecimal (64 caracteres [0-9A-F]):", "detaillabelprivhex": "Chave privada em formato hexadecimal (64 caracteres [0-9A-F]):",
"detaillabelprivb64": "Chave privada em base64 (44 caracteres):", "detaillabelprivb64": "Chave privada em base64 (44 caracteres):",
"detaillabelprivmini": "Chave privada en formato mini (22, 26 ou 30 caracteres, inicia com 'S'):", "detaillabelprivmini": "Chave privada en formato mini (22, 26 ou 30 caracteres, inicia com 'S'):",
"detaillabelpassphrase": "Senha BIP38", "detaillabelpassphrase": "Senha BIP38",
"detailbip38decryptbutton": "Desencriptar BIP38", "detailbip38decryptbutton": "Descriptografar BIP38",
"detailbip38encryptbutton": "Encrypt BIP38", //TODO: please translate "detailbip38encryptbutton": "Criptografar em BIP38",
"detaillabelq1": "Como eu faço uma carteira usando um dado? O que é B6?", "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." "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); })(ninja.translator);
@ -10448,7 +10386,10 @@ ninja.wallets.vanitywallet = {
keyToECKeyWithBrain: function (key) { keyToECKeyWithBrain: function (key) {
var btcKey = new Bitcoin.ECKey(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 // enforce a minimum passphrase length
if (key.length >= wallets.brainwallet.minPassphraseLength) { if (key.length >= wallets.brainwallet.minPassphraseLength) {
// Deterministic Wallet confirm box to ask if user wants to SHA256 the input to get a private key // Deterministic Wallet confirm box to ask if user wants to SHA256 the input to get a private key
@ -11630,7 +11571,64 @@ ninja.wallets.splitwallet = {
return false; return false;
} }
return true; 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;
}
}, },
asynchronousTests: { asynchronousTests: {

View file

@ -1,11 +1,11 @@
-----BEGIN PGP SIGNATURE----- -----BEGIN PGP SIGNATURE-----
Version: GnuPG v1 Version: GnuPG v1
iQEcBAABAgAGBQJWx8DzAAoJEIdJe5Fjl09awNYIAIsrdkZJylt01F15y1jy5SUB iQEcBAABAgAGBQJYXsr+AAoJEIdJe5Fjl09aYRwH/AstuXuYvMhKQCh+xheAJUC9
elatgdvoWuvBtj1toTBknvWs3SrLbAi4OkzIZbZnu/QSf+6BejeGlus1AKJwbQFr HZbRmV+Sj2rCjhi7EYnZUZ1KNvBQkQjn5ZkumjkSSroe1OdT1ci3wW3HOKlH3z7D
srVVdw3x3I9T+mY3GLdrbrAhivulBQhGk+LSyJhp9/tVj6r924kbceK+QtV6GVLs Qqb1YnZguWdA0AfmsIOn9H0r4uX+8MohxTxsyPRkzEaV1mPfDvZS7Xr4xzeDsBsj
6UXzjejbwoTF51av0n5isuF7tUIUC2cfpgvznSGVFGlUbseByBLIut+X0VgVwa7V szKi94z1BowoNe6JfOLgBRsri8R6LPbEZixVVbW6+KxicQUMsy6e8vatQOeNDf+I
zIjnkgI12tiAAWquZtaZ5H5SKcVOQ1+7MqcZ3m9fH7E3+st+xe6JczHIytqu0hVI r3c61qujWHijJ6mEKbfnKosLybe1WJ8bsMKp6UAxJtdsKnfFQHw7lpjXPnp7KSlf
IXs5TpzzdeXaxEuJPGa7w43M5e6CHKviDT8EjTnc/JBJjBLHymrTAa/jUkQXYaU= 2S74MfF/LNoCFpI68j8E3Lwy5bzel9Vl6I3Vp0N8tvMi9CSckDm0Q2nItYMLBco=
=y/7l =UFiT
-----END PGP SIGNATURE----- -----END PGP SIGNATURE-----

View file

@ -1,8 +1,8 @@
{ {
"name": "bitaddress.org", "name": "bitaddress.org",
"version": "3.2.1", "version": "3.3.0",
"sha1sum": "", "sha1sum": "6cc839a9f60196e3c5e1ddf6cb9e49ce2ae85cb7",
"sha256sum": "", "sha256sum": "dec17c07685e1870960903d8f58090475b25af946fe95a734f88408cef4aa194",
"description": "Open Source JavaScript Client-Side Bitcoin Wallet Generator", "description": "Open Source JavaScript Client-Side Bitcoin Wallet Generator",
"main": "Gruntfile.js", "main": "Gruntfile.js",
"dependencies": { "dependencies": {
@ -27,7 +27,7 @@
], ],
"author": "pointbiz", "author": "pointbiz",
"license": "MIT", "license": "MIT",
"readmeFilename": "README", "readmeFilename": "README.md",
"gitHead": "d77aaf687fca1f0e28388b0a8de5eb3d89d4fad3", "gitHead": "d77aaf687fca1f0e28388b0a8de5eb3d89d4fad3",
"bugs": { "bugs": {
"url": "https://github.com/pointbiz/bitaddress.org/issues" "url": "https://github.com/pointbiz/bitaddress.org/issues"

View file

@ -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;
};
}

View file

@ -16,7 +16,6 @@
Summary of JavaScript functions with a redistributable license: Summary of JavaScript functions with a redistributable license:
JavaScript function License JavaScript function License
******************* *************** ******************* ***************
Array.prototype.map Public Domain
window.Crypto BSD License window.Crypto BSD License
window.SecureRandom BSD License window.SecureRandom BSD License
window.EllipticCurve BSD License window.EllipticCurve BSD License
@ -26,7 +25,7 @@
window.Crypto_scrypt MIT License window.Crypto_scrypt MIT License
The bitaddress.org software is available under The MIT License (MIT) 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 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 associated documentation files (the "Software"), to deal in the Software without restriction, including
@ -49,9 +48,6 @@
<title>bitaddress.org</title> <title>bitaddress.org</title>
<meta charset="utf-8"> <meta charset="utf-8">
<script type="text/javascript">
//array.map.js
</script>
<script type="text/javascript"> <script type="text/javascript">
//cryptojs.js //cryptojs.js
</script> </script>

View file

@ -90,19 +90,23 @@ Bitcoin.ECKey = (function () {
this.priv = BigInteger.fromByteArrayUnsigned(input); this.priv = BigInteger.fromByteArrayUnsigned(input);
} else if ("string" == typeof input) { } else if ("string" == typeof input) {
var bytes = null; var bytes = null;
if (ECKey.isWalletImportFormat(input)) { try{
bytes = ECKey.decodeWalletImportFormat(input); if (ECKey.isWalletImportFormat(input)) {
} else if (ECKey.isCompressedWalletImportFormat(input)) { bytes = ECKey.decodeWalletImportFormat(input);
bytes = ECKey.decodeCompressedWalletImportFormat(input); } else if (ECKey.isCompressedWalletImportFormat(input)) {
this.compressed = true; bytes = ECKey.decodeCompressedWalletImportFormat(input);
} else if (ECKey.isMiniFormat(input)) { this.compressed = true;
bytes = Crypto.SHA256(input, { asBytes: true }); } else if (ECKey.isMiniFormat(input)) {
} else if (ECKey.isHexFormat(input)) { bytes = Crypto.SHA256(input, { asBytes: true });
bytes = Crypto.util.hexToBytes(input); } else if (ECKey.isHexFormat(input)) {
} else if (ECKey.isBase64Format(input)) { bytes = Crypto.util.hexToBytes(input);
bytes = Crypto.util.base64ToBytes(input); } else if (ECKey.isBase64Format(input)) {
bytes = Crypto.util.base64ToBytes(input);
}
} catch (exc1) {
this.setError(exc1);
} }
if (ECKey.isBase6Format(input)) { if (ECKey.isBase6Format(input)) {
this.priv = new BigInteger(input, 6); this.priv = new BigInteger(input, 6);
} else if (bytes == null || bytes.length != 32) { } else if (bytes == null || bytes.length != 32) {
@ -114,7 +118,21 @@ Bitcoin.ECKey = (function () {
} }
this.compressed = (this.compressed == undefined) ? !!ECKey.compressByDefault : this.compressed; 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 ECKey.privateKeyPrefix = 0x80; // mainnet 0x80 testnet 0xEF
@ -124,6 +142,15 @@ Bitcoin.ECKey = (function () {
*/ */
ECKey.compressByDefault = false; 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. * Set whether the public key should be returned compressed or not.
*/ */

View file

@ -10,8 +10,8 @@
"brainalertpassphrasetooshort": "A megadott jelmondat túl rövid.\n\n", "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.", "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.", "brainalertpassphrasedoesnotmatch": "A jelmondat és az ellenőrző jelmondat nem azonos.",
"detailalertnotvalidprivatekey": "A beadott szöveg nem érvénytelen Privát Kulcs", "detailalertnotvalidprivatekey": "A megadott szöveg nem érvényes 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.", "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.", "bip38alertincorrectpassphrase": "Érvénytelen jelmondat a titkosított privát kulcshoz.",
"bip38alertpassphraserequired": "A BIP38 kulcshoz jelmondat szükséges", "bip38alertpassphraserequired": "A BIP38 kulcshoz jelmondat szükséges",
"vanityinvalidinputcouldnotcombinekeys": "Érvénytelen bemenet. A kulcsok nem tartoznak össsze.", "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.", "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 // 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...", "generatelabelbitcoinaddress": "A bitcoin cím előállítása...",
"generatelabelmovemouse": "MOZGASSA az egeret, ha fokozni szeretné a véletlenszerűséget...", "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", "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", "bulkwallet": "Tömeges pénztárca",
"brainwallet": "Fejben tartott pénztárca", "brainwallet": "Fejben tartott pénztárca",
"vanitywallet": "Kérkedő pénztárca", "vanitywallet": "Kérkedő pénztárca",
"splitwallet": "Részekre bontott ~", "splitwallet": "Felosztott tárca",
"detailwallet": "A pénztárca részletei", "detailwallet": "A pénztárca részletei",
// footer html // footer html
@ -46,39 +46,39 @@
"footerlabelnowarranty": "Garancia nincs.", "footerlabelnowarranty": "Garancia nincs.",
// status html // status html
"statuslabelcryptogood": "&#10004; Good!", //TODO: please translate "statuslabelcryptogood": "&#10004; Helyes!",
"statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate "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": "OK", //TODO: please translate "statusokcryptogood": "Rendben",
"statuslabelcryptobad": "&times; Oh no!", //TODO: please translate "statuslabelcryptobad": "&times; Ó jaj!",
"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.", "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": "OK", //TODO: please translate "statusokcryptobad": "Rendben",
"statuslabelunittestsgood": "&#10004; Good!", //TODO: please translate "statuslabelunittestsgood": "&#10004; Helyes!",
"statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate "statuslabelunittestsgood1": "Minden szinkron unit-teszt sikeres.",
"statusokunittestsgood": "OK", //TODO: please translate "statusokunittestsgood": "Rendben",
"statuslabelunittestsbad": "&times; Oh no!", //TODO: please translate "statuslabelunittestsbad": "&times; Ó, jaj!",
"statuslabelunittestsbad1": "Some synchronous unit tests DID NOT pass. You should find another browser to use with this generator.", //TODO: please translate "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": "OK", //TODO: please translate "statusokunittestsbad": "Rendben",
"statuslabelprotocolgood": "&#10004; Good!", //TODO: please translate "statuslabelprotocolgood": "&#10004; Helyes!",
"statuslabelprotocolgood1": "You are running this generator from your local computer. <br />Tip: Double check you are offline by trying ", //TODO: please translate "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": "OK", //TODO: please translate "statusokprotocolgood": "Rendben",
"statuslabelprotocolbad": "&#9888; Think twice!", //TODO: please translate "statuslabelprotocolbad": "&#9888; Gondolja át!",
"statuslabelprotocolbad1": "You appear to be running this generator online from a live website. For valuable wallets it is recommended to", //TODO: please translate "statuslabelprotocolbad1": "A jelek szerint élő honlapról futtatja a generátort. Használható tárcák készítéséhez javasoljuk, hogy ",
"statuslabelprotocolbad2": "download", //TODO: please translate "statuslabelprotocolbad2": "töltse le",
"statuslabelprotocolbad3": "the zip file from GitHub and run this generator offline as a local html file.", //TODO: please translate "statuslabelprotocolbad3": "a GitHub-on található zip állományt és futtassa a generátort offline módban, helyi html állományként.",
"statusokprotocolbad": "OK", //TODO: please translate "statusokprotocolbad": "Rendben",
"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 "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": "Refresh", //TODO: please translate "statuskeypoolrefresh": "Frissítés",
"statusokkeypool": "OK", //TODO: please translate "statusokkeypool": "Rendben",
// single wallet html // single wallet html
"newaddress": "Új cím előállítása", "newaddress": "Új cím előállítása",
"singleprint": "Nyomtatás", "singleprint": "Nyomtatás",
"singlelabelbitcoinaddress": "Bitcoin cím:", "singlelabelbitcoinaddress": "Bitcoin cím:",
"singlelabelprivatekey": "Privát kulcs (WIF, tárca import formátumban):", "singlelabelprivatekey": "Privát kulcs:",
"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.", "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 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.", "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.", "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.", "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 // 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):", "detaillabelprivmini": "Mini formátumú Privát Kulcs (22, 26 vagy 30 karakter, amely egy 'S'-sel kezdődik):",
"detaillabelpassphrase": "BIP38 jelmondat", "detaillabelpassphrase": "BIP38 jelmondat",
"detailbip38decryptbutton": "BIP38 dekódolás", "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?", "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);

View file

@ -1,21 +1,21 @@
(function (translator) { (function (translator) {
translator.translations["pt-br"] = { translator.translations["pt-br"] = {
// javascript alerts or messages // javascript alerts or messages
"testneteditionactivated": "EDIÇÃO DO TESTNET ATIVADA", "testneteditionactivated": "EDIÇÃO DA TESTNET ATIVADA",
"paperlabelbitcoinaddress": "Endereço Bitcoin:", "paperlabelbitcoinaddress": "Endereço Bitcoin:",
"paperlabelprivatekey": "Chave privada:", "paperlabelprivatekey": "Chave privada:",
"paperlabelencryptedkey": "Chave privada criptografada (Senha necessária)", "paperlabelencryptedkey": "Chave privada criptografada (Senha necessária)",
"bulkgeneratingaddresses": "Generando endereços... ", "bulkgeneratingaddresses": "Gerando endereços... ",
"brainalertpassphrasetooshort": "A senha introduzida é pequena demais.\n\n", "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.", "brainalertpassphrasedoesnotmatch": "As senhas digitadas não são iguais.",
"detailalertnotvalidprivatekey": "O texto que você digitou não é uma chave privada válida", "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.", "bip38alertincorrectpassphrase": "Senha incorreta para essa chave privada criptografada.",
"bip38alertpassphraserequired": "Senha necessária para a chave BIP38", "bip38alertpassphraserequired": "Senha necessária para a chave BIP38",
"vanityinvalidinputcouldnotcombinekeys": "Entrada inválida. Não foi possível combinar as chaves.", "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.", "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' para somar duas chaves públicas para adquirir um endereço bitcoin.", "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", "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.", "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", "bulkwallet": "Múltiplos endereços",
"brainwallet": "Carteira mental", "brainwallet": "Carteira mental",
"vanitywallet": "Carteira personalizada", "vanitywallet": "Carteira personalizada",
"splitwallet": "Split Wallet", //TODO: please translate "splitwallet": "Carteira fracionada",
"detailwallet": "Detalhes da carteira", "detailwallet": "Detalhes da carteira",
// footer html // footer html
@ -45,42 +45,42 @@
"footerlabelnowarranty": "Sem garantia.", "footerlabelnowarranty": "Sem garantia.",
// status html // status html
"statuslabelcryptogood": "&#10004; Good!", //TODO: please translate "statuslabelcryptogood": "&#10004; Boa!",
"statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate "statuslabelcryptogood1": "Your browser can generate cryptographically random keys using window.crypto.getRandomValues", //TODO: please translate
"statusokcryptogood": "OK", //TODO: please translate "statusokcryptogood": "OK",
"statuslabelcryptobad": "&times; Oh no!", //TODO: please translate "statuslabelcryptobad": "&times; 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.", "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 "statusokcryptobad": "OK",
"statuslabelunittestsgood": "&#10004; Good!", //TODO: please translate "statuslabelunittestsgood": "&#10004; Boa!",
"statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate "statuslabelunittestsgood1": "All synchronous unit tests passed.", //TODO: please translate
"statusokunittestsgood": "OK", //TODO: please translate "statusokunittestsgood": "OK",
"statuslabelunittestsbad": "&times; Oh no!", //TODO: please translate "statuslabelunittestsbad": "&times; Oh não!",
"statuslabelunittestsbad1": "Some synchronous unit tests DID NOT pass. You should find another browser to use with this generator.", //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 "statusokunittestsbad": "OK",
"statuslabelprotocolgood": "&#10004; Good!", //TODO: please translate "statuslabelprotocolgood": "&#10004; Boa!",
"statuslabelprotocolgood1": "You are running this generator from your local computer. <br />Tip: Double check you are offline by trying ", //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 "statusokprotocolgood": "OK",
"statuslabelprotocolbad": "&#9888; Think twice!", //TODO: please translate "statuslabelprotocolbad": "&#9888; 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 "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 "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 "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 "statuskeypoolrefresh": "Atualizar",
"statusokkeypool": "OK", //TODO: please translate "statusokkeypool": "OK",
// single wallet html // single wallet html
"newaddress": "Gerar endereço", "newaddress": "Gerar endereço",
"singleprint": "Imprimir", "singleprint": "Imprimir",
"singlelabelbitcoinaddress": "Endereço Bitcoin", "singlelabelbitcoinaddress": "Endereço Bitcoin",
"singlelabelprivatekey": "Chave privada (Wallet Import Format):", "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.", "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 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.", "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.", "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.", "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.", "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", //TODO: please translate "singleshare": "COMPARTILHE",
"singlesecret": "SECRETA", //TODO: please translate "singlesecret": "SECRETA",
// paper wallet html // paper wallet html
"paperlabelhideart": "Ocultar figura", "paperlabelhideart": "Ocultar figura",
@ -98,7 +98,7 @@
"bulkgenerate": "Gerar", "bulkgenerate": "Gerar",
"bulkprint": "Imprimir", "bulkprint": "Imprimir",
"bulklabelcsv": "Valores separados por vírgula:", "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?", "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.", "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?", "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]):", "detaillabelpublickey": "Chave pública (130 caracteres [0-9A-F]):",
"detaillabelpublickeycomp": "Chave pública (comprimida, 66 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", "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", "detaillabelprivwifcomp": "Chave privada para importação (comprimida, 52 caracteres em base58, inicia com",
"detailcompwifprefix": "'K' o 'L'", "detailcompwifprefix": "'K' ou 'L'",
"detaillabelprivhex": "Chave privada em formato hexadecimal (64 caracteres [0-9A-F]):", "detaillabelprivhex": "Chave privada em formato hexadecimal (64 caracteres [0-9A-F]):",
"detaillabelprivb64": "Chave privada em base64 (44 caracteres):", "detaillabelprivb64": "Chave privada em base64 (44 caracteres):",
"detaillabelprivmini": "Chave privada en formato mini (22, 26 ou 30 caracteres, inicia com 'S'):", "detaillabelprivmini": "Chave privada en formato mini (22, 26 ou 30 caracteres, inicia com 'S'):",
"detaillabelpassphrase": "Senha BIP38", "detaillabelpassphrase": "Senha BIP38",
"detailbip38decryptbutton": "Desencriptar BIP38", "detailbip38decryptbutton": "Descriptografar BIP38",
"detailbip38encryptbutton": "Encrypt BIP38", //TODO: please translate "detailbip38encryptbutton": "Criptografar em BIP38",
"detaillabelq1": "Como eu faço uma carteira usando um dado? O que é B6?", "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." "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); })(ninja.translator);

View file

@ -144,11 +144,6 @@ input[type=checkbox] { position: relative; z-index: 20; }
#busyblock.busy { display: block; } #busyblock.busy { display: block; }
.hide { display: none; } .hide { display: none; }
.show { display: block; } .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 @media screen
{ {

View file

@ -50,7 +50,10 @@
keyToECKeyWithBrain: function (key) { keyToECKeyWithBrain: function (key) {
var btcKey = new Bitcoin.ECKey(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 // enforce a minimum passphrase length
if (key.length >= wallets.brainwallet.minPassphraseLength) { if (key.length >= wallets.brainwallet.minPassphraseLength) {
// Deterministic Wallet confirm box to ask if user wants to SHA256 the input to get a private key // Deterministic Wallet confirm box to ask if user wants to SHA256 the input to get a private key

View file

@ -48,29 +48,7 @@
return canvas; return canvas;
}, },
// generate a QRCode and return it's representation as an Html table // show QRCodes with canvas
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)
// parameter: keyValuePair // parameter: keyValuePair
// example: { "id1": "string1", "id2": "string2"} // example: { "id1": "string1", "id2": "string2"}
// "id1" is the id of a div element where you want a QRCode inserted. // "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)); document.getElementById(key).appendChild(qrC.createCanvas(value, sizeMultiplier));
} }
} }
catch (e) { catch (e) { }
// for browsers that do not support canvas (IE8)
document.getElementById(key).innerHTML = qrC.createTableHtml(value);
}
} }
} }
}; };

View file

@ -837,7 +837,64 @@
return false; return false;
} }
return true; 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;
}
}, },
asynchronousTests: { asynchronousTests: {