@trynullsec/s1-zk 1.0.1 → 1.0.2

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.
@@ -3,14 +3,40 @@ function matchObligation(issue, checks) {
3
3
  return checks.find((check) => check.status === "missing" || check.status === "partially_satisfied") ??
4
4
  checks.find((check) => issueText.includes(check.obligationId.toLowerCase().split("-").at(-1) ?? ""));
5
5
  }
6
+ function issueText(issue) {
7
+ return `${issue.ruleId} ${issue.title} ${issue.signalName ?? ""} ${issue.explanation} ${issue.impact} ${issue.suggestedFix} ${issue.snippet ?? ""} ${issue.tags.join(" ")} ${JSON.stringify(issue.metadata ?? {})}`;
8
+ }
9
+ function isEcIssue(issue) {
10
+ return issue.ruleId.startsWith("NS-H2") && /ec|ecc|curve|point|scalar|base|accumulator|coordinate|output point|output|fixed_base|variable_base/i.test(issueText(issue));
11
+ }
12
+ function isOutputBindingIssue(issue) {
13
+ return /commitment|nullifier|root|unconstrained output|output value/i.test(issueText(issue));
14
+ }
15
+ function isRangeIssue(issue) {
16
+ return issue.ruleId === "NS-ZK-006" || /range|bounded integer|overflow|alias/i.test(issueText(issue));
17
+ }
18
+ function isSelectorIssue(issue) {
19
+ return issue.ruleId === "NS-ZK-005" || issue.ruleId === "NS-ZK-012" || issue.ruleId === "NS-H2-003" || /selector|booleanity|boolean domain|pathindex|flag/i.test(issueText(issue));
20
+ }
21
+ function brokenAssumptionForIssue(issue) {
22
+ if (isEcIssue(issue))
23
+ return "EC coordinates and intermediates are fully bound to the claimed group operation.";
24
+ if (isOutputBindingIssue(issue))
25
+ return "Output value is fully bound to the private witness relation the protocol assumes.";
26
+ if (isRangeIssue(issue))
27
+ return "Arithmetic value has the required bounded integer constraints.";
28
+ if (isSelectorIssue(issue))
29
+ return "Selector-like values are constrained to the expected boolean domain.";
30
+ return "The circuit constrains the semantic relation that the protocol assumes.";
31
+ }
6
32
  export function generateExploitHypotheses(issues, relationChecks) {
7
33
  return issues
8
34
  .filter((issue) => issue.severity === "CRITICAL" || issue.severity === "HIGH")
9
35
  .map((issue) => {
10
36
  const related = matchObligation(issue, relationChecks);
11
- const isEc = issue.ruleId === "NS-H2-005" || /ec|point|scalar|curve|base/i.test(`${issue.signalName ?? ""} ${issue.explanation}`);
37
+ const isEc = isEcIssue(issue);
12
38
  const isPublic = /public|instance/i.test(`${issue.title} ${issue.explanation}`);
13
- const isCommitment = /commit|nullifier|root/i.test(`${issue.signalName ?? ""} ${issue.explanation}`);
39
+ const isCommitment = isOutputBindingIssue(issue);
14
40
  return {
15
41
  issueId: issue.id,
16
42
  relatedObligationId: related?.obligationId,
@@ -24,9 +50,7 @@ export function generateExploitHypotheses(issues, relationChecks) {
24
50
  attackerControl: issue.signalName
25
51
  ? `The prover controls witness/advice data influencing \`${issue.signalName}\`.`
26
52
  : "The prover controls witness/advice assignments involved in this finding.",
27
- brokenAssumption: related
28
- ? related.explanation
29
- : "The circuit is assumed to constrain a semantic relation that static analysis could not confirm.",
53
+ brokenAssumption: brokenAssumptionForIssue(issue),
30
54
  possibleImpact: issue.impact,
31
55
  validationSteps: [
32
56
  "Inspect the cited assignment and all constraints that should bind it.",
@@ -1 +1 @@
1
- {"version":3,"file":"exploit-hypothesis.js","sourceRoot":"","sources":["../../src/analysis/exploit-hypothesis.ts"],"names":[],"mappings":"AAEA,SAAS,eAAe,CAAC,KAAY,EAAE,MAA6B;IAClE,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;IACxG,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,qBAAqB,CAAC;QACjG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAe,EAAE,cAAqC;IAC9F,OAAO,MAAM;SACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC;SAC7E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,6BAA6B,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAClI,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAChF,MAAM,YAAY,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACrG,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,mBAAmB,EAAE,OAAO,EAAE,YAAY;YAC1C,UAAU,EAAE,IAAI;gBACd,CAAC,CAAC,iCAAiC,KAAK,CAAC,UAAU,IAAI,4BAA4B,+KAA+K;gBAClQ,CAAC,CAAC,QAAQ;oBACR,CAAC,CAAC,mJAAmJ;oBACrJ,CAAC,CAAC,YAAY;wBACZ,CAAC,CAAC,8JAA8J;wBAChK,CAAC,CAAC,kCAAkC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,qGAAqG;YACxK,eAAe,EAAE,KAAK,CAAC,UAAU;gBAC/B,CAAC,CAAC,yDAAyD,KAAK,CAAC,UAAU,KAAK;gBAChF,CAAC,CAAC,0EAA0E;YAC9E,gBAAgB,EAAE,OAAO;gBACvB,CAAC,CAAC,OAAO,CAAC,WAAW;gBACrB,CAAC,CAAC,iGAAiG;YACrG,cAAc,EAAE,KAAK,CAAC,MAAM;YAC5B,eAAe,EAAE;gBACf,uEAAuE;gBACvE,sGAAsG;gBACtG,0GAA0G;aAC3G;YACD,cAAc,EAAE,KAAK,CAAC,YAAY;YAClC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU;SAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"exploit-hypothesis.js","sourceRoot":"","sources":["../../src/analysis/exploit-hypothesis.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trynullsec/s1-zk",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Nullsec S1-ZK: AI-native auditing for zero-knowledge circuits.",
5
5
  "type": "module",
6
6
  "bin": {