scanoss 0.15.7 → 0.16.0
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.
- package/CHANGELOG.md +53 -97
- package/LICENSE +20 -20
- package/README.md +75 -3
- package/assets/ReportHTMLTemplate/index.html +11 -8
- package/assets/data/scanoss-crypto-library-rules.json +2930 -0
- package/build/main/cli/bin/cli-bin.js +6 -2
- package/build/main/cli/commands/crypto.js +14 -7
- package/build/main/cli/commands/scan.js +66 -23
- package/build/main/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.d.ts +19 -0
- package/build/main/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.js +27 -0
- package/build/main/sdk/Cryptography/Algorithm/Files/AlgorithmProcessor.d.ts +1 -0
- package/build/main/sdk/Cryptography/Algorithm/Files/AlgorithmProcessor.js +39 -0
- package/build/main/sdk/Cryptography/Algorithm/Files/FileAlgorithmScanner.d.ts +42 -0
- package/build/main/sdk/Cryptography/Algorithm/Files/FileAlgorithmScanner.js +87 -0
- package/build/main/sdk/Cryptography/{CryptoDef/CryptoDef.d.ts → Algorithm/Files/Helper/Helper.d.ts} +1 -1
- package/build/main/sdk/Cryptography/{CryptoDef/CryptoDef.js → Algorithm/Files/Helper/Helper.js} +1 -1
- package/build/main/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.d.ts +2 -2
- package/build/main/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.js +1 -1
- package/build/main/sdk/Cryptography/BaseCryptographyScanner.d.ts +25 -0
- package/build/main/sdk/Cryptography/BaseCryptographyScanner.js +23 -0
- package/build/main/sdk/Cryptography/CryptoCfg.d.ts +32 -5
- package/build/main/sdk/Cryptography/CryptoCfg.js +35 -5
- package/build/main/sdk/Cryptography/CryptographyScanner.d.ts +15 -21
- package/build/main/sdk/Cryptography/CryptographyScanner.js +31 -41
- package/build/main/sdk/Cryptography/CryptographyTypes.d.ts +47 -3
- package/build/main/sdk/Cryptography/Helper/ResultCollector/Component/ComponentCryptographyResultColletor.d.ts +32 -0
- package/build/main/sdk/Cryptography/Helper/ResultCollector/Component/ComponentCryptographyResultColletor.js +66 -0
- package/build/main/sdk/Cryptography/Helper/ResultCollector/File/FileCryptographyResultCollector.d.ts +36 -0
- package/build/main/sdk/Cryptography/Helper/ResultCollector/File/FileCryptographyResultCollector.js +65 -0
- package/build/main/sdk/Cryptography/Hint/Components/ComponentHintScanner.d.ts +19 -0
- package/build/main/sdk/Cryptography/Hint/Components/ComponentHintScanner.js +27 -0
- package/build/main/sdk/Cryptography/Hint/Files/FileHintScanner.d.ts +35 -0
- package/build/main/sdk/Cryptography/Hint/Files/FileHintScanner.js +69 -0
- package/build/main/sdk/Cryptography/Hint/Files/HintProcessor.d.ts +1 -0
- package/build/main/sdk/Cryptography/Hint/Files/HintProcessor.js +34 -0
- package/build/main/sdk/Filtering/Filtering.js +1 -2
- package/build/main/sdk/Logger.d.ts +2 -0
- package/build/main/sdk/Logger.js +7 -2
- package/build/main/sdk/Report/DataLayer/DataLayerTypes.d.ts +8 -4
- package/build/main/sdk/Report/DataLayer/DataProviders/CryptographyDataProvider.d.ts +7 -7
- package/build/main/sdk/Report/DataLayer/DataProviders/CryptographyDataProvider.js +71 -11
- package/build/main/sdk/Services/Grpc/BaseService.js +1 -1
- package/build/main/sdk/Services/Grpc/CryptographyService.d.ts +3 -0
- package/build/main/sdk/Services/Grpc/CryptographyService.js +16 -1
- package/build/main/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.d.ts +72 -0
- package/build/main/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.js +87 -3
- package/build/main/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_pb.js +1987 -127
- package/build/main/sdk/Utils/Concurrency/Job.d.ts +8 -0
- package/build/main/sdk/Utils/Concurrency/Job.js +17 -0
- package/build/main/sdk/Utils/Concurrency/JobProcessor.d.ts +10 -0
- package/build/main/sdk/Utils/Concurrency/JobProcessor.js +51 -0
- package/build/main/sdk/Utils/Concurrency/WorkerPool.d.ts +14 -0
- package/build/main/sdk/Utils/Concurrency/WorkerPool.js +69 -0
- package/build/main/sdk/Utils/Concurrency/types.d.ts +18 -0
- package/build/main/sdk/Utils/Concurrency/types.js +3 -0
- package/build/main/sdk/scanner/ScannerTypes.js +1 -1
- package/build/main/tsconfig.tsbuildinfo +1 -1
- package/build/module/cli/bin/cli-bin.js +6 -2
- package/build/module/cli/commands/crypto.js +14 -7
- package/build/module/cli/commands/scan.js +66 -23
- package/build/module/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.d.ts +19 -0
- package/build/module/sdk/Cryptography/Algorithm/Components/ComponentAlgorithmScanner.js +23 -0
- package/build/module/sdk/Cryptography/Algorithm/Files/AlgorithmProcessor.d.ts +1 -0
- package/build/module/sdk/Cryptography/Algorithm/Files/AlgorithmProcessor.js +36 -0
- package/build/module/sdk/Cryptography/Algorithm/Files/FileAlgorithmScanner.d.ts +42 -0
- package/build/module/sdk/Cryptography/Algorithm/Files/FileAlgorithmScanner.js +80 -0
- package/build/module/sdk/Cryptography/{CryptoDef/CryptoDef.d.ts → Algorithm/Files/Helper/Helper.d.ts} +1 -1
- package/build/module/sdk/Cryptography/{CryptoDef/CryptoDef.js → Algorithm/Files/Helper/Helper.js} +1 -1
- package/build/module/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.d.ts +2 -2
- package/build/module/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.js +1 -1
- package/build/module/sdk/Cryptography/BaseCryptographyScanner.d.ts +25 -0
- package/build/module/sdk/Cryptography/BaseCryptographyScanner.js +21 -0
- package/build/module/sdk/Cryptography/CryptoCfg.d.ts +32 -5
- package/build/module/sdk/Cryptography/CryptoCfg.js +39 -6
- package/build/module/sdk/Cryptography/CryptographyScanner.d.ts +15 -21
- package/build/module/sdk/Cryptography/CryptographyScanner.js +32 -39
- package/build/module/sdk/Cryptography/CryptographyTypes.d.ts +47 -3
- package/build/module/sdk/Cryptography/Helper/ResultCollector/Component/ComponentCryptographyResultColletor.d.ts +32 -0
- package/build/module/sdk/Cryptography/Helper/ResultCollector/Component/ComponentCryptographyResultColletor.js +60 -0
- package/build/module/sdk/Cryptography/Helper/ResultCollector/File/FileCryptographyResultCollector.d.ts +36 -0
- package/build/module/sdk/Cryptography/Helper/ResultCollector/File/FileCryptographyResultCollector.js +59 -0
- package/build/module/sdk/Cryptography/Hint/Components/ComponentHintScanner.d.ts +19 -0
- package/build/module/sdk/Cryptography/Hint/Components/ComponentHintScanner.js +23 -0
- package/build/module/sdk/Cryptography/Hint/Files/FileHintScanner.d.ts +35 -0
- package/build/module/sdk/Cryptography/Hint/Files/FileHintScanner.js +62 -0
- package/build/module/sdk/Cryptography/Hint/Files/HintProcessor.d.ts +1 -0
- package/build/module/sdk/Cryptography/Hint/Files/HintProcessor.js +31 -0
- package/build/module/sdk/Filtering/Filtering.js +1 -2
- package/build/module/sdk/Logger.d.ts +2 -0
- package/build/module/sdk/Logger.js +8 -2
- package/build/module/sdk/Report/DataLayer/DataLayerTypes.d.ts +8 -4
- package/build/module/sdk/Report/DataLayer/DataProviders/CryptographyDataProvider.d.ts +7 -7
- package/build/module/sdk/Report/DataLayer/DataProviders/CryptographyDataProvider.js +73 -14
- package/build/module/sdk/Services/Grpc/BaseService.js +1 -1
- package/build/module/sdk/Services/Grpc/CryptographyService.d.ts +3 -0
- package/build/module/sdk/Services/Grpc/CryptographyService.js +16 -1
- package/build/module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.d.ts +72 -0
- package/build/module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_grpc_pb.js +87 -3
- package/build/module/sdk/Services/Grpc/scanoss/api/cryptography/v2/scanoss-cryptography_pb.js +1987 -127
- package/build/module/sdk/Utils/Concurrency/Job.d.ts +8 -0
- package/build/module/sdk/Utils/Concurrency/Job.js +14 -0
- package/build/module/sdk/Utils/Concurrency/JobProcessor.d.ts +10 -0
- package/build/module/sdk/Utils/Concurrency/JobProcessor.js +47 -0
- package/build/module/sdk/Utils/Concurrency/WorkerPool.d.ts +14 -0
- package/build/module/sdk/Utils/Concurrency/WorkerPool.js +65 -0
- package/build/module/sdk/Utils/Concurrency/types.d.ts +18 -0
- package/build/module/sdk/Utils/Concurrency/types.js +2 -0
- package/build/module/sdk/scanner/ScannerTypes.js +1 -1
- package/build/module/tsconfig.module.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/build/main/sdk/Cryptography/CryptoProvider/LocalCrypto.d.ts +0 -21
- package/build/main/sdk/Cryptography/CryptoProvider/LocalCrypto.js +0 -37
- package/build/main/sdk/Cryptography/Worker/ThreadPool.d.ts +0 -21
- package/build/main/sdk/Cryptography/Worker/ThreadPool.js +0 -87
- package/build/main/sdk/Cryptography/Worker/Worker.d.ts +0 -15
- package/build/main/sdk/Cryptography/Worker/Worker.js +0 -69
- package/build/main/sdk/Cryptography/utils/adapters/cryptoAdapters.d.ts +0 -8
- package/build/main/sdk/Cryptography/utils/adapters/cryptoAdapters.js +0 -15
- package/build/module/sdk/Cryptography/CryptoProvider/LocalCrypto.d.ts +0 -21
- package/build/module/sdk/Cryptography/CryptoProvider/LocalCrypto.js +0 -36
- package/build/module/sdk/Cryptography/Worker/ThreadPool.d.ts +0 -21
- package/build/module/sdk/Cryptography/Worker/ThreadPool.js +0 -89
- package/build/module/sdk/Cryptography/Worker/Worker.d.ts +0 -15
- package/build/module/sdk/Cryptography/Worker/Worker.js +0 -66
- package/build/module/sdk/Cryptography/utils/adapters/cryptoAdapters.d.ts +0 -8
- package/build/module/sdk/Cryptography/utils/adapters/cryptoAdapters.js +0 -12
- /package/assets/data/{defaultCryptoRules.json → scanoss-crypto-algorithm-rules.json} +0 -0
|
@@ -20,7 +20,10 @@ import { DecompressionManager } from "../../sdk/Decompress/DecompressionManager"
|
|
|
20
20
|
import path from "path";
|
|
21
21
|
import { LicenseObligationDataProvider } from "../../sdk/Report/DataLayer/DataProviders/LicenseObligationDataProvider";
|
|
22
22
|
import { CryptographyDataProvider } from "../../sdk/Report/DataLayer/DataProviders/CryptographyDataProvider";
|
|
23
|
+
import { CryptoCfg } from "../../sdk/Cryptography/CryptoCfg";
|
|
24
|
+
import { CryptographyScanner } from "../../sdk/Cryptography/CryptographyScanner";
|
|
23
25
|
export async function scanHandler(rootPath, options) {
|
|
26
|
+
// TODO: Add flag to enable debug. False by default. logger.enableDebug(options.debug);
|
|
24
27
|
rootPath = path.resolve(rootPath);
|
|
25
28
|
const pathIsFolder = await isFolder(rootPath);
|
|
26
29
|
const projectName = getProjectNameFromPath(rootPath);
|
|
@@ -62,7 +65,7 @@ export async function scanHandler(rootPath, options) {
|
|
|
62
65
|
let scannerInput = { fileList: [] };
|
|
63
66
|
// SBOM Ingestion
|
|
64
67
|
if (options.ignore) {
|
|
65
|
-
scannerInput.sbom = fs.readFileSync(options.ignore,
|
|
68
|
+
scannerInput.sbom = fs.readFileSync(options.ignore, "utf-8");
|
|
66
69
|
scannerInput.sbomMode = SbomMode.SBOM_IGNORE;
|
|
67
70
|
}
|
|
68
71
|
// Settings Ingestion
|
|
@@ -83,30 +86,28 @@ export async function scanHandler(rootPath, options) {
|
|
|
83
86
|
scannerInput.engineFlags = options.flags;
|
|
84
87
|
if (options.wfp)
|
|
85
88
|
scannerInput.wfpPath = rootPath;
|
|
86
|
-
const wfpMode = options.hpsm
|
|
87
|
-
? WinnowingMode.FULL_WINNOWING_HPSM
|
|
88
|
-
: WinnowingMode.FULL_WINNOWING;
|
|
89
|
+
const wfpMode = options.hpsm ? WinnowingMode.FULL_WINNOWING_HPSM : WinnowingMode.FULL_WINNOWING;
|
|
89
90
|
scannerInput.winnowing = { mode: wfpMode };
|
|
90
91
|
if (!options.wfp) {
|
|
91
92
|
if (pathIsFolder) {
|
|
92
|
-
console.error(
|
|
93
|
+
console.error("\nReading directory... ");
|
|
93
94
|
const tree = new Tree(rootPath);
|
|
94
95
|
tree.build();
|
|
95
96
|
if (options.extract) {
|
|
96
|
-
const archives = tree.getFileList(new DecompressionFilter(
|
|
97
|
-
console.error(
|
|
97
|
+
const archives = tree.getFileList(new DecompressionFilter(""));
|
|
98
|
+
console.error("Searching archives files...");
|
|
98
99
|
if (archives.length) {
|
|
99
|
-
console.error(
|
|
100
|
+
console.error("Extracting archives...");
|
|
100
101
|
const decompressionManager = new DecompressionManager(options.extractDeep, options.extractSuffix, options.extractOverwrite);
|
|
101
102
|
await decompressionManager.decompress(archives);
|
|
102
|
-
console.error(
|
|
103
|
+
console.error("Reindexing files...");
|
|
103
104
|
tree.build();
|
|
104
105
|
}
|
|
105
106
|
else
|
|
106
|
-
console.error(
|
|
107
|
+
console.error("No archives found.");
|
|
107
108
|
}
|
|
108
|
-
scannerInput.fileList = tree.getFileList(new ScanFilter(
|
|
109
|
-
dependencyInput = tree.getFileList(new DependencyFilter(
|
|
109
|
+
scannerInput.fileList = tree.getFileList(new ScanFilter(""));
|
|
110
|
+
dependencyInput = tree.getFileList(new DependencyFilter(""));
|
|
110
111
|
}
|
|
111
112
|
else {
|
|
112
113
|
scannerInput.fileList = [rootPath];
|
|
@@ -114,12 +115,12 @@ export async function scanHandler(rootPath, options) {
|
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
117
|
else {
|
|
117
|
-
const winnowing = fs.readFileSync(rootPath, { encoding:
|
|
118
|
+
const winnowing = fs.readFileSync(rootPath, { encoding: "utf-8" });
|
|
118
119
|
scannerInput.fileList.length = [...winnowing.matchAll(/file=/g)].length;
|
|
119
120
|
}
|
|
120
121
|
if (!options.verbose) {
|
|
121
122
|
const optBar1 = {
|
|
122
|
-
format:
|
|
123
|
+
format: "Scan Progress: [{bar}] {percentage}% | Scanned {value} files of {total}",
|
|
123
124
|
};
|
|
124
125
|
const bar1 = new cliProgress.SingleBar(optBar1, cliProgress.Presets.shades_classic);
|
|
125
126
|
bar1.start(scannerInput.fileList.length, 0);
|
|
@@ -140,25 +141,67 @@ export async function scanHandler(rootPath, options) {
|
|
|
140
141
|
}
|
|
141
142
|
//Launch parallel scanners
|
|
142
143
|
const pScanner = scanner.scan([scannerInput]);
|
|
143
|
-
const [scannerResultPath, depResults] = await Promise.all([
|
|
144
|
-
|
|
145
|
-
pDependencyScanner,
|
|
146
|
-
]);
|
|
147
|
-
let scannerResults = JSON.parse(await fs.promises.readFile(scannerResultPath, 'utf-8'));
|
|
144
|
+
const [scannerResultPath, depResults] = await Promise.all([pScanner, pDependencyScanner]);
|
|
145
|
+
let scannerResults = JSON.parse(await fs.promises.readFile(scannerResultPath, "utf-8"));
|
|
148
146
|
//TODO Unify results.json and dependency.json. What happens with result.json that includes dependencies?
|
|
149
147
|
const scannersResults = {
|
|
150
148
|
scanner: scannerResults,
|
|
151
149
|
...(options.dependencies && { dependencies: depResults }),
|
|
152
150
|
};
|
|
153
|
-
let scannerResultsString = JSON.stringify(
|
|
154
|
-
|
|
151
|
+
let scannerResultsString = JSON.stringify(scannerResults, null, 2);
|
|
152
|
+
// Crypto
|
|
153
|
+
const resultsWithCrypto = {
|
|
154
|
+
scanner: scannerResults,
|
|
155
|
+
...{
|
|
156
|
+
cryptography: {
|
|
157
|
+
files: [],
|
|
158
|
+
components: [],
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
if (options.cryptography) {
|
|
163
|
+
// Load rules
|
|
164
|
+
let algorithmRules = null;
|
|
165
|
+
let libraryRules = null;
|
|
166
|
+
if (options.algorithmRules)
|
|
167
|
+
algorithmRules = options.algorithmRules;
|
|
168
|
+
if (options.libraryRules)
|
|
169
|
+
libraryRules = options.libraryRules;
|
|
170
|
+
// Local Cryptography
|
|
171
|
+
const cryptoCfg = new CryptoCfg({
|
|
172
|
+
threads: 5,
|
|
173
|
+
libraryRulesPath: libraryRules,
|
|
174
|
+
algorithmRulesPath: algorithmRules,
|
|
175
|
+
apiKey: options.key,
|
|
176
|
+
proxy: options.proxy,
|
|
177
|
+
});
|
|
178
|
+
const cryptoScanner = new CryptographyScanner(cryptoCfg);
|
|
179
|
+
let localCrypto = await cryptoScanner.scanFiles(scannerInput.fileList);
|
|
180
|
+
localCrypto.fileList = localCrypto.fileList.map((c) => {
|
|
181
|
+
return { ...c, file: c.file.replace(rootPath, "") };
|
|
182
|
+
});
|
|
183
|
+
resultsWithCrypto.cryptography.files = localCrypto.fileList;
|
|
184
|
+
// Component Cryptography
|
|
185
|
+
if (options.key) {
|
|
186
|
+
let componentList = Object.values(scannersResults.scanner).flat();
|
|
187
|
+
componentList = componentList.filter((component) => component.id !== "none");
|
|
188
|
+
const cryptoRequest = {
|
|
189
|
+
purlsList: componentList.map((c) => {
|
|
190
|
+
return { purl: c.purl[0], requirement: c.version };
|
|
191
|
+
}),
|
|
192
|
+
};
|
|
193
|
+
resultsWithCrypto.cryptography.components = await cryptoScanner.scanComponents(cryptoRequest);
|
|
194
|
+
}
|
|
195
|
+
scannerResultsString = JSON.stringify(resultsWithCrypto, null, 2);
|
|
196
|
+
}
|
|
197
|
+
if (options.format && options.format.toLowerCase() === "html") {
|
|
155
198
|
const dataProviderManager = new DataProviderManager();
|
|
156
199
|
dataProviderManager.addDataProvider(new ComponentDataProvider(scannersResults.scanner, scannersResults.dependencies));
|
|
157
200
|
dataProviderManager.addDataProvider(new DependencyDataProvider(scannersResults.dependencies));
|
|
158
201
|
dataProviderManager.addDataProvider(new LicenseDataProvider(scannersResults.scanner, scannersResults.dependencies));
|
|
159
202
|
dataProviderManager.addDataProvider(new SummaryDataProvider(projectName, new Date(), scannersResults.scanner));
|
|
160
203
|
dataProviderManager.addDataProvider(new LicenseObligationDataProvider(scannersResults.scanner, scannersResults.dependencies));
|
|
161
|
-
dataProviderManager.addDataProvider(new CryptographyDataProvider(
|
|
204
|
+
dataProviderManager.addDataProvider(new CryptographyDataProvider(resultsWithCrypto.cryptography.files, resultsWithCrypto.cryptography.components));
|
|
162
205
|
const report = new Report(dataProviderManager);
|
|
163
206
|
scannerResultsString = await report.getHTML();
|
|
164
207
|
}
|
|
@@ -167,4 +210,4 @@ export async function scanHandler(rootPath, options) {
|
|
|
167
210
|
else
|
|
168
211
|
console.log(scannerResultsString);
|
|
169
212
|
}
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvc2Nhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFDTCxRQUFRLEVBQ1IsYUFBYSxFQUdiLGFBQWEsRUFDZCxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0MsT0FBTyxXQUFXLE1BQU0sY0FBYyxDQUFDO0FBSXZDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLFFBQVEsRUFDVCxNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQ0wsb0JBQW9CLEVBQ3JCLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ3BCLE1BQU0sZ0RBQWdELENBQUM7QUFDeEQsT0FBTyxFQUNMLHFCQUFxQixFQUN0QixNQUFNLGdFQUFnRSxDQUFDO0FBQ3hFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdkIsTUFBTSxpRUFBaUUsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsbUJBQW1CLEVBQ3BCLE1BQU0sOERBQThELENBQUM7QUFDdEUsT0FBTyxFQUNMLG1CQUFtQixFQUNwQixNQUFNLDhEQUE4RCxDQUFDO0FBQ3RFLE9B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
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGkvY29tbWFuZHMvc2Nhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFnQyxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0SCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sV0FBVyxNQUFNLGNBQWMsQ0FBQztBQUV2QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWxGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDckYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDdkcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDekcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDbkcsT0FBTyxFQUFF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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ComponentCryptographyResultCollector } from "../../Helper/ResultCollector/Component/ComponentCryptographyResultColletor";
|
|
2
|
+
import { AlgorithmResponse } from "../../../Services/Grpc/CryptographyService";
|
|
3
|
+
import { PurlRequest } from "../../../Services/Grpc/BaseService";
|
|
4
|
+
import { BaseCryptographyScanner } from "../../BaseCryptographyScanner";
|
|
5
|
+
/**
|
|
6
|
+
* Scanner for detecting cryptographic algorithms in software components.
|
|
7
|
+
* This class extends the base cryptography scanner to specifically handle
|
|
8
|
+
* component-level cryptographic algorithm detection using a remote service.
|
|
9
|
+
*/
|
|
10
|
+
export declare class ComponentAlgorithmScanner extends BaseCryptographyScanner<ComponentCryptographyResultCollector, PurlRequest, AlgorithmResponse> {
|
|
11
|
+
/**
|
|
12
|
+
* Scans components identified by PURL for cryptographic algorithms.
|
|
13
|
+
* This method connects to a cryptography service to retrieve algorithm
|
|
14
|
+
* information for the specified components.
|
|
15
|
+
* @param req A request containing PURL (Package URL) identifiers for components to scan.
|
|
16
|
+
* @returns {AlgorithmResponse} A promise that resolves to an AlgorithmResponse containing detected cryptographic algorithms.
|
|
17
|
+
*/
|
|
18
|
+
scan(req: PurlRequest): Promise<AlgorithmResponse>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CryptographyService } from "../../../Services/Grpc/CryptographyService";
|
|
2
|
+
import { BaseCryptographyScanner } from "../../BaseCryptographyScanner";
|
|
3
|
+
/**
|
|
4
|
+
* Scanner for detecting cryptographic algorithms in software components.
|
|
5
|
+
* This class extends the base cryptography scanner to specifically handle
|
|
6
|
+
* component-level cryptographic algorithm detection using a remote service.
|
|
7
|
+
*/
|
|
8
|
+
export class ComponentAlgorithmScanner extends BaseCryptographyScanner {
|
|
9
|
+
/**
|
|
10
|
+
* Scans components identified by PURL for cryptographic algorithms.
|
|
11
|
+
* This method connects to a cryptography service to retrieve algorithm
|
|
12
|
+
* information for the specified components.
|
|
13
|
+
* @param req A request containing PURL (Package URL) identifiers for components to scan.
|
|
14
|
+
* @returns {AlgorithmResponse} A promise that resolves to an AlgorithmResponse containing detected cryptographic algorithms.
|
|
15
|
+
*/
|
|
16
|
+
async scan(req) {
|
|
17
|
+
const cryptographyService = new CryptographyService(this.config.getApikey(), this.config.getProxy());
|
|
18
|
+
const results = await cryptographyService.getAlgorithms(req);
|
|
19
|
+
this.resultCollector.collectAlgorithmResults(results);
|
|
20
|
+
return results;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50QWxnb3JpdGhtU2Nhbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvQ3J5cHRvZ3JhcGh5L0FsZ29yaXRobS9Db21wb25lbnRzL0NvbXBvbmVudEFsZ29yaXRobVNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUVMLG1CQUFtQixFQUNwQixNQUFNLDRDQUE0QyxDQUFDO0FBRXBELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXhFOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8seUJBQ1gsU0FBUSx1QkFHWTtJQUVwQjs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQWdCO1FBQ2hDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUN6RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUIsTUFBTSxPQUFPLEdBQXFCLE1BQU0sbUJBQW1CLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxlQUFlLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const cryptographyAlgorithmProcessor = "\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, cryptoMapper } = data;\n\n const cryptoFound = new Array();\n const stats = await fs.promises.stat(file);\n if (stats.size > MAX_FILE_SIZE) {\n parentPort.postMessage({ file, algorithms:[] });\n return;\n }\n\n let content = fs.readFileSync(file, 'utf-8');\n rules.forEach((value, key) => {\n try {\n const matches = content.match(value);\n if (matches) {\n cryptoFound.push(key);\n }\n } catch (e){\n console.error(e);\n }\n });\n const algorithms = [];\n cryptoFound.forEach((cf)=>{\n algorithms.push(cryptoMapper.get(cf));\n });\n parentPort.postMessage({ file, algorithms });\n });\n";
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export const cryptographyAlgorithmProcessor = `
|
|
2
|
+
const { parentPort } = require('worker_threads');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
|
|
5
|
+
parentPort.on('message', async (job) => {
|
|
6
|
+
|
|
7
|
+
const MAX_FILE_SIZE = 2 * 1024 * 1024 * 1024;
|
|
8
|
+
const { data } = job;
|
|
9
|
+
const { file, rules, cryptoMapper } = data;
|
|
10
|
+
|
|
11
|
+
const cryptoFound = new Array();
|
|
12
|
+
const stats = await fs.promises.stat(file);
|
|
13
|
+
if (stats.size > MAX_FILE_SIZE) {
|
|
14
|
+
parentPort.postMessage({ file, algorithms:[] });
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
let content = fs.readFileSync(file, 'utf-8');
|
|
19
|
+
rules.forEach((value, key) => {
|
|
20
|
+
try {
|
|
21
|
+
const matches = content.match(value);
|
|
22
|
+
if (matches) {
|
|
23
|
+
cryptoFound.push(key);
|
|
24
|
+
}
|
|
25
|
+
} catch (e){
|
|
26
|
+
console.error(e);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
const algorithms = [];
|
|
30
|
+
cryptoFound.forEach((cf)=>{
|
|
31
|
+
algorithms.push(cryptoMapper.get(cf));
|
|
32
|
+
});
|
|
33
|
+
parentPort.postMessage({ file, algorithms });
|
|
34
|
+
});
|
|
35
|
+
`;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWxnb3JpdGhtUHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Nkay9DcnlwdG9ncmFwaHkvQWxnb3JpdGhtL0ZpbGVzL0FsZ29yaXRobVByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtDN0MsQ0FBQyJ9
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CryptoCfg } from '../../CryptoCfg';
|
|
2
|
+
import { CryptoAlgorithmJobResponse } 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 FileAlgorithmScanner extends BaseCryptographyScanner<FileCryptographyResultCollector, Array<string>, Array<CryptoAlgorithmJobResponse>> {
|
|
9
|
+
private readonly DEFAULT_CRYPTO_ALGORITHM_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 algorithm analysis jobs from an array of files.
|
|
18
|
+
This method loads cryptography rules, creates required mappers, and initializes
|
|
19
|
+
job objects for each file that will be used for crypto pattern detection.
|
|
20
|
+
@param files An array of file paths to analyze for cryptographic algorithm usage.
|
|
21
|
+
@returns A promise that resolves to an array of job objects configured for crypto 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<CryptoAlgorithmJobResponse>>;
|
|
30
|
+
/**
|
|
31
|
+
* Scans a folder for cryptographic items.
|
|
32
|
+
* @param path The path of the folder to scan.
|
|
33
|
+
* @returns A promise that resolves to an ILocalCryptographyResponse.
|
|
34
|
+
* @throws Error if the specified path is not a directory.
|
|
35
|
+
*/
|
|
36
|
+
scanFolder(path: string): Promise<Array<CryptoAlgorithmJobResponse>>;
|
|
37
|
+
/**
|
|
38
|
+
* Loads custom cryptographic rules from a file.
|
|
39
|
+
* @returns A promise that resolves to the loaded rules.
|
|
40
|
+
*/
|
|
41
|
+
private loadRules;
|
|
42
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { Tree } from '../../../tree/Tree';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { createCryptoKeywordMapper, getCryptoMapper } from "./Helper/Helper";
|
|
5
|
+
import { Job } from "../../../Utils/Concurrency/Job";
|
|
6
|
+
import { WorkerPool } from "../../../Utils/Concurrency/WorkerPool";
|
|
7
|
+
import { cryptographyAlgorithmProcessor } from "./AlgorithmProcessor";
|
|
8
|
+
import { BaseCryptographyScanner } from "../../BaseCryptographyScanner";
|
|
9
|
+
/**
|
|
10
|
+
* A class responsible for scanning files for cryptographic items.
|
|
11
|
+
*/
|
|
12
|
+
export class FileAlgorithmScanner extends BaseCryptographyScanner {
|
|
13
|
+
DEFAULT_CRYPTO_ALGORITHM_RULE_FILENAME = 'scanoss-crypto-algorithm-rules.json';
|
|
14
|
+
/**
|
|
15
|
+
* Constructs a new CryptographyScanner.
|
|
16
|
+
* @param cryptoCfg The cryptographic configuration.
|
|
17
|
+
* @param resultCollector cryptography results collector
|
|
18
|
+
*/
|
|
19
|
+
constructor(cryptoCfg, resultCollector) {
|
|
20
|
+
super(cryptoCfg, resultCollector);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
Builds a collection of cryptographic algorithm analysis jobs from an array of files.
|
|
24
|
+
This method loads cryptography rules, creates required mappers, and initializes
|
|
25
|
+
job objects for each file that will be used for crypto pattern detection.
|
|
26
|
+
@param files An array of file paths to analyze for cryptographic algorithm usage.
|
|
27
|
+
@returns A promise that resolves to an array of job objects configured for crypto analysis.
|
|
28
|
+
*/
|
|
29
|
+
async buildJobs(files) {
|
|
30
|
+
const cryptographyRules = await this.loadRules(this.config.getAlgorithmRulesPath());
|
|
31
|
+
const rules = createCryptoKeywordMapper(cryptographyRules);
|
|
32
|
+
const cryptoMapper = getCryptoMapper(cryptographyRules);
|
|
33
|
+
const localCryptoJobs = [];
|
|
34
|
+
files.forEach((f) => {
|
|
35
|
+
const newJob = new Job({
|
|
36
|
+
file: f,
|
|
37
|
+
rules,
|
|
38
|
+
cryptoMapper
|
|
39
|
+
});
|
|
40
|
+
localCryptoJobs.push(newJob);
|
|
41
|
+
});
|
|
42
|
+
return localCryptoJobs;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Scans an array of files for cryptographic items.
|
|
46
|
+
* @param files An array of file paths to scan.
|
|
47
|
+
* @returns A promise that resolves to an ILocalCryptographyResponse.
|
|
48
|
+
*/
|
|
49
|
+
async scan(files) {
|
|
50
|
+
const workerPool = new WorkerPool(cryptographyAlgorithmProcessor, this.config.getNumberOfThreads());
|
|
51
|
+
const jobs = await this.buildJobs(files);
|
|
52
|
+
workerPool.loadJobs(jobs);
|
|
53
|
+
const results = await workerPool.run();
|
|
54
|
+
this.resultCollector.collectAlgorithmResults(results);
|
|
55
|
+
return results;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Scans a folder for cryptographic items.
|
|
59
|
+
* @param path The path of the folder to scan.
|
|
60
|
+
* @returns A promise that resolves to an ILocalCryptographyResponse.
|
|
61
|
+
* @throws Error if the specified path is not a directory.
|
|
62
|
+
*/
|
|
63
|
+
async scanFolder(path) {
|
|
64
|
+
if (!(await fs.promises.lstat(path)).isDirectory())
|
|
65
|
+
throw new Error('Specified path is not a directory');
|
|
66
|
+
const tree = new Tree(path);
|
|
67
|
+
tree.build();
|
|
68
|
+
return await this.scan(tree.getFileList());
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Loads custom cryptographic rules from a file.
|
|
72
|
+
* @returns A promise that resolves to the loaded rules.
|
|
73
|
+
*/
|
|
74
|
+
async loadRules(rulePath) {
|
|
75
|
+
const cryptoRulePath = rulePath ? rulePath : path.join(__dirname, '../../../../../../assets/data', this.DEFAULT_CRYPTO_ALGORITHM_RULE_FILENAME);
|
|
76
|
+
const rules = await fs.promises.readFile(cryptoRulePath, 'utf-8');
|
|
77
|
+
return JSON.parse(rules);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmlsZUFsZ29yaXRobVNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvc2RrL0NyeXB0b2dyYXBoeS9BbGdvcml0aG0vRmlsZXMvRmlsZUFsZ29yaXRobVNjYW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVExQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixlQUFlLEVBQ2hCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU14RTs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSx1QkFHTjtJQUVqQixzQ0FBc0MsR0FBRyxxQ0FBcUMsQ0FBQztJQUVoRzs7OztPQUlHO0lBQ0gsWUFBWSxTQUFvQixFQUFFLGVBQWdEO1FBQ2hGLEtBQUssQ0FBQyxTQUFTLEVBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLEtBQUssQ0FBRSxTQUFTLENBQUMsS0FBZTtRQUN0QyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztRQUNwRixNQUFNLEtBQUssR0FBRyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sZUFBZSxHQUF3QyxFQUFFLENBQUM7UUFDaEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUEwQjtnQkFDOUMsSUFBSSxFQUFDLENBQUM7Z0JBQ04sS0FBSztnQkFDTCxZQUFZO2FBQ2IsQ0FBQyxDQUFDO1lBQ0gsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM5QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFvQjtRQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBc0QsOEJBQThCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDekosTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDekIsTUFBTSxPQUFPLEdBQUcsTUFBTSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVk7UUFDbEMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUNoRCxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2IsT0FBTyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7T0FHRztJQUNLLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBaUI7UUFDdkMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxJQUFJLENBQ3JELFNBQVMsRUFDVCwrQkFBK0IsRUFBRSxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUNoRixNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsQ0FBQztDQUVGIn0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CryptoAlgorithm, CryptoAlgorithmRules } from '
|
|
1
|
+
import { CryptoAlgorithm, CryptoAlgorithmRules } from '../../../CryptographyTypes';
|
|
2
2
|
/**
|
|
3
3
|
* Function to create a mapping of regular expressions based on provided crypto definitions.
|
|
4
4
|
* @param cryptoRulesDefinitions An array of objects containing cryptographic definitions.
|
package/build/module/sdk/Cryptography/{CryptoDef/CryptoDef.js → Algorithm/Files/Helper/Helper.js}
RENAMED
|
@@ -31,4 +31,4 @@ export function getCryptoMapper(cryptoDefinitions) {
|
|
|
31
31
|
});
|
|
32
32
|
return cryptoMapper;
|
|
33
33
|
}
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3Nkay9DcnlwdG9ncmFwaHkvQWxnb3JpdGhtL0ZpbGVzL0hlbHBlci9IZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsc0JBQW1EO0lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFpQixDQUFDO0lBQ3hDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUEsRUFBRTtRQUNoQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDakIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRTtZQUN0QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdELEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFMUIsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxpQkFBOEM7SUFDM0UsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7SUFFeEQsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDL0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEMsZ0RBQWdEO1FBQ2hELFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQyJ9
|
package/build/module/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.d.ts
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { CryptoAlgorithm
|
|
1
|
+
import { CryptoAlgorithm } from '../../../CryptographyTypes';
|
|
2
2
|
/**
|
|
3
3
|
* Represents a cryptographic item containing information about a file and cryptographic algorithms found in it.
|
|
4
4
|
*/
|
|
5
|
-
export declare class CryptoItem
|
|
5
|
+
export declare class CryptoItem {
|
|
6
6
|
file: string;
|
|
7
7
|
algorithms: Array<CryptoAlgorithm>;
|
|
8
8
|
/**
|
package/build/module/sdk/Cryptography/{Scanneable → Algorithm/Files/Scanneable}/CryptoItem.js
RENAMED
|
@@ -34,4 +34,4 @@ export class CryptoItem {
|
|
|
34
34
|
this.algorithms = algorithms;
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvSXRlbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9zZGsvQ3J5cHRvZ3JhcGh5L0FsZ29yaXRobS9GaWxlcy9TY2FubmVhYmxlL0NyeXB0b0l0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUVyQixJQUFJLENBQVM7SUFDYixVQUFVLENBQXlCO0lBRW5DOzs7T0FHRztJQUNILFlBQVksSUFBWTtRQUN0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGFBQWEsQ0FBQyxVQUFrQztRQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0NBRUYifQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CryptoCfg } from "./CryptoCfg";
|
|
2
|
+
/**
|
|
3
|
+
* Abstract base class for cryptography scanners.
|
|
4
|
+
* Provides common functionality for different types of cryptography scanners.
|
|
5
|
+
* @template C Type of result collector
|
|
6
|
+
* @template I Type of input to be scanned
|
|
7
|
+
* @template R Type of returned scan result
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class BaseCryptographyScanner<C, I, R> {
|
|
10
|
+
protected config: CryptoCfg;
|
|
11
|
+
protected resultCollector: C;
|
|
12
|
+
/**
|
|
13
|
+
* Creates a new instance of a cryptography scanner.
|
|
14
|
+
* @param cfg Configuration settings for the scanner.
|
|
15
|
+
* @param cryptoResultCollector Collector for storing scan results.
|
|
16
|
+
*/
|
|
17
|
+
constructor(cfg: CryptoCfg, cryptoResultCollector: C);
|
|
18
|
+
/**
|
|
19
|
+
* Scans the provided input for cryptographic items.
|
|
20
|
+
* This method must be implemented by derived classes.
|
|
21
|
+
* @param files Input to be scanned.
|
|
22
|
+
* @returns A promise that resolves to the scan result.
|
|
23
|
+
*/
|
|
24
|
+
abstract scan(files: I): Promise<R>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for cryptography scanners.
|
|
3
|
+
* Provides common functionality for different types of cryptography scanners.
|
|
4
|
+
* @template C Type of result collector
|
|
5
|
+
* @template I Type of input to be scanned
|
|
6
|
+
* @template R Type of returned scan result
|
|
7
|
+
*/
|
|
8
|
+
export class BaseCryptographyScanner {
|
|
9
|
+
config;
|
|
10
|
+
resultCollector;
|
|
11
|
+
/**
|
|
12
|
+
* Creates a new instance of a cryptography scanner.
|
|
13
|
+
* @param cfg Configuration settings for the scanner.
|
|
14
|
+
* @param cryptoResultCollector Collector for storing scan results.
|
|
15
|
+
*/
|
|
16
|
+
constructor(cfg, cryptoResultCollector) {
|
|
17
|
+
this.config = cfg;
|
|
18
|
+
this.resultCollector = cryptoResultCollector;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFzZUNyeXB0b2dyYXBoeVNjYW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2RrL0NyeXB0b2dyYXBoeS9CYXNlQ3J5cHRvZ3JhcGh5U2Nhbm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQWdCLHVCQUF1QjtJQUVqQyxNQUFNLENBQVk7SUFFbEIsZUFBZSxDQUFJO0lBRTdCOzs7O09BSUc7SUFDSCxZQUFZLEdBQWMsRUFBRSxxQkFBd0I7UUFDbEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQztJQUMvQyxDQUFDO0NBU0YifQ==
|
|
@@ -3,22 +3,49 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export declare class CryptoCfg {
|
|
5
5
|
private readonly DEFAULT_THREADS;
|
|
6
|
-
private readonly
|
|
6
|
+
private readonly algorithmRulesPath;
|
|
7
|
+
private readonly libraryRulesPath;
|
|
7
8
|
private readonly threads;
|
|
9
|
+
protected readonly apiKey: string;
|
|
10
|
+
protected readonly proxy: string;
|
|
8
11
|
/**
|
|
9
12
|
* Creates an instance of CryptoCfg.
|
|
10
13
|
* @param {Object} cfg - Configuration object.
|
|
11
14
|
* @param {number} [cfg.threads=5] - The number of threads to use. Defaults to 5 if not provided.
|
|
12
15
|
* @param {string} [cfg.rulesPath] - Optional. Path to the cryptography rules file.
|
|
16
|
+
* @param {string} [cfg.apiKey] - Optional. SCANOSS API Key.
|
|
17
|
+
* @param {string} [cfg.proxy] - Optional. proxy.
|
|
13
18
|
*/
|
|
14
19
|
constructor(cfg: {
|
|
15
|
-
threads
|
|
16
|
-
|
|
20
|
+
threads?: number;
|
|
21
|
+
algorithmRulesPath?: string;
|
|
22
|
+
libraryRulesPath?: string;
|
|
23
|
+
apiKey?: string;
|
|
24
|
+
proxy?: string;
|
|
17
25
|
});
|
|
18
26
|
/**
|
|
19
|
-
* Gets the path to the cryptography rules file.
|
|
27
|
+
* Gets the path to the cryptography algorithm rules file.
|
|
20
28
|
* @returns The path to the cryptography rules file.
|
|
21
29
|
*/
|
|
22
|
-
|
|
30
|
+
getAlgorithmRulesPath(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Gets the path to the cryptography library rules file.
|
|
33
|
+
* @returns The path to the cryptography rules file.
|
|
34
|
+
*/
|
|
35
|
+
getLibraryRulesPath(): string;
|
|
36
|
+
/**
|
|
37
|
+
* Gets the number of threads to use on local crypto detection.
|
|
38
|
+
* @returns The number of threads.
|
|
39
|
+
**/
|
|
23
40
|
getNumberOfThreads(): number;
|
|
41
|
+
/**
|
|
42
|
+
* Gets the API Key set.
|
|
43
|
+
* @returns The API Key.
|
|
44
|
+
**/
|
|
45
|
+
getApikey(): string;
|
|
46
|
+
/**
|
|
47
|
+
* Gets proxy.
|
|
48
|
+
* @returns proxy.
|
|
49
|
+
**/
|
|
50
|
+
getProxy(): string;
|
|
24
51
|
}
|
|
@@ -3,27 +3,60 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export class CryptoCfg {
|
|
5
5
|
DEFAULT_THREADS = 5;
|
|
6
|
-
|
|
6
|
+
algorithmRulesPath;
|
|
7
|
+
libraryRulesPath;
|
|
7
8
|
threads;
|
|
9
|
+
apiKey;
|
|
10
|
+
proxy;
|
|
8
11
|
/**
|
|
9
12
|
* Creates an instance of CryptoCfg.
|
|
10
13
|
* @param {Object} cfg - Configuration object.
|
|
11
14
|
* @param {number} [cfg.threads=5] - The number of threads to use. Defaults to 5 if not provided.
|
|
12
15
|
* @param {string} [cfg.rulesPath] - Optional. Path to the cryptography rules file.
|
|
16
|
+
* @param {string} [cfg.apiKey] - Optional. SCANOSS API Key.
|
|
17
|
+
* @param {string} [cfg.proxy] - Optional. proxy.
|
|
13
18
|
*/
|
|
14
19
|
constructor(cfg) {
|
|
15
|
-
this.
|
|
20
|
+
this.algorithmRulesPath = cfg.algorithmRulesPath;
|
|
21
|
+
this.libraryRulesPath = cfg.libraryRulesPath;
|
|
16
22
|
this.threads = cfg.threads ? Number(cfg.threads) : this.DEFAULT_THREADS;
|
|
23
|
+
this.apiKey = cfg.apiKey;
|
|
24
|
+
this.proxy = cfg.proxy;
|
|
17
25
|
}
|
|
18
26
|
/**
|
|
19
|
-
* Gets the path to the cryptography rules file.
|
|
27
|
+
* Gets the path to the cryptography algorithm rules file.
|
|
20
28
|
* @returns The path to the cryptography rules file.
|
|
21
29
|
*/
|
|
22
|
-
|
|
23
|
-
return this.
|
|
30
|
+
getAlgorithmRulesPath() {
|
|
31
|
+
return this.algorithmRulesPath;
|
|
24
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Gets the path to the cryptography library rules file.
|
|
35
|
+
* @returns The path to the cryptography rules file.
|
|
36
|
+
*/
|
|
37
|
+
getLibraryRulesPath() {
|
|
38
|
+
return this.libraryRulesPath;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Gets the number of threads to use on local crypto detection.
|
|
42
|
+
* @returns The number of threads.
|
|
43
|
+
**/
|
|
25
44
|
getNumberOfThreads() {
|
|
26
45
|
return this.threads;
|
|
27
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Gets the API Key set.
|
|
49
|
+
* @returns The API Key.
|
|
50
|
+
**/
|
|
51
|
+
getApikey() {
|
|
52
|
+
return this.apiKey;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Gets proxy.
|
|
56
|
+
* @returns proxy.
|
|
57
|
+
**/
|
|
58
|
+
getProxy() {
|
|
59
|
+
return this.proxy;
|
|
60
|
+
}
|
|
28
61
|
}
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvQ2ZnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Nkay9DcnlwdG9ncmFwaHkvQ3J5cHRvQ2ZnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFFSCxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBRW5CLGtCQUFrQixDQUFTO0lBRTNCLGdCQUFnQixDQUFTO0lBRXpCLE9BQU8sQ0FBUztJQUVkLE1BQU0sQ0FBUztJQUVmLEtBQUssQ0FBVTtJQUVuQzs7Ozs7OztPQU9HO0lBQ0YsWUFBYSxHQUFvSDtRQUMvSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVGOzs7T0FHRztJQUNLLHFCQUFxQjtRQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUY7OztNQUdFO0lBQ0ssbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxRQUFRO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7Q0FFRiJ9
|