StringArrayRC4DecodeTemplate.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { IRandomGenerator } from '../../../../interfaces/utils/IRandomGenerator';
  2. /**
  3. * @param {IRandomGenerator} randomGenerator
  4. * @returns {string}
  5. * @constructor
  6. */
  7. export function StringArrayRC4DecodeTemplate (
  8. randomGenerator: IRandomGenerator
  9. ): string {
  10. const identifierLength: number = 6;
  11. const initializedIdentifier: string = randomGenerator.getRandomString(identifierLength);
  12. const rc4Identifier: string = randomGenerator.getRandomString(identifierLength);
  13. const onceIdentifier: string = randomGenerator.getRandomString(identifierLength);
  14. return `
  15. if ({stringArrayCallsWrapperName}.${initializedIdentifier} === undefined) {
  16. {atobPolyfill}
  17. {rc4Polyfill}
  18. {stringArrayCallsWrapperName}.${rc4Identifier} = {rc4FunctionName};
  19. {stringArrayCacheName} = arguments;
  20. {stringArrayCallsWrapperName}.${initializedIdentifier} = true;
  21. }
  22. const firstValue = {stringArrayName}[0];
  23. const cacheKey = index + firstValue;
  24. const cachedValue = {stringArrayCacheName}[cacheKey];
  25. if (!cachedValue) {
  26. if ({stringArrayCallsWrapperName}.${onceIdentifier} === undefined) {
  27. {selfDefendingCode}
  28. {stringArrayCallsWrapperName}.${onceIdentifier} = true;
  29. }
  30. value = {stringArrayCallsWrapperName}.${rc4Identifier}(value, key);
  31. {stringArrayCacheName}[cacheKey] = value;
  32. } else {
  33. value = cachedValue;
  34. }
  35. `;
  36. }