fix a potential freeze
This commit is contained in:
parent
2bd897a6f6
commit
78bcace8ed
2 changed files with 19 additions and 7 deletions
24
IGA.ts
24
IGA.ts
|
@ -126,7 +126,7 @@ function checksum(input: string) {
|
|||
return state.join("")
|
||||
}
|
||||
|
||||
function hashInternal(toHash: number[], len: number, salt: number): number[] {
|
||||
function hashInternal(toHash: number[], len: number, salt: number, first: boolean): number[] {
|
||||
let complete: number[] = []
|
||||
|
||||
while (toHash.length > 0) {
|
||||
|
@ -142,7 +142,15 @@ function hashInternal(toHash: number[], len: number, salt: number): number[] {
|
|||
toHash = toHash.slice(len, toHash.length)
|
||||
let curr = 0
|
||||
for (let i = 0; i < inp.length; i++) {
|
||||
selected[curr] = (selected[curr] + inp[i] + salt) % 65536
|
||||
let temp = selected[curr] + inp[i] + salt
|
||||
while (temp >= 65536) {
|
||||
let sub = selected[curr-1] ? selected[curr-1] : selected[selected.length-1]
|
||||
if (first || sub == 0) {
|
||||
sub = 2411
|
||||
}
|
||||
temp -= sub
|
||||
}
|
||||
selected[curr] = temp
|
||||
curr++
|
||||
if (curr >= len) {
|
||||
curr = 0
|
||||
|
@ -155,12 +163,16 @@ function hashInternal(toHash: number[], len: number, salt: number): number[] {
|
|||
|
||||
return complete
|
||||
}
|
||||
function hashInternal2(toHash: number[], salt: number): number[] {
|
||||
function hashInternal2(toHash: number[], salt: number, first: boolean): number[] {
|
||||
let state = copy(toHash, true)
|
||||
for (let i = 0; i < toHash.length; i++) {
|
||||
let temp = state[i] + (state[i+1] ? state[i+1] : state[0]) + salt
|
||||
while (temp >= 65536) {
|
||||
temp -= state[i-1] ? state[i-1] : state[state.length-1]
|
||||
let sub = state[i-1] ? state[i-1] : state[state.length-1]
|
||||
if (first || sub == 0) {
|
||||
sub = 2411
|
||||
}
|
||||
temp -= sub
|
||||
}
|
||||
toHash[i] = temp
|
||||
}
|
||||
|
@ -201,8 +213,8 @@ function hash(input: string, salt: number = 0, len: number = 32, seed?: number):
|
|||
toHash.push(padding.generator.next())
|
||||
}
|
||||
for (let it = 0; it < iterations; it++) {
|
||||
toHash = hashInternal(toHash, len, salt)
|
||||
toHash = hashInternal2(toHash, salt)
|
||||
toHash = hashInternal(toHash, len, salt, it == 0)
|
||||
toHash = hashInternal2(toHash, salt, it == 0)
|
||||
}
|
||||
const pBin = fixbin(dec2bin(padding.seed), 16)
|
||||
let dataBin = ""
|
||||
|
|
|
@ -58,7 +58,7 @@ async function main() {
|
|||
} else {
|
||||
failCount++
|
||||
if (failCount > 1000) {
|
||||
console.log("Finding a qunique string took too long, exiting...")
|
||||
console.log("Finding a unique string took too long, exiting...")
|
||||
process.exit(0)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue