Spaces:
Running
Running
import tls from 'node:tls'; | |
import { randomBytes } from 'node:crypto'; | |
const ORIGINAL_CIPHERS = tls.DEFAULT_CIPHERS; | |
// How many ciphers from the top of the list to shuffle. | |
// The remaining ciphers are left in the original order. | |
const TOP_N_SHUFFLE = 8; | |
// Modified variation of https://stackoverflow.com/a/12646864 | |
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); | |
} | |