Card entropy uses secure hashing when > 256 bits

This commit is contained in:
Ian Coleman
2016-12-22 15:40:41 +11:00
parent 0a1f0259d1
commit 9d33c8925d
2 changed files with 21 additions and 24 deletions
+2 -5
View File
@@ -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);
+19 -19
View File
@@ -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];