@quantakrypto/core 0.3.0 → 0.4.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 (166) hide show
  1. package/dist/agent-types.d.ts +48 -0
  2. package/dist/agent-types.d.ts.map +1 -0
  3. package/dist/agent-types.js +2 -0
  4. package/dist/agent-types.js.map +1 -0
  5. package/dist/cache.d.ts +27 -0
  6. package/dist/cache.d.ts.map +1 -0
  7. package/dist/cache.js +93 -0
  8. package/dist/cache.js.map +1 -0
  9. package/dist/cbom.d.ts.map +1 -1
  10. package/dist/cbom.js +26 -1
  11. package/dist/cbom.js.map +1 -1
  12. package/dist/changed.d.ts.map +1 -1
  13. package/dist/changed.js +14 -2
  14. package/dist/changed.js.map +1 -1
  15. package/dist/codemods/config-toggle.d.ts +3 -0
  16. package/dist/codemods/config-toggle.d.ts.map +1 -0
  17. package/dist/codemods/config-toggle.js +26 -0
  18. package/dist/codemods/config-toggle.js.map +1 -0
  19. package/dist/codemods/registry.d.ts +26 -0
  20. package/dist/codemods/registry.d.ts.map +1 -0
  21. package/dist/codemods/registry.js +8 -0
  22. package/dist/codemods/registry.js.map +1 -0
  23. package/dist/comments.d.ts +45 -0
  24. package/dist/comments.d.ts.map +1 -0
  25. package/dist/comments.js +164 -0
  26. package/dist/comments.js.map +1 -0
  27. package/dist/config.d.ts +1 -1
  28. package/dist/config.d.ts.map +1 -1
  29. package/dist/config.js +7 -0
  30. package/dist/config.js.map +1 -1
  31. package/dist/dependencies.d.ts +31 -13
  32. package/dist/dependencies.d.ts.map +1 -1
  33. package/dist/dependencies.js +460 -40
  34. package/dist/dependencies.js.map +1 -1
  35. package/dist/detect-utils.d.ts +44 -1
  36. package/dist/detect-utils.d.ts.map +1 -1
  37. package/dist/detect-utils.js +113 -17
  38. package/dist/detect-utils.js.map +1 -1
  39. package/dist/detectors/c.d.ts +20 -0
  40. package/dist/detectors/c.d.ts.map +1 -0
  41. package/dist/detectors/c.js +104 -0
  42. package/dist/detectors/c.js.map +1 -0
  43. package/dist/detectors/csharp.d.ts +15 -0
  44. package/dist/detectors/csharp.d.ts.map +1 -0
  45. package/dist/detectors/csharp.js +76 -0
  46. package/dist/detectors/csharp.js.map +1 -0
  47. package/dist/detectors/go.d.ts +25 -0
  48. package/dist/detectors/go.d.ts.map +1 -0
  49. package/dist/detectors/go.js +132 -0
  50. package/dist/detectors/go.js.map +1 -0
  51. package/dist/detectors/java.d.ts +25 -0
  52. package/dist/detectors/java.d.ts.map +1 -0
  53. package/dist/detectors/java.js +200 -0
  54. package/dist/detectors/java.js.map +1 -0
  55. package/dist/detectors/python.d.ts +26 -0
  56. package/dist/detectors/python.d.ts.map +1 -0
  57. package/dist/detectors/python.js +171 -0
  58. package/dist/detectors/python.js.map +1 -0
  59. package/dist/detectors/ruby.d.ts +15 -0
  60. package/dist/detectors/ruby.d.ts.map +1 -0
  61. package/dist/detectors/ruby.js +75 -0
  62. package/dist/detectors/ruby.js.map +1 -0
  63. package/dist/detectors/rust.d.ts +13 -0
  64. package/dist/detectors/rust.d.ts.map +1 -0
  65. package/dist/detectors/rust.js +94 -0
  66. package/dist/detectors/rust.js.map +1 -0
  67. package/dist/detectors/source.d.ts.map +1 -1
  68. package/dist/detectors/source.js +70 -22
  69. package/dist/detectors/source.js.map +1 -1
  70. package/dist/index.d.ts +18 -1
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +15 -1
  73. package/dist/index.js.map +1 -1
  74. package/dist/parallel.d.ts +4 -0
  75. package/dist/parallel.d.ts.map +1 -1
  76. package/dist/parallel.js +59 -8
  77. package/dist/parallel.js.map +1 -1
  78. package/dist/patch-policy.d.ts +22 -0
  79. package/dist/patch-policy.d.ts.map +1 -0
  80. package/dist/patch-policy.js +21 -0
  81. package/dist/patch-policy.js.map +1 -0
  82. package/dist/redact.d.ts +19 -0
  83. package/dist/redact.d.ts.map +1 -0
  84. package/dist/redact.js +77 -0
  85. package/dist/redact.js.map +1 -0
  86. package/dist/registry.d.ts +13 -3
  87. package/dist/registry.d.ts.map +1 -1
  88. package/dist/registry.js +31 -4
  89. package/dist/registry.js.map +1 -1
  90. package/dist/remediate-pipeline.d.ts +41 -0
  91. package/dist/remediate-pipeline.d.ts.map +1 -0
  92. package/dist/remediate-pipeline.js +38 -0
  93. package/dist/remediate-pipeline.js.map +1 -0
  94. package/dist/remediate-request.d.ts +21 -0
  95. package/dist/remediate-request.d.ts.map +1 -0
  96. package/dist/remediate-request.js +28 -0
  97. package/dist/remediate-request.js.map +1 -0
  98. package/dist/remediation.d.ts +10 -0
  99. package/dist/remediation.d.ts.map +1 -1
  100. package/dist/remediation.js +21 -8
  101. package/dist/remediation.js.map +1 -1
  102. package/dist/report.d.ts.map +1 -1
  103. package/dist/report.js +16 -1
  104. package/dist/report.js.map +1 -1
  105. package/dist/scan-worker.js +6 -2
  106. package/dist/scan-worker.js.map +1 -1
  107. package/dist/scan.d.ts +5 -4
  108. package/dist/scan.d.ts.map +1 -1
  109. package/dist/scan.js +52 -29
  110. package/dist/scan.js.map +1 -1
  111. package/dist/triage.d.ts +27 -0
  112. package/dist/triage.d.ts.map +1 -0
  113. package/dist/triage.js +33 -0
  114. package/dist/triage.js.map +1 -0
  115. package/dist/types.d.ts +53 -3
  116. package/dist/types.d.ts.map +1 -1
  117. package/dist/verify.d.ts +30 -0
  118. package/dist/verify.d.ts.map +1 -0
  119. package/dist/verify.js +65 -0
  120. package/dist/verify.js.map +1 -0
  121. package/dist/version.d.ts +1 -1
  122. package/dist/version.js +1 -1
  123. package/dist/walk.d.ts +7 -0
  124. package/dist/walk.d.ts.map +1 -1
  125. package/dist/walk.js +85 -11
  126. package/dist/walk.js.map +1 -1
  127. package/dist/worktree.d.ts +6 -0
  128. package/dist/worktree.d.ts.map +1 -0
  129. package/dist/worktree.js +43 -0
  130. package/dist/worktree.js.map +1 -0
  131. package/package.json +1 -1
  132. package/src/agent-types.ts +52 -0
  133. package/src/cache.ts +120 -0
  134. package/src/cbom.ts +27 -1
  135. package/src/changed.ts +13 -4
  136. package/src/codemods/config-toggle.ts +35 -0
  137. package/src/codemods/registry.ts +31 -0
  138. package/src/comments.ts +180 -0
  139. package/src/config.ts +8 -0
  140. package/src/dependencies.ts +483 -51
  141. package/src/detect-utils.ts +123 -15
  142. package/src/detectors/c.ts +132 -0
  143. package/src/detectors/csharp.ts +98 -0
  144. package/src/detectors/go.ts +167 -0
  145. package/src/detectors/java.ts +235 -0
  146. package/src/detectors/python.ts +212 -0
  147. package/src/detectors/ruby.ts +97 -0
  148. package/src/detectors/rust.ts +112 -0
  149. package/src/detectors/source.ts +69 -21
  150. package/src/index.ts +45 -1
  151. package/src/parallel.ts +63 -6
  152. package/src/patch-policy.ts +42 -0
  153. package/src/redact.ts +92 -0
  154. package/src/registry.ts +32 -4
  155. package/src/remediate-pipeline.ts +81 -0
  156. package/src/remediate-request.ts +52 -0
  157. package/src/remediation.ts +27 -11
  158. package/src/report.ts +27 -1
  159. package/src/scan-worker.ts +6 -2
  160. package/src/scan.ts +62 -31
  161. package/src/triage.ts +58 -0
  162. package/src/types.ts +66 -3
  163. package/src/verify.ts +82 -0
  164. package/src/version.ts +1 -1
  165. package/src/walk.ts +81 -12
  166. package/src/worktree.ts +45 -0
@@ -73,8 +73,51 @@ export type RuleOverrides = Partial<Pick<RuleMeta, "title" | "category" | "sever
73
73
  export declare function findingFromRule(rule: RuleMeta, at: RuleMatch, overrides?: RuleOverrides): Finding;
74
74
  /** True if `filePath` has one of the given (lower-case, dotted) extensions. */
75
75
  export declare function hasExtension(filePath: string, exts: readonly string[]): boolean;
76
- /** JavaScript / TypeScript source extensions handled by the source detectors. */
76
+ /**
77
+ * JavaScript / TypeScript source extensions handled by the source detectors.
78
+ * `.vue` / `.svelte` single-file components embed a `<script>` block, so the
79
+ * lexical detectors catch crypto usage inside them.
80
+ */
77
81
  export declare const JS_TS_EXTENSIONS: readonly string[];
82
+ /** Python source extensions handled by the Python detector. */
83
+ export declare const PYTHON_EXTENSIONS: readonly string[];
84
+ /** Go source extensions handled by the Go detector. */
85
+ export declare const GO_EXTENSIONS: readonly string[];
86
+ /** Java / Kotlin source extensions handled by the JCA detector. */
87
+ export declare const JAVA_EXTENSIONS: readonly string[];
88
+ /** C# source extensions handled by the .NET detector. */
89
+ export declare const CSHARP_EXTENSIONS: readonly string[];
90
+ /** Rust source extensions handled by the Rust detector. */
91
+ export declare const RUST_EXTENSIONS: readonly string[];
92
+ /** Ruby source extensions handled by the Ruby detector. */
93
+ export declare const RUBY_EXTENSIONS: readonly string[];
94
+ /** C / C++ source extensions handled by the OpenSSL detector. */
95
+ export declare const C_EXTENSIONS: readonly string[];
96
+ /**
97
+ * File-literal surfaces where a JWT/JOSE algorithm string (`"RS256"`, `"ES256"`)
98
+ * is the same evidence regardless of language. Used to un-gate the JWT detector
99
+ * from JS-only. Kept to JS/TS + Python for now (both quote the alg token, so the
100
+ * regex stays precise); YAML/JSON config carry unquoted tokens and higher FP
101
+ * risk, so they wait for a config-aware pass.
102
+ */
103
+ export declare const JWT_HOST_EXTENSIONS: readonly string[];
104
+ /**
105
+ * Extensions the scanner can actually analyze for inline crypto usage today
106
+ * (the language-specific source detectors). A scan that walked files but found
107
+ * none of these has NOT meaningfully assessed the codebase — reporters surface
108
+ * that ({@link CryptoInventory}/coverage), so a bare 100/100 can't masquerade as
109
+ * "safe" on, say, a Go or Rust repo. PEM / SSH / dependency detectors run on any
110
+ * file and are intentionally excluded here.
111
+ */
112
+ export declare const ANALYZABLE_SOURCE_EXTENSIONS: readonly string[];
113
+ /**
114
+ * Human label for the source languages the scanner can analyze for inline
115
+ * crypto, shown in coverage output. Kept next to {@link
116
+ * ANALYZABLE_SOURCE_EXTENSIONS} so a new language pack updates one place.
117
+ */
118
+ export declare const ANALYZABLE_LANGUAGES_LABEL = "JS/TS, Python, Go, Java, C#, Rust, Ruby, C/C++";
119
+ /** True when a path is in a source language the scanner can analyze for crypto. */
120
+ export declare function isAnalyzableSource(filePath: string): boolean;
78
121
  /**
79
122
  * Given a SORTED ascending array of call offsets, return true when `idx` is at
80
123
  * or after some call offset `c` with `idx - c < window`. Runs in O(log n) by
@@ -1 +1 @@
1
- {"version":3,"file":"detect-utils.d.ts","sourceRoot":"","sources":["../src/detect-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,OAAO,EACP,eAAe,EACf,QAAQ,EACR,QAAQ,EACT,MAAM,YAAY,CAAC;AAGpB,sEAAsE;AACtE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUxE;AAED,oEAAoE;AACpE,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAmCtD;AAED,yEAAyE;AACzE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CACjC,IAAI,CACF,QAAQ,EACR,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAC5F,CACF,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7B;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,OAAO,CAkBjG;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAG/E;AAED,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAAmD,CAAC;AAElG;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,SAAS,MAAM,EAAE,EAC9B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,OAAO,CAgBT;AAED;;;GAGG;AACH,wBAAgB,SAAS,CACvB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GACxC,IAAI,CAQN"}
1
+ {"version":3,"file":"detect-utils.d.ts","sourceRoot":"","sources":["../src/detect-utils.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,61 @@
1
1
  import { remediationText } from "./remediation.js";
2
+ /**
3
+ * Memoized line-start offsets for the CURRENT content string. A scan processes
4
+ * all of one file's findings consecutively against the same `content` reference,
5
+ * so a single-entry cache turns the previously O(offset)-per-finding line/column
6
+ * math into O(log n) — the whole file is O(n log n) instead of O(n²). Without
7
+ * this, a large file with many findings scaled quadratically (a real perf cliff,
8
+ * caught by the ReDoS/time-budget test).
9
+ */
10
+ let cachedContent = null;
11
+ let cachedLineStarts = [];
12
+ function lineStartsFor(content) {
13
+ if (content === cachedContent)
14
+ return cachedLineStarts;
15
+ const starts = [0];
16
+ for (let i = 0; i < content.length; i++) {
17
+ if (content.charCodeAt(i) === 10 /* \n */)
18
+ starts.push(i + 1);
19
+ }
20
+ cachedContent = content;
21
+ cachedLineStarts = starts;
22
+ return starts;
23
+ }
24
+ /** Index of the line containing `offset` (0-based into the line-starts array). */
25
+ function lineIndexFor(starts, offset) {
26
+ let lo = 0;
27
+ let hi = starts.length - 1;
28
+ let best = 0;
29
+ while (lo <= hi) {
30
+ const mid = (lo + hi) >>> 1;
31
+ if (starts[mid] <= offset) {
32
+ best = mid;
33
+ lo = mid + 1;
34
+ }
35
+ else {
36
+ hi = mid - 1;
37
+ }
38
+ }
39
+ return best;
40
+ }
2
41
  /**
3
42
  * Convert a 0-based character offset within `content` into a 1-based
4
43
  * line/column. Newlines are LF; CR is treated as an ordinary character, so on
5
44
  * CRLF files the column includes the trailing CR offset harmlessly.
6
45
  */
7
46
  export function offsetToLineCol(content, offset) {
8
- let line = 1;
9
- let lastNewline = -1;
10
- for (let i = 0; i < offset && i < content.length; i++) {
11
- if (content.charCodeAt(i) === 10 /* \n */) {
12
- line++;
13
- lastNewline = i;
14
- }
15
- }
16
- return { line, column: offset - lastNewline };
47
+ const starts = lineStartsFor(content);
48
+ const idx = lineIndexFor(starts, offset);
49
+ return { line: idx + 1, column: offset - starts[idx] + 1 };
17
50
  }
18
51
  /** Extract the (trimmed) single source line containing `offset`. */
19
52
  export function lineAt(content, offset) {
20
- let start = offset;
21
- while (start > 0 && content.charCodeAt(start - 1) !== 10)
22
- start--;
23
- let end = offset;
24
- while (end < content.length && content.charCodeAt(end) !== 10)
25
- end++;
53
+ const starts = lineStartsFor(content);
54
+ const idx = lineIndexFor(starts, offset);
55
+ const start = starts[idx];
56
+ const nextStart = idx + 1 < starts.length ? starts[idx + 1] : content.length + 1;
57
+ // nextStart points just past the '\n'; the line content ends before it.
58
+ const end = Math.min(nextStart - 1, content.length);
26
59
  return content.slice(start, end).replace(/\r$/, "").trim();
27
60
  }
28
61
  /**
@@ -97,8 +130,71 @@ export function hasExtension(filePath, exts) {
97
130
  const lower = filePath.toLowerCase();
98
131
  return exts.some((e) => lower.endsWith(e));
99
132
  }
100
- /** JavaScript / TypeScript source extensions handled by the source detectors. */
101
- export const JS_TS_EXTENSIONS = [".js", ".jsx", ".ts", ".tsx", ".mjs", ".cjs"];
133
+ /**
134
+ * JavaScript / TypeScript source extensions handled by the source detectors.
135
+ * `.vue` / `.svelte` single-file components embed a `<script>` block, so the
136
+ * lexical detectors catch crypto usage inside them.
137
+ */
138
+ export const JS_TS_EXTENSIONS = [
139
+ ".js",
140
+ ".jsx",
141
+ ".ts",
142
+ ".tsx",
143
+ ".mjs",
144
+ ".cjs",
145
+ ".vue",
146
+ ".svelte",
147
+ ];
148
+ /** Python source extensions handled by the Python detector. */
149
+ export const PYTHON_EXTENSIONS = [".py", ".pyi", ".pyw"];
150
+ /** Go source extensions handled by the Go detector. */
151
+ export const GO_EXTENSIONS = [".go"];
152
+ /** Java / Kotlin source extensions handled by the JCA detector. */
153
+ export const JAVA_EXTENSIONS = [".java", ".kt", ".kts"];
154
+ /** C# source extensions handled by the .NET detector. */
155
+ export const CSHARP_EXTENSIONS = [".cs"];
156
+ /** Rust source extensions handled by the Rust detector. */
157
+ export const RUST_EXTENSIONS = [".rs"];
158
+ /** Ruby source extensions handled by the Ruby detector. */
159
+ export const RUBY_EXTENSIONS = [".rb"];
160
+ /** C / C++ source extensions handled by the OpenSSL detector. */
161
+ export const C_EXTENSIONS = [".c", ".h", ".cc", ".cpp", ".cxx", ".hpp", ".hh"];
162
+ /**
163
+ * File-literal surfaces where a JWT/JOSE algorithm string (`"RS256"`, `"ES256"`)
164
+ * is the same evidence regardless of language. Used to un-gate the JWT detector
165
+ * from JS-only. Kept to JS/TS + Python for now (both quote the alg token, so the
166
+ * regex stays precise); YAML/JSON config carry unquoted tokens and higher FP
167
+ * risk, so they wait for a config-aware pass.
168
+ */
169
+ export const JWT_HOST_EXTENSIONS = [...JS_TS_EXTENSIONS, ...PYTHON_EXTENSIONS];
170
+ /**
171
+ * Extensions the scanner can actually analyze for inline crypto usage today
172
+ * (the language-specific source detectors). A scan that walked files but found
173
+ * none of these has NOT meaningfully assessed the codebase — reporters surface
174
+ * that ({@link CryptoInventory}/coverage), so a bare 100/100 can't masquerade as
175
+ * "safe" on, say, a Go or Rust repo. PEM / SSH / dependency detectors run on any
176
+ * file and are intentionally excluded here.
177
+ */
178
+ export const ANALYZABLE_SOURCE_EXTENSIONS = [
179
+ ...JS_TS_EXTENSIONS,
180
+ ...PYTHON_EXTENSIONS,
181
+ ...GO_EXTENSIONS,
182
+ ...JAVA_EXTENSIONS,
183
+ ...CSHARP_EXTENSIONS,
184
+ ...RUST_EXTENSIONS,
185
+ ...RUBY_EXTENSIONS,
186
+ ...C_EXTENSIONS,
187
+ ];
188
+ /**
189
+ * Human label for the source languages the scanner can analyze for inline
190
+ * crypto, shown in coverage output. Kept next to {@link
191
+ * ANALYZABLE_SOURCE_EXTENSIONS} so a new language pack updates one place.
192
+ */
193
+ export const ANALYZABLE_LANGUAGES_LABEL = "JS/TS, Python, Go, Java, C#, Rust, Ruby, C/C++";
194
+ /** True when a path is in a source language the scanner can analyze for crypto. */
195
+ export function isAnalyzableSource(filePath) {
196
+ return hasExtension(filePath, ANALYZABLE_SOURCE_EXTENSIONS);
197
+ }
102
198
  /**
103
199
  * Given a SORTED ascending array of call offsets, return true when `idx` is at
104
200
  * or after some call offset `c` with `idx - c < window`. Runs in O(log n) by
@@ -1 +1 @@
1
- {"version":3,"file":"detect-utils.js","sourceRoot":"","sources":["../src/detect-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect-utils.js","sourceRoot":"","sources":["../src/detect-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Source-code detector for classical asymmetric cryptography in C / C++ using
3
+ * OpenSSL (the dominant crypto library for the ecosystem). Lexical, same
4
+ * strategy as the other packs; the OpenSSL function names are distinctive.
5
+ *
6
+ * NOTE: scanning OpenSSL's OWN source/headers will naturally light up (the
7
+ * library declares these symbols) — that is inherent to lexical scanning of a
8
+ * crypto library, not a false positive in application code. Matches the classic
9
+ * `*_generate_key` / `ECDSA_sign` / `ECDH_compute_key` call forms plus the
10
+ * `EVP_RSA_gen` helper.
11
+ *
12
+ * HNDL: RSA encryption and (EC)DH key agreement are harvest-now-decrypt-later
13
+ * exposed (hndl:true); ECDSA / DSA signatures are hndl:false but forgeable.
14
+ * `EC_KEY_generate_key` is ambiguous (feeds ECDSA + ECDH), classified
15
+ * conservatively as key-exchange-capable (hndl:true).
16
+ */
17
+ import type { Detector } from "../types.js";
18
+ /** Detects classical asymmetric crypto in C/C++ (OpenSSL). */
19
+ export declare const cDetector: Detector;
20
+ //# sourceMappingURL=c.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c.d.ts","sourceRoot":"","sources":["../../src/detectors/c.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,aAAa,CAAC;AA2F/D,8DAA8D;AAC9D,eAAO,MAAM,SAAS,EAAE,QAuBvB,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { C_EXTENSIONS, eachMatch, findingFromRule, hasExtension } from "../detect-utils.js";
2
+ import { CWE_BROKEN_CRYPTO } from "../cwe.js";
3
+ const RE_C_RSA = /\bRSA_generate_key(?:_ex)?\s*\(|\bEVP_RSA_gen\s*\(/g;
4
+ const RE_C_EC = /\bEC_KEY_generate_key\s*\(|\bEC_KEY_new_by_curve_name\s*\(/g;
5
+ const RE_C_ECDSA = /\bECDSA_do_sign\s*\(|\bECDSA_sign\s*\(/g;
6
+ const RE_C_ECDH = /\bECDH_compute_key\s*\(/g;
7
+ const RE_C_DSA = /\bDSA_generate_key\s*\(|\bDSA_generate_parameters(?:_ex)?\s*\(/g;
8
+ const RE_C_DH = /\bDH_generate_key\s*\(|\bDH_generate_parameters(?:_ex)?\s*\(/g;
9
+ const RULE_C_RSA = {
10
+ id: "c-rsa-keygen",
11
+ title: "C/OpenSSL RSA key generation",
12
+ description: "OpenSSL RSA_generate_key(_ex) / EVP_RSA_gen",
13
+ category: "kem",
14
+ severity: "high",
15
+ confidence: "high",
16
+ algorithm: "RSA",
17
+ hndl: true,
18
+ cwe: CWE_BROKEN_CRYPTO,
19
+ message: "Generates a classical RSA key pair (C/OpenSSL), which is not quantum-safe.",
20
+ };
21
+ const RULE_C_EC = {
22
+ id: "c-ec-keygen",
23
+ title: "C/OpenSSL EC key generation",
24
+ description: "OpenSSL EC_KEY_generate_key / EC_KEY_new_by_curve_name",
25
+ category: "key-exchange",
26
+ severity: "high",
27
+ confidence: "high",
28
+ algorithm: "ECDH",
29
+ hndl: true,
30
+ cwe: CWE_BROKEN_CRYPTO,
31
+ message: "Generates a classical EC key pair (C/OpenSSL). EC keys feed BOTH ECDSA signatures and ECDH key agreement; the ECDH path is harvest-now-decrypt-later exposed.",
32
+ remediation: "For key agreement: hybrid X25519MLKEM768 (ML-KEM-768). For signatures: ML-DSA-65 (FIPS 204).",
33
+ };
34
+ const RULE_C_ECDSA = {
35
+ id: "c-ecdsa",
36
+ title: "C/OpenSSL ECDSA signature",
37
+ description: "OpenSSL ECDSA_sign / ECDSA_do_sign",
38
+ category: "signature",
39
+ severity: "high",
40
+ confidence: "high",
41
+ algorithm: "ECDSA",
42
+ hndl: false,
43
+ cwe: CWE_BROKEN_CRYPTO,
44
+ message: "Classical ECDSA signing (C/OpenSSL) is forgeable by a quantum attacker.",
45
+ remediation: "ML-DSA-65 (FIPS 204) or SLH-DSA (FIPS 205)",
46
+ };
47
+ const RULE_C_ECDH = {
48
+ id: "c-ecdh",
49
+ title: "C/OpenSSL ECDH key agreement",
50
+ description: "OpenSSL ECDH_compute_key",
51
+ category: "key-exchange",
52
+ severity: "high",
53
+ confidence: "high",
54
+ algorithm: "ECDH",
55
+ hndl: true,
56
+ cwe: CWE_BROKEN_CRYPTO,
57
+ message: "Elliptic-curve Diffie-Hellman (C/OpenSSL) is broken by Shor's algorithm (harvest-now-decrypt-later).",
58
+ };
59
+ const RULE_C_DSA = {
60
+ id: "c-dsa",
61
+ title: "C/OpenSSL DSA key/usage",
62
+ description: "OpenSSL DSA_generate_key / DSA_generate_parameters",
63
+ category: "signature",
64
+ severity: "high",
65
+ confidence: "high",
66
+ algorithm: "DSA",
67
+ hndl: false,
68
+ cwe: CWE_BROKEN_CRYPTO,
69
+ message: "Classical DSA (C/OpenSSL) is deprecated and forgeable by a quantum attacker.",
70
+ remediation: "Rotate off DSA and migrate to ML-DSA-65 (FIPS 204).",
71
+ };
72
+ const RULE_C_DH = {
73
+ id: "c-dh",
74
+ title: "C/OpenSSL Diffie-Hellman key exchange",
75
+ description: "OpenSSL DH_generate_key / DH_generate_parameters",
76
+ category: "key-exchange",
77
+ severity: "high",
78
+ confidence: "high",
79
+ algorithm: "DH",
80
+ hndl: true,
81
+ cwe: CWE_BROKEN_CRYPTO,
82
+ message: "Finite-field Diffie-Hellman (C/OpenSSL) is broken by Shor's algorithm (harvest-now-decrypt-later).",
83
+ };
84
+ /** Detects classical asymmetric crypto in C/C++ (OpenSSL). */
85
+ export const cDetector = {
86
+ id: "c-crypto",
87
+ description: "Classical asymmetric crypto in C/C++ (OpenSSL)",
88
+ scope: "source",
89
+ language: "c",
90
+ rules: [RULE_C_RSA, RULE_C_EC, RULE_C_ECDSA, RULE_C_ECDH, RULE_C_DSA, RULE_C_DH],
91
+ appliesTo: (f) => hasExtension(f, C_EXTENSIONS),
92
+ detect({ file, content }) {
93
+ const findings = [];
94
+ const add = (re, rule) => eachMatch(re, content, (m) => findings.push(findingFromRule(rule, { file, content, index: m.index, matchLength: m[0].length })));
95
+ add(RE_C_RSA, RULE_C_RSA);
96
+ add(RE_C_EC, RULE_C_EC);
97
+ add(RE_C_ECDSA, RULE_C_ECDSA);
98
+ add(RE_C_ECDH, RULE_C_ECDH);
99
+ add(RE_C_DSA, RULE_C_DSA);
100
+ add(RE_C_DH, RULE_C_DH);
101
+ return findings;
102
+ },
103
+ };
104
+ //# sourceMappingURL=c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"c.js","sourceRoot":"","sources":["../../src/detectors/c.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Source-code detector for classical asymmetric cryptography in C# / .NET
3
+ * (`System.Security.Cryptography`). Same lexical strategy as the other packs.
4
+ * .NET exposes each algorithm through a factory (`RSA.Create()`,
5
+ * `ECDsa.Create()`, `ECDiffieHellman.Create()`) or a concrete CSP/CNG class
6
+ * (`RSACryptoServiceProvider`, `ECDsaCng`, …), all of which are precise signals.
7
+ *
8
+ * HNDL: RSA (keygen/encryption) and (EC)DH key agreement are harvest-now-
9
+ * decrypt-later exposed (hndl:true); ECDSA/DSA signatures are hndl:false but
10
+ * forgeable by a quantum attacker.
11
+ */
12
+ import type { Detector } from "../types.js";
13
+ /** Detects classical asymmetric crypto in C# (System.Security.Cryptography). */
14
+ export declare const csharpDetector: Detector;
15
+ //# sourceMappingURL=csharp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csharp.d.ts","sourceRoot":"","sources":["../../src/detectors/csharp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,aAAa,CAAC;AA+D/D,gFAAgF;AAChF,eAAO,MAAM,cAAc,EAAE,QAsB5B,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { CSHARP_EXTENSIONS, eachMatch, findingFromRule, hasExtension } from "../detect-utils.js";
2
+ import { CWE_BROKEN_CRYPTO } from "../cwe.js";
3
+ const RE_CS_RSA = /\bRSA\.Create\s*\(|\bnew\s+RSACryptoServiceProvider\s*\(|\bnew\s+RSACng\s*\(|\bnew\s+RSAOpenSsl\s*\(/g;
4
+ const RE_CS_ECDSA = /\bECDsa\.Create\s*\(|\bnew\s+ECDsaCng\s*\(|\bnew\s+ECDsaOpenSsl\s*\(/g;
5
+ const RE_CS_ECDH = /\bECDiffieHellman\.Create\s*\(|\bnew\s+ECDiffieHellmanCng\s*\(|\bnew\s+ECDiffieHellmanOpenSsl\s*\(/g;
6
+ const RE_CS_DSA = /\bDSA\.Create\s*\(|\bnew\s+DSACryptoServiceProvider\s*\(|\bnew\s+DSACng\s*\(/g;
7
+ const RULE_CS_RSA = {
8
+ id: "csharp-rsa",
9
+ title: "C# RSA key/usage",
10
+ description: "System.Security.Cryptography RSA.Create / RSACryptoServiceProvider / RSACng",
11
+ category: "kem",
12
+ severity: "high",
13
+ confidence: "high",
14
+ algorithm: "RSA",
15
+ hndl: true,
16
+ cwe: CWE_BROKEN_CRYPTO,
17
+ message: "Classical RSA (.NET) is not quantum-safe and RSA encryption is HNDL-exposed.",
18
+ };
19
+ const RULE_CS_ECDSA = {
20
+ id: "csharp-ecdsa",
21
+ title: "C# ECDSA signature",
22
+ description: "System.Security.Cryptography ECDsa.Create / ECDsaCng",
23
+ category: "signature",
24
+ severity: "high",
25
+ confidence: "high",
26
+ algorithm: "ECDSA",
27
+ hndl: false,
28
+ cwe: CWE_BROKEN_CRYPTO,
29
+ message: "Classical ECDSA signing (.NET) is forgeable by a quantum attacker.",
30
+ remediation: "ML-DSA-65 (FIPS 204) or SLH-DSA (FIPS 205)",
31
+ };
32
+ const RULE_CS_ECDH = {
33
+ id: "csharp-ecdh",
34
+ title: "C# ECDH key agreement",
35
+ description: "System.Security.Cryptography ECDiffieHellman.Create / ECDiffieHellmanCng",
36
+ category: "key-exchange",
37
+ severity: "high",
38
+ confidence: "high",
39
+ algorithm: "ECDH",
40
+ hndl: true,
41
+ cwe: CWE_BROKEN_CRYPTO,
42
+ message: "Elliptic-curve Diffie-Hellman (.NET) is broken by Shor's algorithm (harvest-now-decrypt-later).",
43
+ };
44
+ const RULE_CS_DSA = {
45
+ id: "csharp-dsa",
46
+ title: "C# DSA key/signature",
47
+ description: "System.Security.Cryptography DSA.Create / DSACryptoServiceProvider",
48
+ category: "signature",
49
+ severity: "high",
50
+ confidence: "high",
51
+ algorithm: "DSA",
52
+ hndl: false,
53
+ cwe: CWE_BROKEN_CRYPTO,
54
+ message: "Classical DSA (.NET) is deprecated and forgeable by a quantum attacker.",
55
+ remediation: "Rotate off DSA and migrate to ML-DSA-65 (FIPS 204).",
56
+ };
57
+ /** Detects classical asymmetric crypto in C# (System.Security.Cryptography). */
58
+ export const csharpDetector = {
59
+ id: "csharp-crypto",
60
+ description: "Classical asymmetric crypto in C#/.NET (System.Security.Cryptography)",
61
+ scope: "source",
62
+ language: "csharp",
63
+ rules: [RULE_CS_RSA, RULE_CS_ECDSA, RULE_CS_ECDH, RULE_CS_DSA],
64
+ appliesTo: (f) => hasExtension(f, CSHARP_EXTENSIONS),
65
+ detect({ file, content }) {
66
+ const findings = [];
67
+ const add = (re, rule) => eachMatch(re, content, (m) => findings.push(findingFromRule(rule, { file, content, index: m.index, matchLength: m[0].length })));
68
+ // ECDSA / ECDH before RSA/DSA so the specific EC factories win.
69
+ add(RE_CS_ECDSA, RULE_CS_ECDSA);
70
+ add(RE_CS_ECDH, RULE_CS_ECDH);
71
+ add(RE_CS_RSA, RULE_CS_RSA);
72
+ add(RE_CS_DSA, RULE_CS_DSA);
73
+ return findings;
74
+ },
75
+ };
76
+ //# sourceMappingURL=csharp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csharp.js","sourceRoot":"","sources":["../../src/detectors/csharp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Source-code detector for classical, non-quantum-safe asymmetric cryptography
3
+ * in Go. Same lexical (regex-over-source) strategy as the JS/TS and Python
4
+ * detectors. Go's crypto lives almost entirely in the highly-standardized
5
+ * `crypto/*` standard library, so package-qualified calls (`rsa.GenerateKey`,
6
+ * `ecdsa.SignASN1`, `ecdh.X25519`, …) are precise, low-false-positive signals.
7
+ *
8
+ * Covered:
9
+ * - crypto/rsa — GenerateKey, EncryptOAEP/PKCS1v15, SignPKCS1v15/PSS
10
+ * - crypto/ecdsa — GenerateKey, Sign/SignASN1
11
+ * - crypto/ecdh — P256/P384/P521/X25519 curve construction (key agreement)
12
+ * - crypto/ed25519 — GenerateKey, Sign
13
+ * - crypto/dsa — GenerateKey, GenerateParameters (deprecated)
14
+ *
15
+ * HNDL policy mirrors the other detectors: KEM / key agreement (RSA encryption,
16
+ * ECDH) is harvest-now-decrypt-later exposed (hndl:true); signatures (RSA-sign,
17
+ * ECDSA, Ed25519, DSA) are hndl:false but still forgeable by a quantum attacker.
18
+ * Unlike Node's ambiguous `'ec'` keygen, Go's `ecdsa.GenerateKey` is
19
+ * signature-specific and Go's key agreement lives in the separate `crypto/ecdh`
20
+ * package, so the two are classified precisely rather than conservatively merged.
21
+ */
22
+ import type { Detector } from "../types.js";
23
+ /** Detects classical asymmetric crypto in Go source (crypto/* standard library). */
24
+ export declare const goDetector: Detector;
25
+ //# sourceMappingURL=go.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go.d.ts","sourceRoot":"","sources":["../../src/detectors/go.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,aAAa,CAAC;AA8G/D,oFAAoF;AACpF,eAAO,MAAM,UAAU,EAAE,QAkCxB,CAAC"}