fix a potential freeze

This commit is contained in:
afonya2 2025-05-29 14:17:08 +02:00
parent 2bd897a6f6
commit 78bcace8ed
Signed by: afonya
GPG key ID: EBB9C4CAFAAFB2DC
2 changed files with 19 additions and 7 deletions

24
IGA.ts
View file

@ -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 = ""

View file

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