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

View File

@@ -293,15 +293,12 @@ window.Entropy = new (function() {
// Create a normalized string of the selected cards
var normalizedCards = cards.join("").toUpperCase();
// 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.
var entropyBin = "";
var iterations = 0;
while (entropyBin.length < numberOfBits) {
var hashedCards = sjcl.hash.sha256.hash(normalizedCards);
for (var j=0; j<iterations; j++) {
hashedCards = sjcl.hash.sha256.hash(hashedCards);
}
var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
var hashHex = sjcl.codec.hex.fromBits(hashedCards);
for (var i=0; i<hashHex.length; i++) {
var decimal = parseInt(hashHex[i], 16);

View File

@@ -2155,10 +2155,10 @@ page.open(url, function(status) {
return e.message;
}
// 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 {
e = Entropy.fromString("4c");
if (e.binaryStr != "0001") {
e = Entropy.fromString("2c");
if (e.binaryStr != "0010") {
return "Card entropy as binary has leading zeros";
}
}
@@ -2190,24 +2190,24 @@ page.open(url, function(status) {
// [ cards, binary ]
try {
var cards = [
[ "ac", "0100" ],
[ "acqs", "10111101" ],
[ "acks", "11110000" ],
[ "2cac", "11000010" ],
[ "2c", "1000" ],
[ "3d", "1111" ],
[ "4h", "0011" ],
[ "ac", "0101" ],
[ "acqs", "11011100" ],
[ "acks", "01011100" ],
[ "2cac", "11111000" ],
[ "2c", "0010" ],
[ "3d", "0001" ],
[ "4h", "1001" ],
[ "5s", "1001" ],
[ "6c", "1011" ],
[ "7d", "1101" ],
[ "6c", "0000" ],
[ "7d", "0001" ],
[ "8h", "1011" ],
[ "9s", "1010" ],
[ "tc", "1101" ],
[ "jd", "1101" ],
[ "qh", "1100" ],
[ "ks", "1111" ],
[ "ks2c", "10000001" ],
[ "KS2C", "10000001" ],
[ "9s", "0010" ],
[ "tc", "1001" ],
[ "jd", "1111" ],
[ "qh", "0010" ],
[ "ks", "0101" ],
[ "ks2c", "01010100" ],
[ "KS2C", "01010100" ],
];
for (var i=0; i<cards.length; i++) {
var card = cards[i][0];