-
-
Notifications
You must be signed in to change notification settings - Fork 141
/
cbomutils.js
67 lines (64 loc) · 1.93 KB
/
cbomutils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { readFileSync } from "node:fs";
import { join } from "node:path";
import { executeOsQuery } from "./binary.js";
import { convertOSQueryResults, dirNameStr } from "./utils.js";
const cbomosDbQueries = JSON.parse(
readFileSync(join(dirNameStr, "data", "cbomosdb-queries.json"), "utf-8"),
);
const cbomCryptoOids = JSON.parse(
readFileSync(join(dirNameStr, "data", "crypto-oid.json"), "utf-8"),
);
/**
* Method to collect crypto and ssl libraries from the OS.
*
* @param {Object} options
* @returns osPkgsList Array of OS crypto packages
*/
export function collectOSCryptoLibs(options) {
let osPkgsList = [];
for (const queryCategory of Object.keys(cbomosDbQueries)) {
const queryObj = cbomosDbQueries[queryCategory];
const results = executeOsQuery(queryObj.query);
const dlist = convertOSQueryResults(
queryCategory,
queryObj,
results,
false,
);
if (dlist?.length) {
osPkgsList = osPkgsList.concat(dlist);
// Should we downgrade from cryptographic-asset to data for < 1.6 spec
if (options?.specVersion && options.specVersion < 1.6) {
for (const apkg of osPkgsList) {
if (apkg.type === "cryptographic-asset") {
apkg.type = "data";
}
}
}
}
}
return osPkgsList;
}
function cleanStr(str) {
return str.toLowerCase().replace(/[^0-9a-z ]/gi, "");
}
/**
* Find crypto algorithm in the given code snippet
*
* @param {String} Code snippet
* @returns {Array} Arary of crypto algorithm objects with oid and description
*/
export function findCryptoAlgos(code) {
const cleanCode = cleanStr(code);
const cryptoAlgos = [];
for (const algoName of Object.keys(cbomCryptoOids)) {
if (cleanCode.includes(cleanStr(algoName))) {
cryptoAlgos.push({
...cbomCryptoOids[algoName],
name: algoName,
ref: `crypto/algorithm/${algoName}@${cbomCryptoOids[algoName].oid}`,
});
}
}
return cryptoAlgos;
}