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("") 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[] = [] let complete: number[] = []
while (toHash.length > 0) { while (toHash.length > 0) {
@ -142,7 +142,15 @@ function hashInternal(toHash: number[], len: number, salt: number): number[] {
toHash = toHash.slice(len, toHash.length) toHash = toHash.slice(len, toHash.length)
let curr = 0 let curr = 0
for (let i = 0; i < inp.length; i++) { 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++ curr++
if (curr >= len) { if (curr >= len) {
curr = 0 curr = 0
@ -155,12 +163,16 @@ function hashInternal(toHash: number[], len: number, salt: number): number[] {
return complete return complete
} }
function hashInternal2(toHash: number[], salt: number): number[] { function hashInternal2(toHash: number[], salt: number, first: boolean): number[] {
let state = copy(toHash, true) let state = copy(toHash, true)
for (let i = 0; i < toHash.length; i++) { for (let i = 0; i < toHash.length; i++) {
let temp = state[i] + (state[i+1] ? state[i+1] : state[0]) + salt let temp = state[i] + (state[i+1] ? state[i+1] : state[0]) + salt
while (temp >= 65536) { 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 toHash[i] = temp
} }
@ -201,8 +213,8 @@ function hash(input: string, salt: number = 0, len: number = 32, seed?: number):
toHash.push(padding.generator.next()) toHash.push(padding.generator.next())
} }
for (let it = 0; it < iterations; it++) { for (let it = 0; it < iterations; it++) {
toHash = hashInternal(toHash, len, salt) toHash = hashInternal(toHash, len, salt, it == 0)
toHash = hashInternal2(toHash, salt) toHash = hashInternal2(toHash, salt, it == 0)
} }
const pBin = fixbin(dec2bin(padding.seed), 16) const pBin = fixbin(dec2bin(padding.seed), 16)
let dataBin = "" let dataBin = ""

View file

@ -58,7 +58,7 @@ async function main() {
} else { } else {
failCount++ failCount++
if (failCount > 1000) { 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) process.exit(0)
} }
} }