StringArrayCallsWrapperNodeTemplate.spec.ts 4.6 KB

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