scanoss 0.15.7 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/CHANGELOG.md +53 -97
  2. package/LICENSE +20 -20
  3. package/README.md +75 -3
  4. package/assets/ReportHTMLTemplate/index.html +11 -8
  5. package/assets/data/scanoss-crypto-library-rules.json +1 -0
  6. package/build/main/cli/bin/cli-bin.js +6 -2
  7. package/build/main/cli/commands/crypto.js +14 -7
  8. package/build/main/cli/commands/scan.js +66 -23
  9. package/build/main/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.d.ts +19 -0
  10. package/build/main/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.js +27 -0
  11. package/build/main/sdk/Cryptography/Algorithm/Files/AlgorithmProcessor.d.ts +1 -0
  12. package/build/main/sdk/Cryptography/Algorithm/Files/AlgorithmProcessor.js +39 -0
  13. package/build/main/sdk/Cryptography/Algorithm/Files/FileAlgorithmScanner.d.ts +42 -0
  14. package/build/main/sdk/Cryptography/Algorithm/Files/FileAlgorithmScanner.js +87 -0
  15. package/build/main/sdk/Cryptography/{CryptoDef/CryptoDef.d.ts → Algorithm/Files/Helper/Helper.d.ts} +1 -1
  16. package/build/main/sdk/Cryptography/{CryptoDef/CryptoDef.js → Algorithm/Files/Helper/Helper.js} +1 -1
  17. package/build/main/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.d.ts +2 -2
  18. package/build/main/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.js +1 -1
  19. package/build/main/sdk/Cryptography/BaseCryptographyScanner.d.ts +25 -0
  20. package/build/main/sdk/Cryptography/BaseCryptographyScanner.js +23 -0
  21. package/build/main/sdk/Cryptography/CryptoCfg.d.ts +32 -5
  22. package/build/main/sdk/Cryptography/CryptoCfg.js +35 -5
  23. package/build/main/sdk/Cryptography/CryptographyScanner.d.ts +15 -21
  24. package/build/main/sdk/Cryptography/CryptographyScanner.js +31 -41
  25. package/build/main/sdk/Cryptography/CryptographyTypes.d.ts +47 -3
  26. package/build/main/sdk/Cryptography/Helper/ResultCollector/Component/ComponentCryptographyResultColletor.d.ts +32 -0
  27. package/build/main/sdk/Cryptography/Helper/ResultCollector/Component/ComponentCryptographyResultColletor.js +66 -0
  28. package/build/main/sdk/Cryptography/Helper/ResultCollector/File/FileCryptographyResultCollector.d.ts +36 -0
  29. package/build/main/sdk/Cryptography/Helper/ResultCollector/File/FileCryptographyResultCollector.js +65 -0
  30. package/build/main/sdk/Cryptography/Hint/Components/ComponentHintScanner.d.ts +19 -0
  31. package/build/main/sdk/Cryptography/Hint/Components/ComponentHintScanner.js +27 -0
  32. package/build/main/sdk/Cryptography/Hint/Files/FileHintScanner.d.ts +35 -0
  33. package/build/main/sdk/Cryptography/Hint/Files/FileHintScanner.js +69 -0
  34. package/build/main/sdk/Cryptography/Hint/Files/HintProcessor.d.ts +1 -0
  35. package/build/main/sdk/Cryptography/Hint/Files/HintProcessor.js +34 -0
  36. package/build/main/sdk/Filtering/Filtering.js +1 -2
  37. package/build/main/sdk/Logger.d.ts +2 -0
  38. package/build/main/sdk/Logger.js +7 -2
  39. package/build/main/sdk/Report/DataLayer/DataLayerTypes.d.ts +8 -4
  40. package/build/main/sdk/Report/DataLayer/DataProviders/CryptographyDataProvider.d.ts +7 -7
  41. package/build/main/sdk/Report/DataLayer/DataProviders/CryptographyDataProvider.js +71 -11
  42. package/build/main/sdk/Services/Grpc/BaseService.js +1 -1
  43. package/build/main/sdk/Services/Grpc/CryptographyService.d.ts +3 -0
  44. package/build/main/sdk/Services/Grpc/CryptographyService.js +16 -1
  45. package/build/main/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.d.ts +72 -0
  46. package/build/main/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.js +87 -3
  47. package/build/main/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_pb.js +1987 -127
  48. package/build/main/sdk/Utils/Concurrency/Job.d.ts +8 -0
  49. package/build/main/sdk/Utils/Concurrency/Job.js +17 -0
  50. package/build/main/sdk/Utils/Concurrency/JobProcessor.d.ts +10 -0
  51. package/build/main/sdk/Utils/Concurrency/JobProcessor.js +51 -0
  52. package/build/main/sdk/Utils/Concurrency/WorkerPool.d.ts +14 -0
  53. package/build/main/sdk/Utils/Concurrency/WorkerPool.js +69 -0
  54. package/build/main/sdk/Utils/Concurrency/types.d.ts +18 -0
  55. package/build/main/sdk/Utils/Concurrency/types.js +3 -0
  56. package/build/main/sdk/scanner/ScannerTypes.js +1 -1
  57. package/build/main/tsconfig.tsbuildinfo +1 -1
  58. package/build/module/cli/bin/cli-bin.js +6 -2
  59. package/build/module/cli/commands/crypto.js +14 -7
  60. package/build/module/cli/commands/scan.js +66 -23
  61. package/build/module/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.d.ts +19 -0
  62. package/build/module/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.js +23 -0
  63. package/build/module/sdk/Cryptography/Algorithm/Files/AlgorithmProcessor.d.ts +1 -0
  64. package/build/module/sdk/Cryptography/Algorithm/Files/AlgorithmProcessor.js +36 -0
  65. package/build/module/sdk/Cryptography/Algorithm/Files/FileAlgorithmScanner.d.ts +42 -0
  66. package/build/module/sdk/Cryptography/Algorithm/Files/FileAlgorithmScanner.js +80 -0
  67. package/build/module/sdk/Cryptography/{CryptoDef/CryptoDef.d.ts → Algorithm/Files/Helper/Helper.d.ts} +1 -1
  68. package/build/module/sdk/Cryptography/{CryptoDef/CryptoDef.js → Algorithm/Files/Helper/Helper.js} +1 -1
  69. package/build/module/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.d.ts +2 -2
  70. package/build/module/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.js +1 -1
  71. package/build/module/sdk/Cryptography/BaseCryptographyScanner.d.ts +25 -0
  72. package/build/module/sdk/Cryptography/BaseCryptographyScanner.js +21 -0
  73. package/build/module/sdk/Cryptography/CryptoCfg.d.ts +32 -5
  74. package/build/module/sdk/Cryptography/CryptoCfg.js +39 -6
  75. package/build/module/sdk/Cryptography/CryptographyScanner.d.ts +15 -21
  76. package/build/module/sdk/Cryptography/CryptographyScanner.js +32 -39
  77. package/build/module/sdk/Cryptography/CryptographyTypes.d.ts +47 -3
  78. package/build/module/sdk/Cryptography/Helper/ResultCollector/Component/ComponentCryptographyResultColletor.d.ts +32 -0
  79. package/build/module/sdk/Cryptography/Helper/ResultCollector/Component/ComponentCryptographyResultColletor.js +60 -0
  80. package/build/module/sdk/Cryptography/Helper/ResultCollector/File/FileCryptographyResultCollector.d.ts +36 -0
  81. package/build/module/sdk/Cryptography/Helper/ResultCollector/File/FileCryptographyResultCollector.js +59 -0
  82. package/build/module/sdk/Cryptography/Hint/Components/ComponentHintScanner.d.ts +19 -0
  83. package/build/module/sdk/Cryptography/Hint/Components/ComponentHintScanner.js +23 -0
  84. package/build/module/sdk/Cryptography/Hint/Files/FileHintScanner.d.ts +35 -0
  85. package/build/module/sdk/Cryptography/Hint/Files/FileHintScanner.js +62 -0
  86. package/build/module/sdk/Cryptography/Hint/Files/HintProcessor.d.ts +1 -0
  87. package/build/module/sdk/Cryptography/Hint/Files/HintProcessor.js +31 -0
  88. package/build/module/sdk/Filtering/Filtering.js +1 -2
  89. package/build/module/sdk/Logger.d.ts +2 -0
  90. package/build/module/sdk/Logger.js +8 -2
  91. package/build/module/sdk/Report/DataLayer/DataLayerTypes.d.ts +8 -4
  92. package/build/module/sdk/Report/DataLayer/DataProviders/CryptographyDataProvider.d.ts +7 -7
  93. package/build/module/sdk/Report/DataLayer/DataProviders/CryptographyDataProvider.js +73 -14
  94. package/build/module/sdk/Services/Grpc/BaseService.js +1 -1
  95. package/build/module/sdk/Services/Grpc/CryptographyService.d.ts +3 -0
  96. package/build/module/sdk/Services/Grpc/CryptographyService.js +16 -1
  97. package/build/module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.d.ts +72 -0
  98. package/build/module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.js +87 -3
  99. package/build/module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_pb.js +1987 -127
  100. package/build/module/sdk/Utils/Concurrency/Job.d.ts +8 -0
  101. package/build/module/sdk/Utils/Concurrency/Job.js +14 -0
  102. package/build/module/sdk/Utils/Concurrency/JobProcessor.d.ts +10 -0
  103. package/build/module/sdk/Utils/Concurrency/JobProcessor.js +47 -0
  104. package/build/module/sdk/Utils/Concurrency/WorkerPool.d.ts +14 -0
  105. package/build/module/sdk/Utils/Concurrency/WorkerPool.js +65 -0
  106. package/build/module/sdk/Utils/Concurrency/types.d.ts +18 -0
  107. package/build/module/sdk/Utils/Concurrency/types.js +2 -0
  108. package/build/module/sdk/scanner/ScannerTypes.js +1 -1
  109. package/build/module/tsconfig.module.tsbuildinfo +1 -1
  110. package/package.json +1 -1
  111. package/build/main/sdk/Cryptography/CryptoProvider/LocalCrypto.d.ts +0 -21
  112. package/build/main/sdk/Cryptography/CryptoProvider/LocalCrypto.js +0 -37
  113. package/build/main/sdk/Cryptography/Worker/ThreadPool.d.ts +0 -21
  114. package/build/main/sdk/Cryptography/Worker/ThreadPool.js +0 -87
  115. package/build/main/sdk/Cryptography/Worker/Worker.d.ts +0 -15
  116. package/build/main/sdk/Cryptography/Worker/Worker.js +0 -69
  117. package/build/main/sdk/Cryptography/utils/adapters/cryptoAdapters.d.ts +0 -8
  118. package/build/main/sdk/Cryptography/utils/adapters/cryptoAdapters.js +0 -15
  119. package/build/module/sdk/Cryptography/CryptoProvider/LocalCrypto.d.ts +0 -21
  120. package/build/module/sdk/Cryptography/CryptoProvider/LocalCrypto.js +0 -36
  121. package/build/module/sdk/Cryptography/Worker/ThreadPool.d.ts +0 -21
  122. package/build/module/sdk/Cryptography/Worker/ThreadPool.js +0 -89
  123. package/build/module/sdk/Cryptography/Worker/Worker.d.ts +0 -15
  124. package/build/module/sdk/Cryptography/Worker/Worker.js +0 -66
  125. package/build/module/sdk/Cryptography/utils/adapters/cryptoAdapters.d.ts +0 -8
  126. package/build/module/sdk/Cryptography/utils/adapters/cryptoAdapters.js +0 -12
  127. /package/assets/data/{defaultCryptoRules.json → scanoss-crypto-algorithm-rules.json} +0 -0
@@ -1,31 +1,25 @@
1
- import { CryptoCfg } from './CryptoCfg';
2
- import { ILocalCryptographyResponse } from './CryptographyTypes';
1
+ import { CryptoCfg } from "./CryptoCfg";
2
+ import { CryptographyResponse, LocalCryptographyResponse } from "./CryptographyTypes";
3
+ import { PurlRequest } from "../Services/Grpc/BaseService";
3
4
  /**
4
- * A class responsible for scanning files for cryptographic items.
5
+ * Provides functionality to scan files and components for cryptographic items.
6
+ * This class acts as the primary entry point for cryptographic scanning.
5
7
  */
6
8
  export declare class CryptographyScanner {
7
- private cryptoConfig;
8
- /**
9
- * Constructs a new CryptographyScanner.
10
- * @param cryptoCfg The cryptographic configuration.
11
- */
12
- constructor(cryptoCfg: CryptoCfg);
9
+ private readonly config;
10
+ constructor(cfg: CryptoCfg);
13
11
  /**
14
12
  * Scans an array of files for cryptographic items.
13
+ * Performs both algorithm detection and library scanning.
15
14
  * @param files An array of file paths to scan.
16
- * @returns A promise that resolves to an ILocalCryptographyResponse.
17
- */
18
- scan(files: Array<string>): Promise<ILocalCryptographyResponse>;
19
- /**
20
- * Scans a folder for cryptographic items.
21
- * @param path The path of the folder to scan.
22
- * @returns A promise that resolves to an ILocalCryptographyResponse.
23
- * @throws Error if the specified path is not a directory.
15
+ * @returns {LocalCryptographyResponse} A promise that resolves to a LocalCryptographyResponse containing scan results.
24
16
  */
25
- scanFolder(path: string): Promise<ILocalCryptographyResponse>;
17
+ scanFiles(files: Array<string>): Promise<LocalCryptographyResponse>;
26
18
  /**
27
- * Loads custom cryptographic rules from a file.
28
- * @returns A promise that resolves to the loaded rules.
19
+ * Scans components for cryptographic.
20
+ * Performs both algorithm detection and library scanning at the component level.
21
+ * @param req A request containing PURL's to scan
22
+ * @returns {CryptographyResponse} A promise that resolves to an array of CryptographyResponse objects.
29
23
  */
30
- private loadRules;
24
+ scanComponents(req: PurlRequest): Promise<Array<CryptographyResponse>>;
31
25
  }
@@ -1,58 +1,48 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.CryptographyScanner = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const Tree_1 = require("../tree/Tree");
9
- const LocalCrypto_1 = require("./CryptoProvider/LocalCrypto");
10
- const cryptoAdapters_1 = require("./utils/adapters/cryptoAdapters");
11
- const path_1 = __importDefault(require("path"));
4
+ const FileAlgorithmScanner_1 = require("./Algorithm/Files/FileAlgorithmScanner");
5
+ const FileHintScanner_1 = require("./Hint/Files/FileHintScanner");
6
+ const FileCryptographyResultCollector_1 = require("./Helper/ResultCollector/File/FileCryptographyResultCollector");
7
+ const ComponentCryptographyResultColletor_1 = require("./Helper/ResultCollector/Component/ComponentCryptographyResultColletor");
8
+ const ComponentAlgorithmScanner_1 = require("./Algorithm/Components/ComponentAlgorithmScanner");
9
+ const ComponentHintScanner_1 = require("./Hint/Components/ComponentHintScanner");
12
10
  /**
13
- * A class responsible for scanning files for cryptographic items.
11
+ * Provides functionality to scan files and components for cryptographic items.
12
+ * This class acts as the primary entry point for cryptographic scanning.
14
13
  */
15
14
  class CryptographyScanner {
16
- /**
17
- * Constructs a new CryptographyScanner.
18
- * @param cryptoCfg The cryptographic configuration.
19
- */
20
- constructor(cryptoCfg) {
21
- this.cryptoConfig = cryptoCfg;
15
+ constructor(cfg) {
16
+ this.config = cfg;
22
17
  }
23
18
  /**
24
19
  * Scans an array of files for cryptographic items.
20
+ * Performs both algorithm detection and library scanning.
25
21
  * @param files An array of file paths to scan.
26
- * @returns A promise that resolves to an ILocalCryptographyResponse.
27
- */
28
- async scan(files) {
29
- const cryptographyRules = await this.loadRules(this.cryptoConfig.getRulesPath());
30
- const localCrypto = new LocalCrypto_1.LocalCrypto(cryptographyRules, this.cryptoConfig.getNumberOfThreads());
31
- const cryptoItems = await localCrypto.search(files);
32
- return (0, cryptoAdapters_1.mapToILocalCryptographyResponse)(cryptoItems);
33
- }
34
- /**
35
- * Scans a folder for cryptographic items.
36
- * @param path The path of the folder to scan.
37
- * @returns A promise that resolves to an ILocalCryptographyResponse.
38
- * @throws Error if the specified path is not a directory.
22
+ * @returns {LocalCryptographyResponse} A promise that resolves to a LocalCryptographyResponse containing scan results.
39
23
  */
40
- async scanFolder(path) {
41
- if (!(await fs_1.default.promises.lstat(path)).isDirectory())
42
- throw new Error('Specified path is not a directory');
43
- const tree = new Tree_1.Tree(path);
44
- tree.build();
45
- return await this.scan(tree.getFileList());
24
+ async scanFiles(files) {
25
+ const cryptoResultCollector = new FileCryptographyResultCollector_1.FileCryptographyResultCollector();
26
+ const cryptoAlgorithmScanner = new FileAlgorithmScanner_1.FileAlgorithmScanner(this.config, cryptoResultCollector);
27
+ const cryptoHintScanner = new FileHintScanner_1.FileHintScanner(this.config, cryptoResultCollector);
28
+ await cryptoAlgorithmScanner.scan(files);
29
+ await cryptoHintScanner.scan(files);
30
+ return cryptoResultCollector.getResults();
46
31
  }
47
32
  /**
48
- * Loads custom cryptographic rules from a file.
49
- * @returns A promise that resolves to the loaded rules.
33
+ * Scans components for cryptographic.
34
+ * Performs both algorithm detection and library scanning at the component level.
35
+ * @param req A request containing PURL's to scan
36
+ * @returns {CryptographyResponse} A promise that resolves to an array of CryptographyResponse objects.
50
37
  */
51
- async loadRules(rulePath) {
52
- const cryptoRulePath = rulePath ? rulePath : path_1.default.join(__dirname, '../../../../assets/data/defaultCryptoRules.json');
53
- const rules = await fs_1.default.promises.readFile(cryptoRulePath, 'utf-8');
54
- return JSON.parse(rules);
38
+ async scanComponents(req) {
39
+ const componentCryptoResultCollector = new ComponentCryptographyResultColletor_1.ComponentCryptographyResultCollector();
40
+ const componentCryptoAlgorithmScanner = new ComponentAlgorithmScanner_1.ComponentAlgorithmScanner(this.config, componentCryptoResultCollector);
41
+ const componentCryptoHintScanner = new ComponentHintScanner_1.ComponentHintScanner(this.config, componentCryptoResultCollector);
42
+ await componentCryptoAlgorithmScanner.scan(req);
43
+ await componentCryptoHintScanner.scan(req);
44
+ return componentCryptoResultCollector.getResults();
55
45
  }
56
46
  }
57
47
  exports.CryptographyScanner = CryptographyScanner;
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvZ3JhcGh5U2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvQ3J5cHRvZ3JhcGh5L0NyeXB0b2dyYXBoeVNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLHVDQUFvQztBQUNwQyw4REFBMkQ7QUFNM0Qsb0VBRXlDO0FBQ3pDLGdEQUF3QjtBQUV4Qjs7R0FFRztBQUNILE1BQWEsbUJBQW1CO0lBRzlCOzs7T0FHRztJQUNILFlBQVksU0FBb0I7UUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQW9CO1FBQ3BDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNqRixNQUFNLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDL0YsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBQSxnREFBK0IsRUFBQyxXQUFXLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVk7UUFDbEMsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBaUI7UUFDdkMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLGNBQUksQ0FBQyxJQUFJLENBQ3JELFNBQVMsRUFDVCxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBRUY7QUFqREQsa0RBaURDIn0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvZ3JhcGh5U2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZGsvQ3J5cHRvZ3JhcGh5L0NyeXB0b2dyYXBoeVNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsaUZBRWdEO0FBQ2hELGtFQUErRDtBQU0vRCxtSEFFdUU7QUFDdkUsZ0lBRWdGO0FBQ2hGLGdHQUUwRDtBQUMxRCxpRkFFZ0Q7QUFJaEQ7OztHQUdHO0FBQ0gsTUFBYSxtQkFBbUI7SUFJOUIsWUFBWSxHQUFjO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBb0I7UUFDekMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGlFQUErQixFQUFFLENBQUM7UUFDcEUsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLDJDQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMzRixNQUFNLGlCQUFpQixHQUFHLElBQUksaUNBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDbEYsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQWdCO1FBQzFDLE1BQU0sOEJBQThCLEdBQUcsSUFBSSwwRUFBb0MsRUFBRSxDQUFDO1FBQ2xGLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxxREFBeUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLDhCQUE4QixDQUFDLENBQUM7UUFDbkgsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLDJDQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUN6RyxNQUFNLCtCQUErQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxNQUFNLDBCQUEwQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPLDhCQUE4QixDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3JELENBQUM7Q0FDRjtBQXJDRCxrREFxQ0MifQ==
@@ -5,10 +5,54 @@ export interface CryptoAlgorithm {
5
5
  export interface CryptoAlgorithmRules extends CryptoAlgorithm {
6
6
  keywords: Array<string>;
7
7
  }
8
- export interface ICryptoItem {
8
+ export interface CryptoAlgorithmJobResponse {
9
9
  file: string;
10
10
  algorithms: Array<CryptoAlgorithm>;
11
11
  }
12
- export interface ILocalCryptographyResponse {
13
- fileList: Array<ICryptoItem>;
12
+ export interface LocalCryptoAlgorithmJob {
13
+ file: string;
14
+ rules: Map<string, RegExp>;
15
+ cryptoMapper: Map<string, CryptoAlgorithm>;
16
+ }
17
+ export interface CryptoHintRule {
18
+ "id": string;
19
+ "name": string;
20
+ "description": string;
21
+ "keywords": Array<string>;
22
+ "url"?: string;
23
+ "category": string;
24
+ "purl"?: string;
25
+ "tags": Array<string>;
26
+ }
27
+ export interface LocalCryptoHintJob {
28
+ file: string;
29
+ rules: Array<CryptoHintRule>;
30
+ }
31
+ export interface CryptoHintJobResponse {
32
+ file: string;
33
+ hints: Array<CryptoHintResponse>;
34
+ }
35
+ export interface CryptoHintResponse {
36
+ "id": string;
37
+ "name": string;
38
+ "description": string;
39
+ "url"?: string;
40
+ "category": string;
41
+ "purl"?: string;
42
+ }
43
+ export interface CryptoAlgorithmResponse extends CryptoAlgorithm {
44
+ }
45
+ export interface LocalCryptography {
46
+ file: string;
47
+ algorithms: Array<CryptoAlgorithmResponse>;
48
+ hints: Array<CryptoHintResponse>;
49
+ }
50
+ export interface LocalCryptographyResponse {
51
+ fileList: Array<LocalCryptography>;
52
+ }
53
+ export interface CryptographyResponse {
54
+ purl: string;
55
+ version: string;
56
+ algorithms: Array<CryptoAlgorithmResponse>;
57
+ hints: Array<CryptoHintResponse>;
14
58
  }
@@ -0,0 +1,32 @@
1
+ import { CryptographyResponse } from "../../../CryptographyTypes";
2
+ import { AlgorithmResponse, HintsResponse } from "../../../../Services/Grpc/CryptographyService";
3
+ /**
4
+ * Collects and organizes cryptographic scan results for software components.
5
+ * This class maintains a mapping of component identifiers to their respective
6
+ * algorithm and hint detection results.
7
+ */
8
+ export declare class ComponentCryptographyResultCollector {
9
+ private resultMapper;
10
+ /**
11
+ * Gets an existing result entry for a component or creates a new one if it doesn't exist.
12
+ * @param purl The Package URL identifier for the component.
13
+ * @param version The version of the component.
14
+ * @returns The result entry for the specified component.
15
+ */
16
+ private getOrCreateResult;
17
+ /**
18
+ * Collects algorithm detection results and organizes them by component.
19
+ * @param algorithmResults The algorithm detection results to collect.
20
+ */
21
+ collectAlgorithmResults(algorithmResults: AlgorithmResponse): void;
22
+ /**
23
+ * Collects hint detection results and organizes them by component.
24
+ * @param hintResults The hint detection results to collect.
25
+ */
26
+ collectHintResults(hintResults: HintsResponse): void;
27
+ /**
28
+ * Retrieves all collected cryptography results.
29
+ * @returns An array of cryptography responses, one for each component.
30
+ */
31
+ getResults(): Array<CryptographyResponse>;
32
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentCryptographyResultCollector = void 0;
4
+ /**
5
+ * Collects and organizes cryptographic scan results for software components.
6
+ * This class maintains a mapping of component identifiers to their respective
7
+ * algorithm and hint detection results.
8
+ */
9
+ class ComponentCryptographyResultCollector {
10
+ constructor() {
11
+ this.resultMapper = new Map;
12
+ }
13
+ /**
14
+ * Gets an existing result entry for a component or creates a new one if it doesn't exist.
15
+ * @param purl The Package URL identifier for the component.
16
+ * @param version The version of the component.
17
+ * @returns The result entry for the specified component.
18
+ */
19
+ getOrCreateResult(purl, version) {
20
+ const key = `${purl}@${version}`;
21
+ if (!this.resultMapper.has(key)) {
22
+ this.resultMapper.set(key, {
23
+ purl,
24
+ version,
25
+ algorithms: [],
26
+ hints: []
27
+ });
28
+ }
29
+ return this.resultMapper.get(key);
30
+ }
31
+ /**
32
+ * Collects algorithm detection results and organizes them by component.
33
+ * @param algorithmResults The algorithm detection results to collect.
34
+ */
35
+ collectAlgorithmResults(algorithmResults) {
36
+ algorithmResults.purlsList.forEach((p) => {
37
+ if (p.version) {
38
+ const version = p.version.startsWith('v') ? p.version.slice(1) : p.version;
39
+ const result = this.getOrCreateResult(p.purl, version);
40
+ result.algorithms = p.algorithmsList;
41
+ }
42
+ });
43
+ }
44
+ /**
45
+ * Collects hint detection results and organizes them by component.
46
+ * @param hintResults The hint detection results to collect.
47
+ */
48
+ collectHintResults(hintResults) {
49
+ hintResults.purlsList.forEach((h) => {
50
+ if (h.versionsList.length > 0) {
51
+ const version = h.versionsList[0].startsWith('v') ? h.versionsList[0].slice(1) : h.versionsList[0];
52
+ const result = this.getOrCreateResult(h.purl, version);
53
+ result.hints = h.hintsList;
54
+ }
55
+ });
56
+ }
57
+ /**
58
+ * Retrieves all collected cryptography results.
59
+ * @returns An array of cryptography responses, one for each component.
60
+ */
61
+ getResults() {
62
+ return Array.from(this.resultMapper.values());
63
+ }
64
+ }
65
+ exports.ComponentCryptographyResultCollector = ComponentCryptographyResultCollector;
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50Q3J5cHRvZ3JhcGh5UmVzdWx0Q29sbGV0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2RrL0NyeXB0b2dyYXBoeS9IZWxwZXIvUmVzdWx0Q29sbGVjdG9yL0NvbXBvbmVudC9Db21wb25lbnRDcnlwdG9ncmFwaHlSZXN1bHRDb2xsZXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQTs7OztHQUlHO0FBQ0gsTUFBYSxvQ0FBb0M7SUFBakQ7UUFFVSxpQkFBWSxHQUFHLElBQUksR0FLekIsQ0FBQTtJQXlESixDQUFDO0lBdkRDOzs7OztPQUtHO0lBQ0ssaUJBQWlCLENBQUMsSUFBWSxFQUFFLE9BQWM7UUFDcEQsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUN6QixJQUFJO2dCQUNKLE9BQU87Z0JBQ1AsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsS0FBSyxFQUFFLEVBQUU7YUFDVixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksdUJBQXVCLENBQUMsZ0JBQW1DO1FBQ2hFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDZCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQzNFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGtCQUFrQixDQUFDLFdBQTBCO1FBQ2xELFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdkQsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVO1FBQ2IsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBRUY7QUFoRUQsb0ZBZ0VDIn0=
@@ -0,0 +1,36 @@
1
+ import { CryptoAlgorithmJobResponse, CryptoHintJobResponse, LocalCryptographyResponse } from "../../../CryptographyTypes";
2
+ export interface CryptographyCollector {
3
+ collectAlgorithmResults(algorithmResults: Array<CryptoAlgorithmJobResponse>): void;
4
+ collectHintResults(algorithmResults: Array<CryptoHintJobResponse>): void;
5
+ }
6
+ /**
7
+ * Collects and organizes cryptographic scan results for individual files.
8
+ * This class implements the CryptographyCollector interface and maintains
9
+ * a mapping of file paths to their respective algorithm and hint detection results.
10
+ */
11
+ export declare class FileCryptographyResultCollector implements CryptographyCollector {
12
+ private resultMapper;
13
+ /**
14
+ * Gets an existing result entry for a file or creates a new one if it doesn't exist.
15
+ * @param file The path to the file.
16
+ * @returns The result entry for the specified file.
17
+ */
18
+ private getOrCreateFileResult;
19
+ /**
20
+ * Collects algorithm detection results and organizes them by file.
21
+ * Skips files that have no detected algorithms.
22
+ * @param algorithmResults The array of algorithm job responses to collect.
23
+ */
24
+ collectAlgorithmResults(algorithmResults: Array<CryptoAlgorithmJobResponse>): void;
25
+ /**
26
+ * Collects hint detection results and organizes them by file.
27
+ * Skips files that have no detected hints.
28
+ * @param hintsResults The array of hint job responses to collect.
29
+ */
30
+ collectHintResults(hintsResults: Array<CryptoHintJobResponse>): void;
31
+ /**
32
+ * Retrieves all collected cryptography results for files.
33
+ * @returns A LocalCryptographyResponse containing results for all files.
34
+ */
35
+ getResults(): LocalCryptographyResponse;
36
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileCryptographyResultCollector = void 0;
4
+ /**
5
+ * Collects and organizes cryptographic scan results for individual files.
6
+ * This class implements the CryptographyCollector interface and maintains
7
+ * a mapping of file paths to their respective algorithm and hint detection results.
8
+ */
9
+ class FileCryptographyResultCollector {
10
+ constructor() {
11
+ this.resultMapper = new Map;
12
+ }
13
+ /**
14
+ * Gets an existing result entry for a file or creates a new one if it doesn't exist.
15
+ * @param file The path to the file.
16
+ * @returns The result entry for the specified file.
17
+ */
18
+ getOrCreateFileResult(file) {
19
+ if (!this.resultMapper.has(file)) {
20
+ this.resultMapper.set(file, {
21
+ file,
22
+ algorithms: [],
23
+ hints: []
24
+ });
25
+ }
26
+ return this.resultMapper.get(file);
27
+ }
28
+ /**
29
+ * Collects algorithm detection results and organizes them by file.
30
+ * Skips files that have no detected algorithms.
31
+ * @param algorithmResults The array of algorithm job responses to collect.
32
+ */
33
+ collectAlgorithmResults(algorithmResults) {
34
+ algorithmResults.forEach((r) => {
35
+ if (r.algorithms.length <= 0)
36
+ return;
37
+ const result = this.getOrCreateFileResult(r.file);
38
+ result.algorithms = r.algorithms;
39
+ });
40
+ }
41
+ /**
42
+ * Collects hint detection results and organizes them by file.
43
+ * Skips files that have no detected hints.
44
+ * @param hintsResults The array of hint job responses to collect.
45
+ */
46
+ collectHintResults(hintsResults) {
47
+ hintsResults.forEach((r) => {
48
+ if (r.hints.length <= 0)
49
+ return;
50
+ const result = this.getOrCreateFileResult(r.file);
51
+ result.hints = r.hints;
52
+ });
53
+ }
54
+ /**
55
+ * Retrieves all collected cryptography results for files.
56
+ * @returns A LocalCryptographyResponse containing results for all files.
57
+ */
58
+ getResults() {
59
+ return {
60
+ fileList: Array.from(this.resultMapper.values())
61
+ };
62
+ }
63
+ }
64
+ exports.FileCryptographyResultCollector = FileCryptographyResultCollector;
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZUNyeXB0b2dyYXBoeVJlc3VsdENvbGxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvQ3J5cHRvZ3JhcGh5L0hlbHBlci9SZXN1bHRDb2xsZWN0b3IvRmlsZS9GaWxlQ3J5cHRvZ3JhcGh5UmVzdWx0Q29sbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBOzs7O0dBSUc7QUFDSCxNQUFhLCtCQUErQjtJQUE1QztRQUVVLGlCQUFZLEdBQUcsSUFBSSxHQUl6QixDQUFBO0lBcURKLENBQUM7SUFuREM7Ozs7T0FJRztJQUNLLHFCQUFxQixDQUFDLElBQVk7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO2dCQUMxQixJQUFJO2dCQUNKLFVBQVUsRUFBRSxFQUFFO2dCQUNkLEtBQUssRUFBRSxFQUFFO2FBQ1YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSx1QkFBdUIsQ0FBQyxnQkFBa0Q7UUFDL0UsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUU7WUFDNUIsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDO2dCQUFFLE9BQU87WUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLFlBQTBDO1FBQ2xFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRTtZQUN4QixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7Z0JBQUUsT0FBTztZQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xELE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVO1FBQ2YsT0FBTztZQUNMLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDakQsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQTNERCwwRUEyREMifQ==
@@ -0,0 +1,19 @@
1
+ import { ComponentCryptographyResultCollector } from "../../Helper/ResultCollector/Component/ComponentCryptographyResultColletor";
2
+ import { PurlRequest } from "../../../Services/Grpc/BaseService";
3
+ import { HintsResponse } from "../../../Services/Grpc/CryptographyService";
4
+ import { BaseCryptographyScanner } from "../../BaseCryptographyScanner";
5
+ /**
6
+ * Scanner for detecting cryptographic hints in software components.
7
+ * This class extends the base cryptography scanner to specifically handle
8
+ * component-level cryptographic hint detection using a remote service.
9
+ */
10
+ export declare class ComponentHintScanner extends BaseCryptographyScanner<ComponentCryptographyResultCollector, PurlRequest, HintsResponse> {
11
+ /**
12
+ * Scans components identified by PURL for cryptographic hints.
13
+ * This method connects to a cryptography service to retrieve encryption
14
+ * hints for the specified components.
15
+ * @param req A request containing PURL (Package URL) identifiers for components to scan.
16
+ * @returns {HintsResponse} A promise that resolves to a HintsResponse containing detected cryptographic hints.
17
+ */
18
+ scan(req: PurlRequest): Promise<HintsResponse>;
19
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentHintScanner = void 0;
4
+ const CryptographyService_1 = require("../../../Services/Grpc/CryptographyService");
5
+ const BaseCryptographyScanner_1 = require("../../BaseCryptographyScanner");
6
+ /**
7
+ * Scanner for detecting cryptographic hints in software components.
8
+ * This class extends the base cryptography scanner to specifically handle
9
+ * component-level cryptographic hint detection using a remote service.
10
+ */
11
+ class ComponentHintScanner extends BaseCryptographyScanner_1.BaseCryptographyScanner {
12
+ /**
13
+ * Scans components identified by PURL for cryptographic hints.
14
+ * This method connects to a cryptography service to retrieve encryption
15
+ * hints for the specified components.
16
+ * @param req A request containing PURL (Package URL) identifiers for components to scan.
17
+ * @returns {HintsResponse} A promise that resolves to a HintsResponse containing detected cryptographic hints.
18
+ */
19
+ async scan(req) {
20
+ const cryptographyService = new CryptographyService_1.CryptographyService(this.config.getApikey(), this.config.getProxy());
21
+ const results = await cryptographyService.getEncryptionHints(req);
22
+ this.resultCollector.collectHintResults(results);
23
+ return results;
24
+ }
25
+ }
26
+ exports.ComponentHintScanner = ComponentHintScanner;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50SGludFNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2RrL0NyeXB0b2dyYXBoeS9IaW50L0NvbXBvbmVudHMvQ29tcG9uZW50SGludFNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsb0ZBQ29FO0FBQ3BFLDJFQUF3RTtBQUV4RTs7OztHQUlHO0FBQ0gsTUFBYSxvQkFDWCxTQUFRLGlEQUdRO0lBRWhCOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBZ0I7UUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLHlDQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLE1BQU0sT0FBTyxHQUFHLE1BQU0sbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUFuQkQsb0RBbUJDIn0=
@@ -0,0 +1,35 @@
1
+ import { CryptoCfg } from "../../CryptoCfg";
2
+ import { CryptoHintJobResponse } from "../../CryptographyTypes";
3
+ import { BaseCryptographyScanner } from "../../BaseCryptographyScanner";
4
+ import { FileCryptographyResultCollector } from "../../Helper/ResultCollector/File/FileCryptographyResultCollector";
5
+ /**
6
+ * A class responsible for scanning files for cryptographic items.
7
+ */
8
+ export declare class FileHintScanner extends BaseCryptographyScanner<FileCryptographyResultCollector, Array<string>, Array<CryptoHintJobResponse>> {
9
+ private readonly DEFAULT_CRYPTO_LIBRARY_RULE_FILENAME;
10
+ /**
11
+ * Constructs a new CryptographyScanner.
12
+ * @param cryptoCfg The cryptographic configuration.
13
+ * @param resultCollector cryptography results collector
14
+ */
15
+ constructor(cryptoCfg: CryptoCfg, resultCollector: FileCryptographyResultCollector);
16
+ /**
17
+ * Builds a collection of cryptographic hint analysis jobs from an array of files.
18
+ * This method loads library rules and initializes job objects for each file
19
+ * that will be used for cryptographic hint detection.
20
+ * @param files An array of file paths to analyze for cryptographic hints.
21
+ * @returns A promise that resolves to an array of job objects configured for hint analysis.
22
+ */
23
+ private buildJobs;
24
+ /**
25
+ * Scans an array of files for cryptographic items.
26
+ * @param files An array of file paths to scan.
27
+ * @returns A promise that resolves to an ILocalCryptographyResponse.
28
+ */
29
+ scan(files: Array<string>): Promise<Array<CryptoHintJobResponse>>;
30
+ /**
31
+ * Loads custom cryptographic rules from a file.
32
+ * @returns A promise that resolves to the loaded rules.
33
+ */
34
+ private loadRules;
35
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FileHintScanner = void 0;
7
+ const Job_1 = require("../../../Utils/Concurrency/Job");
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const WorkerPool_1 = require("../../../Utils/Concurrency/WorkerPool");
11
+ const HintProcessor_1 = require("./HintProcessor");
12
+ const BaseCryptographyScanner_1 = require("../../BaseCryptographyScanner");
13
+ /**
14
+ * A class responsible for scanning files for cryptographic items.
15
+ */
16
+ class FileHintScanner extends BaseCryptographyScanner_1.BaseCryptographyScanner {
17
+ /**
18
+ * Constructs a new CryptographyScanner.
19
+ * @param cryptoCfg The cryptographic configuration.
20
+ * @param resultCollector cryptography results collector
21
+ */
22
+ constructor(cryptoCfg, resultCollector) {
23
+ super(cryptoCfg, resultCollector);
24
+ this.DEFAULT_CRYPTO_LIBRARY_RULE_FILENAME = 'scanoss-crypto-library-rules.json';
25
+ }
26
+ /**
27
+ * Builds a collection of cryptographic hint analysis jobs from an array of files.
28
+ * This method loads library rules and initializes job objects for each file
29
+ * that will be used for cryptographic hint detection.
30
+ * @param files An array of file paths to analyze for cryptographic hints.
31
+ * @returns A promise that resolves to an array of job objects configured for hint analysis.
32
+ */
33
+ async buildJobs(files) {
34
+ const rules = await this.loadRules(this.config.getLibraryRulesPath());
35
+ const jobs = [];
36
+ files.forEach((f) => {
37
+ const newJob = new Job_1.Job({
38
+ file: f,
39
+ rules,
40
+ });
41
+ jobs.push(newJob);
42
+ });
43
+ return jobs;
44
+ }
45
+ /**
46
+ * Scans an array of files for cryptographic items.
47
+ * @param files An array of file paths to scan.
48
+ * @returns A promise that resolves to an ILocalCryptographyResponse.
49
+ */
50
+ async scan(files) {
51
+ const workerPool = new WorkerPool_1.WorkerPool(HintProcessor_1.cryptographyHintProcessor, this.config.getNumberOfThreads());
52
+ const jobs = await this.buildJobs(files);
53
+ workerPool.loadJobs(jobs);
54
+ const results = await workerPool.run();
55
+ this.resultCollector.collectHintResults(results);
56
+ return results;
57
+ }
58
+ /**
59
+ * Loads custom cryptographic rules from a file.
60
+ * @returns A promise that resolves to the loaded rules.
61
+ */
62
+ async loadRules(rulePath) {
63
+ const cryptoRulePath = rulePath ? rulePath : path_1.default.join(__dirname, '../../../../../../assets/data', this.DEFAULT_CRYPTO_LIBRARY_RULE_FILENAME);
64
+ const rules = await fs_1.default.promises.readFile(cryptoRulePath, 'utf-8');
65
+ return JSON.parse(rules);
66
+ }
67
+ }
68
+ exports.FileHintScanner = FileHintScanner;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZUhpbnRTY2FubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Nkay9DcnlwdG9ncmFwaHkvSGludC9GaWxlcy9GaWxlSGludFNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esd0RBQXFEO0FBS3JELGdEQUF3QjtBQUN4Qiw0Q0FBb0I7QUFDcEIsc0VBQW1FO0FBQ25FLG1EQUE0RDtBQUM1RCwyRUFBd0U7QUFNeEU7O0dBRUc7QUFDSCxNQUFhLGVBQ1gsU0FBUSxpREFHdUI7SUFJL0I7Ozs7T0FJRztJQUNILFlBQVksU0FBb0IsRUFBRSxlQUFnRDtRQUNoRixLQUFLLENBQUMsU0FBUyxFQUFDLGVBQWUsQ0FBQyxDQUFDO1FBUmxCLHlDQUFvQyxHQUFHLG1DQUFtQyxDQUFDO0lBUzVGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQWU7UUFDckMsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxHQUFtQyxFQUFFLENBQUM7UUFDaEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBRyxDQUFxQjtnQkFDekMsSUFBSSxFQUFDLENBQUM7Z0JBQ04sS0FBSzthQUNOLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFvQjtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLHVCQUFVLENBQTRDLHlDQUF5QixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzFJLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBaUI7UUFDdkMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLGNBQUksQ0FBQyxJQUFJLENBQ3JELFNBQVMsRUFDVCwrQkFBK0IsRUFBRSxJQUFJLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUM5RSxNQUFNLEtBQUssR0FBRyxNQUFNLFlBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUlGO0FBakVELDBDQWlFQyJ9
@@ -0,0 +1 @@
1
+ export declare const cryptographyHintProcessor = "\nconst { parentPort } = require('worker_threads');\nconst fs = require('fs');\n\nparentPort.on('message', async (job) => {\n\n const MAX_FILE_SIZE = 2 * 1024 * 1024 * 1024;\n const { data } = job;\n const { file, rules } = data;\n\n const stats = await fs.promises.stat(file);\n if (stats.size > MAX_FILE_SIZE) {\n parentPort.postMessage({ file, hints: [] });\n return;\n }\n\n let content = fs.readFileSync(file, 'utf-8');\n const hints = [];\n rules.forEach((rule) => {\n for (const keyword of rule.keywords) {\n if (content.includes(keyword)) {\n const {id, name, description, url , category, purl } = rule;\n hints.push({ id, name, category, purl, description, url });\n break;\n }\n }\n });\n parentPort.postMessage({ file, hints });\n });\n";
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cryptographyHintProcessor = void 0;
4
+ exports.cryptographyHintProcessor = `
5
+ const { parentPort } = require('worker_threads');
6
+ const fs = require('fs');
7
+
8
+ parentPort.on('message', async (job) => {
9
+
10
+ const MAX_FILE_SIZE = 2 * 1024 * 1024 * 1024;
11
+ const { data } = job;
12
+ const { file, rules } = data;
13
+
14
+ const stats = await fs.promises.stat(file);
15
+ if (stats.size > MAX_FILE_SIZE) {
16
+ parentPort.postMessage({ file, hints: [] });
17
+ return;
18
+ }
19
+
20
+ let content = fs.readFileSync(file, 'utf-8');
21
+ const hints = [];
22
+ rules.forEach((rule) => {
23
+ for (const keyword of rule.keywords) {
24
+ if (content.includes(keyword)) {
25
+ const {id, name, description, url , category, purl } = rule;
26
+ hints.push({ id, name, category, purl, description, url });
27
+ break;
28
+ }
29
+ }
30
+ });
31
+ parentPort.postMessage({ file, hints });
32
+ });
33
+ `;
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGludFByb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvQ3J5cHRvZ3JhcGh5L0hpbnQvRmlsZXMvSGludFByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLHlCQUF5QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTZCeEMsQ0FBQyJ9