|
import tls from 'node:tls'; |
|
import { randomBytes } from 'node:crypto'; |
|
|
|
const ORIGINAL_CIPHERS = tls.DEFAULT_CIPHERS; |
|
|
|
|
|
|
|
const TOP_N_SHUFFLE = 8; |
|
|
|
|
|
const shuffleArray = (array) => { |
|
for (let i = array.length - 1; i > 0; i--) { |
|
const j = randomBytes(4).readUint32LE() % array.length; |
|
[array[i], array[j]] = [array[j], array[i]]; |
|
} |
|
|
|
return array; |
|
} |
|
|
|
export const randomizeCiphers = () => { |
|
do { |
|
const cipherList = ORIGINAL_CIPHERS.split(':'); |
|
const shuffled = shuffleArray(cipherList.slice(0, TOP_N_SHUFFLE)); |
|
const retained = cipherList.slice(TOP_N_SHUFFLE); |
|
|
|
tls.DEFAULT_CIPHERS = [ ...shuffled, ...retained ].join(':'); |
|
} while (tls.DEFAULT_CIPHERS === ORIGINAL_CIPHERS); |
|
} |
|
|