scanoss 0.2.28 → 0.3.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.
Files changed (128) hide show
  1. package/.github/workflows/reuse.yml +15 -0
  2. package/.github/workflows/scanoss.yml +24 -0
  3. package/.gitignore +0 -1
  4. package/.idea/workspace.xml +296 -6
  5. package/.nyc_output/a25d3ac4-ee71-4c5e-926e-3a17714555cd.json +1 -0
  6. package/.nyc_output/processinfo/a25d3ac4-ee71-4c5e-926e-3a17714555cd.json +1 -0
  7. package/.nyc_output/processinfo/index.json +1 -0
  8. package/.reuse/dep5 +16 -0
  9. package/LICENSES/CC0-1.0.txt +121 -0
  10. package/LICENSES/MIT.txt +9 -0
  11. package/README.md +9 -0
  12. package/build/main/bin/cli-bin.js +4 -3
  13. package/build/main/commands/dep.js +1 -2
  14. package/build/main/commands/fingerprint.js +17 -9
  15. package/build/main/commands/helpers.js +1 -2
  16. package/build/main/commands/scan.js +3 -2
  17. package/build/main/index.js +1 -2
  18. package/build/main/lib/dependencies/DependencyScanner.d.ts +1 -1
  19. package/build/main/lib/dependencies/DependencyScanner.js +23 -12
  20. package/build/main/lib/dependencies/DependencyScannerCfg.js +1 -2
  21. package/build/main/lib/dependencies/DependencyTypes.js +0 -1
  22. package/build/main/lib/dependencies/LocalDependency/DependencyTypes.js +0 -1
  23. package/build/main/lib/dependencies/LocalDependency/LocalDependency.js +3 -2
  24. package/build/main/lib/dependencies/LocalDependency/parsers/golangParser.d.ts +1 -0
  25. package/build/main/lib/dependencies/LocalDependency/parsers/golangParser.js +50 -16
  26. package/build/main/lib/dependencies/LocalDependency/parsers/mavenParser.js +1 -2
  27. package/build/main/lib/dependencies/LocalDependency/parsers/npmParser.d.ts +10 -0
  28. package/build/main/lib/dependencies/LocalDependency/parsers/npmParser.js +146 -10
  29. package/build/main/lib/dependencies/LocalDependency/parsers/pyParser.js +1 -2
  30. package/build/main/lib/dependencies/LocalDependency/parsers/rubyParser.js +1 -2
  31. package/build/main/lib/dependencies/LocalDependency/parsers/utils.js +1 -2
  32. package/build/main/lib/filters/defaultFilter.js +1 -2
  33. package/build/main/lib/filters/filtering.js +1 -2
  34. package/build/main/lib/grpc/GrpcDependencyService.js +1 -2
  35. package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.d.ts +62 -0
  36. package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.js +128 -0
  37. package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.d.ts +1 -0
  38. package/build/main/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.js +1403 -0
  39. package/build/main/lib/scanner/Dispatcher/DispatchableItem.js +1 -2
  40. package/build/main/lib/scanner/Dispatcher/Dispatcher.js +1 -2
  41. package/build/main/lib/scanner/Dispatcher/DispatcherResponse.js +1 -2
  42. package/build/main/lib/scanner/Dispatcher/GlobalControllerAborter.js +1 -2
  43. package/build/main/lib/scanner/Scannable/ScannableItem.js +1 -2
  44. package/build/main/lib/scanner/Scanner.js +1 -2
  45. package/build/main/lib/scanner/ScannerCfg.js +2 -3
  46. package/build/main/lib/scanner/ScannerTypes.d.ts +1 -0
  47. package/build/main/lib/scanner/ScannerTypes.js +2 -2
  48. package/build/main/lib/scanner/WfpProvider/FingerprintPackage.js +1 -2
  49. package/build/main/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +175 -18
  50. package/build/main/lib/scanner/WfpProvider/WfpCalculator/Winnower.d.ts +3 -0
  51. package/build/main/lib/scanner/WfpProvider/WfpCalculator/Winnower.js +211 -0
  52. package/build/main/lib/scanner/WfpProvider/WfpProvider.js +1 -2
  53. package/build/main/lib/scanner/WfpProvider/WfpSplitter/WfpSplitter.js +1 -2
  54. package/build/main/lib/tree/File.js +1 -2
  55. package/build/main/lib/tree/Folder.js +1 -2
  56. package/build/main/lib/tree/Node.js +1 -2
  57. package/build/main/lib/tree/Tree.js +1 -2
  58. package/build/module/bin/cli-bin.js +4 -2
  59. package/build/module/commands/fingerprint.js +22 -13
  60. package/build/module/commands/scan.js +4 -2
  61. package/build/module/lib/dependencies/DependencyScanner.d.ts +1 -1
  62. package/build/module/lib/dependencies/DependencyScanner.js +23 -11
  63. package/build/module/lib/dependencies/LocalDependency/LocalDependency.js +5 -3
  64. package/build/module/lib/dependencies/LocalDependency/parsers/golangParser.d.ts +1 -0
  65. package/build/module/lib/dependencies/LocalDependency/parsers/golangParser.js +47 -14
  66. package/build/module/lib/dependencies/LocalDependency/parsers/npmParser.d.ts +10 -0
  67. package/build/module/lib/dependencies/LocalDependency/parsers/npmParser.js +140 -8
  68. package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.d.ts +62 -0
  69. package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_grpc_pb.js +128 -0
  70. package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.d.ts +1 -0
  71. package/build/module/lib/grpc/scanoss/api/components/v2/scanoss-components_pb.js +1403 -0
  72. package/build/module/lib/scanner/ScannerCfg.js +2 -2
  73. package/build/module/lib/scanner/ScannerTypes.d.ts +1 -0
  74. package/build/module/lib/scanner/ScannerTypes.js +2 -1
  75. package/build/module/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.js +175 -17
  76. package/build/module/lib/scanner/WfpProvider/WfpCalculator/Winnower.d.ts +3 -0
  77. package/build/module/lib/scanner/WfpProvider/WfpCalculator/Winnower.js +211 -0
  78. package/build/tsconfig.module.tsbuildinfo +1 -1
  79. package/build/tsconfig.tsbuildinfo +1 -1
  80. package/package.json +6 -17
  81. package/src/bin/cli-bin.ts +3 -1
  82. package/src/commands/fingerprint.ts +23 -14
  83. package/src/commands/scan.ts +10 -2
  84. package/src/lib/dependencies/DependencyScanner.ts +20 -12
  85. package/src/lib/dependencies/LocalDependency/LocalDependency.ts +8 -2
  86. package/src/lib/dependencies/LocalDependency/parsers/golangParser.ts +67 -15
  87. package/src/lib/dependencies/LocalDependency/parsers/npmParser.ts +182 -7
  88. package/src/lib/scanner/ScannerCfg.ts +2 -1
  89. package/src/lib/scanner/ScannerTypes.ts +1 -0
  90. package/src/lib/scanner/WfpProvider/FingerprintPackage.ts +1 -1
  91. package/src/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator.ts +174 -17
  92. package/tests/WfpCalculator.spec.ts +103 -0
  93. package/{test/dependencies/data → tests/data/dependencies}/Gemfile/1/Gemfile +0 -0
  94. package/{test/dependencies/data → tests/data/dependencies}/Gemfile/1/Gemfile~ +0 -0
  95. package/{test/dependencies/data → tests/data/dependencies}/Gemfile/2/Gemfile +0 -0
  96. package/{test/dependencies/data → tests/data/dependencies}/Gemfile/2/Gemfile~ +0 -0
  97. package/{test/dependencies/data → tests/data/dependencies}/Gemfile/3/Gemfile +0 -0
  98. package/{test/dependencies/data → tests/data/dependencies}/Gemfile/3/Gemfile~ +0 -0
  99. package/{test/dependencies/data → tests/data/dependencies}/Gemfile/4/Gemfile +0 -0
  100. package/{test/dependencies/data → tests/data/dependencies}/Gemfile/4/Gemfile~ +0 -0
  101. package/{test/dependencies/data → tests/data/dependencies}/Gemfile.lock/1/Gemfile.lock +0 -0
  102. package/{test/dependencies/data → tests/data/dependencies}/Gemfile.lock/2/Gemfile.lock +0 -0
  103. package/{test/dependencies/data → tests/data/dependencies}/Gemfile.lock/2/Gemfile.lock~ +0 -0
  104. package/tests/data/dependencies/go.sum/1/go.sum +119 -0
  105. package/tests/data/dependencies/go.sum/depJSON.sh +23 -0
  106. package/tests/data/dependencies/package-lock/1/package-lock.json +715 -0
  107. package/tests/data/dependencies/package-lock/2/package-lock.json +32069 -0
  108. package/tests/data/dependencies/package-lock/3/package-lock.json +9013 -0
  109. package/{test/dependencies/data → tests/data/dependencies}/pom.xml/1/pom.xml +0 -0
  110. package/tests/data/dependencies/yarn-lock/generate_expected_output.sh +4 -0
  111. package/tests/data/dependencies/yarn-lock/v1/yarn.lock +50 -0
  112. package/tests/data/dependencies/yarn-lock/v1/yarn.lock-expected +13 -0
  113. package/tests/data/dependencies/yarn-lock/v1-complex/yarn.lock +27 -0
  114. package/tests/data/dependencies/yarn-lock/v1-complex/yarn.lock-expected +8 -0
  115. package/tests/data/dependencies/yarn-lock/v1-complex2/yarn.lock +220 -0
  116. package/tests/data/dependencies/yarn-lock/v2/yarn.lock +31 -0
  117. package/tests/data/dependencies/yarn-lock/v2/yarn.lock-expected +57 -0
  118. package/tests/data/dependencies/yarn-lock/v2-local/yarn.lock +11 -0
  119. package/tests/data/dependencies/yarn-lock/v2-local/yarn.lock-expected +27204 -0
  120. package/tests/data/scanner/file1.c +41 -0
  121. package/tests/data/scanner/file2.go +87 -0
  122. package/tests/dependencies/golangParser.goModParser.specs.ts +146 -0
  123. package/tests/dependencies/npmParser.spec.ts +133 -0
  124. package/tsconfig.json +4 -3
  125. package/yarn.lock +4596 -5321
  126. package/examples/defaultFilter.json +0 -203
  127. package/package-lock.json +0 -18588
  128. package/src/lib/scanner/Winnower/WinnowerExtractor.ts +0 -37
@@ -8,7 +8,6 @@ import { ScannerEvents, ScannerInput, WinnowingMode } from '../../ScannerTypes';
8
8
  import { FingerprintPackage } from '../FingerprintPackage';
9
9
  import { IWfpProviderInput, WfpProvider } from '../WfpProvider';
10
10
 
11
-
12
11
  const stringWorker = `
13
12
  const { parentPort } = require('worker_threads');
14
13
 
@@ -21,7 +20,13 @@ parentPort.on('message', async (scannableItem) => {
21
20
  scannableItem.contentSource,
22
21
  scannableItem.maxSizeWfp
23
22
  );
24
- } else {
23
+ } else if (scannableItem.winnowingMode === "FULL_WINNOWING_HPSM") {
24
+ fingerprint = wfp_hpsm_for_content(
25
+ scannableItem.content,
26
+ scannableItem.contentSource,
27
+ scannableItem.maxSizeWfp
28
+ );
29
+ } else if (scannableItem.winnowingMode === "WINNOWING_ONLY_MD5") {
25
30
  fingerprint = wfp_only_md5(
26
31
  scannableItem.content,
27
32
  scannableItem.contentSource
@@ -29,13 +34,15 @@ parentPort.on('message', async (scannableItem) => {
29
34
  }
30
35
 
31
36
  scannableItem.fingerprint = fingerprint;
32
-
33
37
  parentPort.postMessage(scannableItem);
34
- });
35
38
 
39
+ });
36
40
 
37
- const crypto = require('crypto');
41
+ /**
42
+ * Winnowing and HPSM algorithm begins
43
+ */
38
44
 
45
+ const crypto = require('crypto');
39
46
  const isWin = process.platform === 'win32';
40
47
  const pathSeparator = isWin ? String.fromCharCode(92) : '/';
41
48
 
@@ -75,18 +82,6 @@ function min_hex_array(array) {
75
82
  return min;
76
83
  }
77
84
 
78
- function wfp_for_content(content, contentSource, maxSize) {
79
- let wfp = wfp_only_md5(content, contentSource);
80
- wfp += calc_wfp(content, maxSize);
81
- return wfp;
82
- }
83
-
84
- function wfp_only_md5(contents, contentSource) {
85
- const file_md5 = crypto.createHash('md5').update(contents).digest('hex');
86
- let wfp = 'file=' + String(file_md5) + ',' + String(contents.length) + ',' + String(contentSource)+ String.fromCharCode(10);
87
- return wfp;
88
- }
89
-
90
85
  function calc_wfp(contents, maxSize) {
91
86
  let gram = '';
92
87
  const window = [];
@@ -229,6 +224,168 @@ function crc32c_hex(str) {
229
224
  return crc32c(str).toString(16).padStart(8, '0');
230
225
  }
231
226
 
227
+ function truncate_string(input, maxSize){
228
+ return input.slice(0, maxSize)
229
+ }
230
+
231
+ function toHexString(byteArray) {
232
+ return Array.from(byteArray, function(byte) {
233
+ return ('0' + (byte & 0xFF).toString(16)).slice(-2);
234
+ }).join('')
235
+ }
236
+
237
+ function calc_hpsm(content) {
238
+ let list_normalized = []; //Array of numbers
239
+ let crc_lines = []; //Array of numbers that represent the crc8_maxim for each line of the file
240
+
241
+ let last_line = 0;
242
+ crc8_MAXIM_DOW_GenerateTable();
243
+
244
+ for(let i = 0; i<content.length; i++) {
245
+ const c = content[i];
246
+ if (c == ASCII_LF) { //When there is a new line
247
+ if (list_normalized.length) {
248
+ crc_lines.push(crc8_MAXIM_DOW_Buffer(list_normalized))
249
+ list_normalized=[];
250
+ } else if(last_line+1 == i) {
251
+ crc_lines.push(0xFF);
252
+ } else if (i-last_line > 1) {
253
+ crc_lines.push(0x00)
254
+ }
255
+ last_line = i;
256
+ } else {
257
+ const c_normalized = normalize(c);
258
+ if (c_normalized != 0) list_normalized.push(c_normalized)
259
+ }
260
+ }
261
+ return "hpsm=" + toHexString(crc_lines)
262
+ }
263
+
264
+
265
+ /**
266
+ * Create a wfp_hpsm package joining wfp (with md5 line) and a hpsm.
267
+ *
268
+ * Example:
269
+ * wfp = file=508cb9dfbe1c7dca5ed24f124473f33d,300,asd.c
270
+ * 11=b19bdbfa
271
+ *
272
+ * hpsm = hpsm=1909ff06ff688630ff45a92b52f47eff3500ffff
273
+ *
274
+ * wfp_hpsm = file=508cb9dfbe1c7dca5ed24f124473f33d,300,asd.c
275
+ * hpsm=1909ff06ff688630ff45a92b52f47eff3500ffff
276
+ * 11=b19bdbfa
277
+ *
278
+ * @param {string} wfp Complete wfp string (with md5 line)
279
+ * @param {string} hpsm
280
+ * @returns {string}
281
+ */
282
+ function join_wfp_hpsm(wfp, hpsm) {
283
+ let header = wfp.match(/file=.*/);
284
+ header += String.fromCharCode(10);
285
+ header += hpsm;
286
+ wfp = wfp.replace(/file=.*/, "")
287
+ return header + wfp;
288
+ }
289
+
290
+ /**
291
+ *
292
+ * @param {Buffer} content
293
+ * @param {string} contentSource
294
+ * @param {number} maxSize
295
+ * @returns {string}
296
+ */
297
+ function wfp_hpsm_for_content(content, contentSource, maxSize) {
298
+ let wfp = wfp_for_content(content, contentSource, maxSize)
299
+ let hpsm = calc_hpsm(content) //Returns a string
300
+ let wfp_hpsm_joined = join_wfp_hpsm(wfp, hpsm)
301
+ return truncate_string(wfp_hpsm_joined, maxSize)
302
+ }
303
+
304
+ function wfp_for_content(content, contentSource, maxSize) {
305
+ let wfp = wfp_only_md5(content, contentSource);
306
+ wfp += calc_wfp(content, maxSize);
307
+ return wfp;
308
+ }
309
+
310
+ function wfp_only_md5(contents, contentSource) {
311
+ const file_md5 = crypto.createHash('md5').update(contents).digest('hex');
312
+ let wfp = 'file=' + String(file_md5) + ',' + String(contents.length) + ',' + String(contentSource)+ String.fromCharCode(10);
313
+ return wfp;
314
+ }
315
+
316
+ /**
317
+ * CRC8_MAXIM algorithm begins
318
+ */
319
+
320
+
321
+ //=============================================================================
322
+ // Implementation of CRC-8/MAXIM-DOW,CRC-8/MAXIM,DOW-CRC.
323
+ // Notes: Code ported from C Auto-generated by http://crc.drque.net/
324
+ //=============================================================================
325
+
326
+ //Table size
327
+ const CRC8_MAXIM_DOW_TABLE_SIZE = 0x100
328
+ const CRC8_MAXIM_DOW_POLYNOMIAL = 0x8C // 0x31 reflected
329
+ const CRC8_MAXIM_DOW_INITIAL = 0x00 // 0x00 reflected
330
+ const CRC8_MAXIM_DOW_FINAL = 0x00 // 0x00 reflected
331
+
332
+ let crc8_MAXIM_DOW_Table = []
333
+
334
+ /**
335
+ * Compute CRC of byte without lookup tables.
336
+ *
337
+ * @param {number} crc Current CRC or initial value
338
+ * @param {number} byte New byte to accumulate.
339
+ * @returns {number} Updated CRC.
340
+ */
341
+ function crc8_MAXIM_DOW_ByteNoTable(crc, byte) {
342
+ crc ^= byte;
343
+ for (let count = 0; count<8; count++) {
344
+ const isSet = (crc & 0x01)
345
+ crc >>= 1;
346
+ if (isSet) crc ^= CRC8_MAXIM_DOW_POLYNOMIAL
347
+ }
348
+ return crc
349
+ }
350
+
351
+ /**
352
+ * Create the lookup table.
353
+ * Note: Must be called before any table based CRC calculations can be done.
354
+ */
355
+ function crc8_MAXIM_DOW_GenerateTable() {
356
+ for(let i = 0; i<CRC8_MAXIM_DOW_TABLE_SIZE; i++) {
357
+ crc8_MAXIM_DOW_Table.push(crc8_MAXIM_DOW_ByteNoTable(0, i))
358
+ }
359
+ }
360
+
361
+ /**
362
+ * Update CRC by byte.
363
+ *
364
+ * @param {number} crc Initial CRC.
365
+ * @param {number} byte New byte to accumulate.
366
+ * @returns {number} Updated CRC.
367
+ */
368
+ function crc8_MAXIM_DOW_Byte( crc, byte )
369
+ {
370
+ const index = byte ^ crc;
371
+ return crc8_MAXIM_DOW_Table[ index ] ^ ( crc >> 8 );
372
+ }
373
+
374
+ /**
375
+ * Compute CRC of buffer.
376
+ * Note: crc8_MAXIM_DOW_GenerateTable() must be called before use this function
377
+ *
378
+ * @param {Buffer} buffer Buffer with bytes to calculate CRC.
379
+ * @returns {number} CRC
380
+ */
381
+ function crc8_MAXIM_DOW_Buffer(buffer) {
382
+ let crc = CRC8_MAXIM_DOW_INITIAL;
383
+ for (let index = 0; index < buffer.length ; index ++) {
384
+ crc = crc8_MAXIM_DOW_Byte(crc, buffer[index])
385
+ }
386
+ crc ^= CRC8_MAXIM_DOW_FINAL;
387
+ return crc;
388
+ }
232
389
  `;
233
390
 
234
391
  export class WfpCalculator extends WfpProvider {
@@ -0,0 +1,103 @@
1
+ import {WfpCalculator} from '../src/lib/scanner/WfpProvider/WfpCalculator/WfpCalculator';
2
+ import { IWfpProviderInput } from '../src/lib/scanner/WfpProvider/WfpProvider';
3
+ import {ScannerEvents, WinnowingMode} from '../src/lib/scanner/ScannerTypes'
4
+ import {
5
+ FingerprintPackage
6
+ } from '../src/lib/scanner/WfpProvider/FingerprintPackage';
7
+
8
+
9
+
10
+ describe('Suit test for WfpCalculator Class', () => {
11
+
12
+ describe('Test Winnowings Modes', function () {
13
+
14
+ let wfpInput: IWfpProviderInput;
15
+ let wfpCalculator: WfpCalculator;
16
+
17
+ beforeEach(function() {
18
+ wfpCalculator = new WfpCalculator();
19
+ wfpCalculator.init();
20
+ });
21
+
22
+ it('Winnowing Full mode', function (done) {
23
+ wfpInput = {
24
+ fileList: [__dirname + "/data/scanner/file1.c"],
25
+ folderRoot: __dirname + "/data/scanner/"
26
+ };
27
+
28
+ let wfpExpected = `file=736c0a4b4440e35baffc9378304ee588,907,file1.c
29
+ 8=c0e39912
30
+ 9=61eee030
31
+ 11=eff88a55
32
+ 16=9d9c5251,c8ca7af5
33
+ 21=520ee8e5
34
+ 26=1f2fa230,2e83cf84,57d0c3d2
35
+ 28=4a9386b1
36
+ 31=fbf8548e,b6002136
37
+ 36=5622280b
38
+ 39=8503d2f9
39
+ 40=0b62ff71
40
+ `
41
+
42
+ wfpCalculator.on(ScannerEvents.WINNOWING_FINISHED, () => {
43
+ done()
44
+ });
45
+
46
+ wfpCalculator.on(ScannerEvents.ERROR, (err) => {
47
+ done(err)
48
+ })
49
+
50
+ wfpInput.winnowingMode=WinnowingMode.FULL_WINNOWING,
51
+ wfpCalculator.start(wfpInput)
52
+ });
53
+
54
+
55
+ it('Winnowing HPSM mode', function (done) {
56
+
57
+ wfpInput = {
58
+ fileList: [__dirname + "/data/scanner/file1.c"],
59
+ folderRoot: __dirname + "/data/scanner/"
60
+ };
61
+
62
+ let wfpExpected = `file=736c0a4b4440e35baffc9378304ee588,907,file1.c
63
+ hpsm=91ffe7ff989bffe7fcff91bdff2dff3d00a400ff9b00a400ffb6004c42ff9c004200ffc700ff62408b
64
+ 8=c0e39912
65
+ 9=61eee030
66
+ 11=eff88a55
67
+ 16=9d9c5251,c8ca7af5
68
+ 21=520ee8e5
69
+ 26=1f2fa230,2e83cf84,57d0c3d2
70
+ 28=4a9386b1
71
+ 31=fbf8548e,b6002136
72
+ 36=5622280b
73
+ 39=8503d2f9
74
+ 40=0b62ff71
75
+ `
76
+
77
+ let wfpResponse: FingerprintPackage;
78
+ wfpCalculator.on(ScannerEvents.WINNOWING_NEW_CONTENT, (c: FingerprintPackage) => {
79
+ wfpResponse = c;
80
+ });
81
+
82
+ wfpCalculator.on(ScannerEvents.WINNOWING_FINISHED, () => {
83
+ if (wfpResponse.getContent() === wfpExpected) {
84
+ done()
85
+ } else {
86
+ done(new Error("Diferences in wfp generated and expected"))
87
+ }
88
+ });
89
+
90
+ wfpCalculator.on(ScannerEvents.ERROR, (err) => {
91
+ done(err)
92
+ })
93
+
94
+ wfpInput.winnowingMode=WinnowingMode.FULL_WINNOWING_HPSM;
95
+ wfpCalculator.start(wfpInput)
96
+ });
97
+
98
+
99
+ });
100
+
101
+ });
102
+
103
+
@@ -0,0 +1,119 @@
1
+ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
2
+ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
3
+ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
4
+ github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
5
+ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
6
+ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
7
+ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
8
+ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
9
+ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
10
+ github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
11
+ github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
12
+ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
13
+ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
14
+ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
15
+ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
16
+ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
17
+ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
18
+ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
19
+ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
20
+ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
21
+ github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
22
+ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
23
+ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
24
+ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
25
+ github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
26
+ github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
27
+ github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
28
+ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
29
+ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
30
+ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
31
+ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
32
+ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
33
+ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
34
+ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
35
+ github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4=
36
+ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
37
+ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
38
+ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
39
+ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
40
+ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
41
+ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
42
+ github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
43
+ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
44
+ github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
45
+ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
46
+ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
47
+ github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
48
+ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
49
+ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
50
+ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
51
+ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
52
+ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
53
+ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
54
+ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
55
+ golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
56
+ golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
57
+ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
58
+ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
59
+ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
60
+ golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
61
+ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
62
+ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
63
+ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
64
+ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
65
+ golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
66
+ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
67
+ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
68
+ golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
69
+ golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
70
+ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
71
+ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
72
+ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
73
+ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
74
+ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
75
+ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
76
+ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
77
+ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
78
+ golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
79
+ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
80
+ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
81
+ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
82
+ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
83
+ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
84
+ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
85
+ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
86
+ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
87
+ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
88
+ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
89
+ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
90
+ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
91
+ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
92
+ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
93
+ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
94
+ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
95
+ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
96
+ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
97
+ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
98
+ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
99
+ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
100
+ google.golang.org/grpc v1.42.0 h1:XT2/MFpuPFsEX2fWh3YQtHkZ+WYZFQRfaUgLZYj/p6A=
101
+ google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
102
+ google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
103
+ google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
104
+ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
105
+ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
106
+ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
107
+ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
108
+ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
109
+ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
110
+ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
111
+ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
112
+ google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
113
+ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
114
+ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
115
+ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
116
+ gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
117
+ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
118
+ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
119
+ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -0,0 +1,23 @@
1
+ #!/bin/bash
2
+
3
+ # Reads a go.sum from file and prints to stdout all objects with purls and requirements
4
+
5
+ # Example:
6
+ # Input: cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
7
+ # Output: {purl: "pkg:golang/cloud.google.com/go", requirement: "v0.26.0"},
8
+
9
+ # This is used to create the expectedOutput for the go.sum test
10
+ # WARNING: This does not scape the special characters in the dep name
11
+
12
+
13
+
14
+ #clean blank spaces
15
+ file_content=$(sed '/^ *$/d' "$1")
16
+
17
+
18
+ purls_and_versions=$(echo "$file_content" | awk '{print "{purl:" "\"" "pkg:golang/"$1 "\"" ", requirement:" "\"" $2 "\"" "},"}')
19
+
20
+ #Delete go.mod substrings
21
+ results=${purls_and_versions//\/go.mod/}
22
+
23
+ echo "$results"