mirror of
https://github.com/OneKeyHQ/bip39.git
synced 2026-04-29 05:30:54 +00:00
Card entropy uses secure hashing when > 256 bits
This commit is contained in:
+2
-5
@@ -293,15 +293,12 @@ window.Entropy = new (function() {
|
|||||||
// Create a normalized string of the selected cards
|
// Create a normalized string of the selected cards
|
||||||
var normalizedCards = cards.join("").toUpperCase();
|
var normalizedCards = cards.join("").toUpperCase();
|
||||||
// Convert to binary using the SHA256 hash of the normalized cards.
|
// Convert to binary using the SHA256 hash of the normalized cards.
|
||||||
// If the number of bits is more than 256, multiple rounds of hashing
|
// If the number of bits is more than 256, multiple hashes
|
||||||
// are used until the required number of bits is reached.
|
// are used until the required number of bits is reached.
|
||||||
var entropyBin = "";
|
var entropyBin = "";
|
||||||
var iterations = 0;
|
var iterations = 0;
|
||||||
while (entropyBin.length < numberOfBits) {
|
while (entropyBin.length < numberOfBits) {
|
||||||
var hashedCards = sjcl.hash.sha256.hash(normalizedCards);
|
var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
|
||||||
for (var j=0; j<iterations; j++) {
|
|
||||||
hashedCards = sjcl.hash.sha256.hash(hashedCards);
|
|
||||||
}
|
|
||||||
var hashHex = sjcl.codec.hex.fromBits(hashedCards);
|
var hashHex = sjcl.codec.hex.fromBits(hashedCards);
|
||||||
for (var i=0; i<hashHex.length; i++) {
|
for (var i=0; i<hashHex.length; i++) {
|
||||||
var decimal = parseInt(hashHex[i], 16);
|
var decimal = parseInt(hashHex[i], 16);
|
||||||
|
|||||||
@@ -2155,10 +2155,10 @@ page.open(url, function(status) {
|
|||||||
return e.message;
|
return e.message;
|
||||||
}
|
}
|
||||||
// Leading zeros for card entropy as binary string.
|
// Leading zeros for card entropy as binary string.
|
||||||
// Card entropy is hashed so 2c does not produce leading zeros.
|
// Card entropy is hashed so 2c does not necessarily produce leading zeros.
|
||||||
try {
|
try {
|
||||||
e = Entropy.fromString("4c");
|
e = Entropy.fromString("2c");
|
||||||
if (e.binaryStr != "0001") {
|
if (e.binaryStr != "0010") {
|
||||||
return "Card entropy as binary has leading zeros";
|
return "Card entropy as binary has leading zeros";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2190,24 +2190,24 @@ page.open(url, function(status) {
|
|||||||
// [ cards, binary ]
|
// [ cards, binary ]
|
||||||
try {
|
try {
|
||||||
var cards = [
|
var cards = [
|
||||||
[ "ac", "0100" ],
|
[ "ac", "0101" ],
|
||||||
[ "acqs", "10111101" ],
|
[ "acqs", "11011100" ],
|
||||||
[ "acks", "11110000" ],
|
[ "acks", "01011100" ],
|
||||||
[ "2cac", "11000010" ],
|
[ "2cac", "11111000" ],
|
||||||
[ "2c", "1000" ],
|
[ "2c", "0010" ],
|
||||||
[ "3d", "1111" ],
|
[ "3d", "0001" ],
|
||||||
[ "4h", "0011" ],
|
[ "4h", "1001" ],
|
||||||
[ "5s", "1001" ],
|
[ "5s", "1001" ],
|
||||||
[ "6c", "1011" ],
|
[ "6c", "0000" ],
|
||||||
[ "7d", "1101" ],
|
[ "7d", "0001" ],
|
||||||
[ "8h", "1011" ],
|
[ "8h", "1011" ],
|
||||||
[ "9s", "1010" ],
|
[ "9s", "0010" ],
|
||||||
[ "tc", "1101" ],
|
[ "tc", "1001" ],
|
||||||
[ "jd", "1101" ],
|
[ "jd", "1111" ],
|
||||||
[ "qh", "1100" ],
|
[ "qh", "0010" ],
|
||||||
[ "ks", "1111" ],
|
[ "ks", "0101" ],
|
||||||
[ "ks2c", "10000001" ],
|
[ "ks2c", "01010100" ],
|
||||||
[ "KS2C", "10000001" ],
|
[ "KS2C", "01010100" ],
|
||||||
];
|
];
|
||||||
for (var i=0; i<cards.length; i++) {
|
for (var i=0; i<cards.length; i++) {
|
||||||
var card = cards[i][0];
|
var card = cards[i][0];
|
||||||
|
|||||||
Reference in New Issue
Block a user