StringArrayCallsWrapperNodeTemplate.spec.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import * as format from 'string-template';
  2. import { assert } from 'chai';
  3. import { AtobTemplate } from '../../../../../src/templates/custom-nodes/AtobTemplate';
  4. import { Rc4Template } from '../../../../../src/templates/custom-nodes/Rc4Template';
  5. import { StringArrayBase64DecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/string-array-nodes/string-array-calls-wrapper/StringArrayBase64DecodeNodeTemplate';
  6. import { StringArrayCallsWrapperTemplate } from '../../../../../src/templates/custom-nodes/string-array-nodes/string-array-calls-wrapper/StringArrayCallsWrapperTemplate';
  7. import { StringArrayRc4DecodeNodeTemplate } from '../../../../../src/templates/custom-nodes/string-array-nodes/string-array-calls-wrapper/StringArrayRC4DecodeNodeTemplate';
  8. import { CryptUtils } from '../../../../../src/utils/CryptUtils';
  9. /**
  10. * @param templateData
  11. * @param stringArrayName
  12. * @param stringArrayCallsWrapperName
  13. * @param index
  14. * @returns {Function}
  15. */
  16. function getFunctionFromTemplateBase64Encoding (
  17. templateData: any,
  18. stringArrayName: string,
  19. stringArrayCallsWrapperName: string,
  20. index: string
  21. ) {
  22. const stringArrayCallsWrapperTemplate: string = format(StringArrayCallsWrapperTemplate(), templateData);
  23. return Function(`
  24. var ${stringArrayName} = ['${CryptUtils.btoa('test1')}'];
  25. ${stringArrayCallsWrapperTemplate}
  26. return ${stringArrayCallsWrapperName}(${index});
  27. `)();
  28. }
  29. /**
  30. * @param templateData
  31. * @param stringArrayName
  32. * @param stringArrayCallsWrapperName
  33. * @param index
  34. * @param key
  35. * @returns {Function}
  36. */
  37. function getFunctionFromTemplateRc4Encoding (
  38. templateData: any,
  39. stringArrayName: string,
  40. stringArrayCallsWrapperName: string,
  41. index: string,
  42. key: string
  43. ) {
  44. const stringArrayCallsWrapperTemplate: string = format(StringArrayCallsWrapperTemplate(), templateData);
  45. return Function(`
  46. var ${stringArrayName} = ['${CryptUtils.btoa(CryptUtils.rc4('test1', key))}'];
  47. ${stringArrayCallsWrapperTemplate}
  48. return ${stringArrayCallsWrapperName}('${index}', '${key}');
  49. `)();
  50. }
  51. describe('StringArrayCallsWrapperNodeTemplate (): string', () => {
  52. const stringArrayName: string = 'stringArrayName';
  53. const stringArrayCallsWrapperName: string = 'stringArrayCallsWrapperName';
  54. describe('variant #1: `base64` encoding', () => {
  55. const atobDecodeNodeTemplate: string = format(StringArrayBase64DecodeNodeTemplate(), {
  56. atobPolyfill: AtobTemplate(),
  57. selfDefendingCode: '',
  58. stringArrayCallsWrapperName
  59. });
  60. const index: string = '0x0';
  61. const expectedDecodedValue: string = 'test1';
  62. let decodedValue: string;
  63. before(() => {
  64. decodedValue = getFunctionFromTemplateBase64Encoding({
  65. decodeNodeTemplate: atobDecodeNodeTemplate,
  66. stringArrayCallsWrapperName,
  67. stringArrayName
  68. }, stringArrayName, stringArrayCallsWrapperName, index);
  69. });
  70. it('should correctly return decoded value', () => {
  71. assert.deepEqual(decodedValue, expectedDecodedValue);
  72. });
  73. });
  74. describe('variant #2: `rc4` encoding', () => {
  75. const rc4DecodeNodeTemplate: string = format(StringArrayRc4DecodeNodeTemplate(), {
  76. atobPolyfill: AtobTemplate(),
  77. rc4Polyfill: Rc4Template(),
  78. selfDefendingCode: '',
  79. stringArrayCallsWrapperName
  80. });
  81. const index: string = '0x0';
  82. const key: string = 'key';
  83. const expectedDecodedValue: string = 'test1';
  84. let decodedValue: string;
  85. before(() => {
  86. decodedValue = getFunctionFromTemplateRc4Encoding({
  87. decodeNodeTemplate: rc4DecodeNodeTemplate,
  88. stringArrayCallsWrapperName,
  89. stringArrayName
  90. }, stringArrayName, stringArrayCallsWrapperName, index, key);
  91. });
  92. it('should correctly return decoded value', () => {
  93. assert.deepEqual(decodedValue, expectedDecodedValue);
  94. });
  95. });
  96. });