@blamejs/exceptd-skills 0.14.24 → 0.14.26

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 CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.14.26 — 2026-05-28
4
+
5
+ `citation-hygiene` `rfc-number-title-mismatch` now fires only on an explicitly quoted title that conflicts with the registry title (`RFC 9404 "Sieve Email Filtering Language"` when 9404 is the JMAP Blob extension). The previous whole-line token-overlap heuristic flagged the ordinary ways developers cite RFCs — a mechanism description (`CRLF line endings per RFC 5322 §2.3`), a section pointer, a well-known short name (`RFC 9051 (IMAP4rev2)`), and even an RFC-number-shaped token inside code (`envelope.rfc822` → "RFC 822") — because that surrounding prose or code never shares vocabulary with the formal registry title. Those forms state no title and are no longer flagged; a genuinely conflicting quoted title still fires. The deterministic catalog-backed checks (`fabricated-cve-id`, `rejected-or-disputed-cve`, RFC-not-in-index) are unchanged.
6
+
7
+ ## 0.14.25 — 2026-05-28
8
+
9
+ `secrets` collector `ssh-private-key-block` accuracy:
10
+ - The in-source content scan now requires a complete PEM block — header, base64 body, and closing marker — so a bare `BEGIN … PRIVATE KEY` header used as a detection pattern (a redaction or DLP library's regex literal) or a documentation placeholder no longer registers as an embedded key.
11
+ - File classification is now content-aware for the ambiguous `.pem` / `.key` extensions. A certificate chain (`fullchain.pem`) or a public trust anchor (`bimi-trust-anchors.pem`) is conventionally `.pem` but carries no private key; it is treated as a private-key file only when its content actually contains a `PRIVATE KEY` block. Binary keystores (`.p12` / `.pfx`) and conventionally-named SSH keys (`id_rsa`, …) remain classified by name. A `.pem` or `.key` holding a real private key still fires.
12
+
3
13
  ## 0.14.24 — 2026-05-28
4
14
 
5
15
  `crypto-codebase` `hardcoded-key-material` now requires a complete PEM block — a `BEGIN … PRIVATE KEY` header, a base64 body, and a closing `END` marker — before it fires. A bare `BEGIN … PRIVATE KEY` marker carrying no key body is a *detection pattern*, not a leak: a redaction or DLP library's regex literal that matches the key header (to redact keys), or a documentation placeholder such as `privateKeyPem: "<elided>"`, no longer registers as embedded key material. An actual pasted private key still fires.
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "schema_version": "1.1.0",
3
- "generated_at": "2026-05-28T07:08:40.029Z",
3
+ "generated_at": "2026-05-28T08:22:44.979Z",
4
4
  "generator": "scripts/build-indexes.js",
5
5
  "source_count": 54,
6
6
  "source_hashes": {
7
- "manifest.json": "9e161d19bbce1ad9a15ca37bcb6e561bf51a6394ee3b02b458951ffd4e840ab6",
7
+ "manifest.json": "f555d900f5b76a676f1ecab9b8697831c1d9c67301f0a475b830e6c8d6b55d05",
8
8
  "data/atlas-ttps.json": "d24bc02859d40ccf1615db75cca68c077585904e41e0d8f6de448121e9b1abb0",
9
9
  "data/attack-techniques.json": "fa193f0d2d248176a8beddb641e9fe56ba4faa9e15dc253ff876dbf0c5d58a77",
10
10
  "data/cve-catalog.json": "03d8071c7ae244ccda7611c3bc66a5581c21e790d158c2948c3001f55aa5aac9",
@@ -204,35 +204,47 @@ function titleAcronym(realTitle) {
204
204
  }
205
205
 
206
206
  /**
207
- * Decide whether an adjacent text fragment makes a TITLE CLAIM that
208
- * conflicts with the real index title. Conservative by design the cost
209
- * of a false positive (telling an author their correct citation is wrong)
210
- * is high, so the bar to flag a mismatch is deliberately strict:
211
- * - the cited RFC number must be in the index (checked by the caller),
212
- * - the adjacent text must carry at least THREE meaningful tokens a
213
- * bare nickname / abbreviation ("TLS 1.3", "(HTTP)") reduces below
214
- * this and is treated as no-title-claim, never a mismatch,
215
- * - if the adjacent tokens contain the title's acronym, it is the same
216
- * document (TLS for Transport Layer Security); not a mismatch,
217
- * - only ZERO overlap between the meaningful adjacent tokens and the
218
- * real-title tokens flags a mismatch. Any shared content word means
219
- * the author is describing the right document (paraphrase) — demote.
207
+ * Decide whether an EXPLICITLY STATED title conflicts with the real index
208
+ * title. The stated title is extracted by the caller (see statedTitleAfter):
209
+ * only a title introduced immediately after the RFC number by a delimiter —
210
+ * `RFC N: The Title`, `RFC N "The Title"`, `RFC N (The Title)` — counts.
211
+ *
212
+ * This is deliberately strict because the dominant real-world pattern is a
213
+ * mechanism citation "CRLF line endings per RFC 5322", "renders values per
214
+ * RFC 8785", "ETag repeated per RFC 7232 §4.1" — where the prose describes
215
+ * what the code does *per* the RFC using vocabulary that never overlaps the
216
+ * RFC's formal title. Comparing that prose against the title produced a
217
+ * false "mismatch" on correct citations. Such references state no title and
218
+ * are filtered out before this function is reached.
219
+ *
220
+ * - at least TWO meaningful tokens in the stated title (a bare acronym /
221
+ * nickname is not a title),
222
+ * - the title's acronym appearing in the stated title is the same document
223
+ * (TLS for Transport Layer Security); not a mismatch,
224
+ * - only ZERO overlap between stated-title tokens and real-title tokens
225
+ * flags a mismatch; any shared content word is a paraphrase — demote.
220
226
  * Returns "mismatch" | "match" | "no-title-claim".
221
227
  */
222
- function classifyRfcTitle(adjacentText, realTitle) {
223
- const adjTokens = titleTokens(adjacentText);
224
- // Require a substantive title claim. Fewer than three content tokens is
225
- // a nickname / abbreviation, not a stated title — stay conservative.
226
- if (adjTokens.size < 3) return "no-title-claim";
228
+ function classifyRfcTitle(statedTitle, realTitle) {
229
+ const adjTokens = titleTokens(statedTitle);
230
+ if (adjTokens.size < 2) return "no-title-claim";
227
231
  const realTokens = titleTokens(realTitle);
228
232
  if (realTokens.size === 0) return "no-title-claim";
229
- // Acronym recognition: "tls" in the adjacent text matches "Transport
233
+ // Acronym recognition: "tls" in the stated title matches "Transport
230
234
  // Layer Security". Same document, not a wrong title.
231
235
  const acronym = titleAcronym(realTitle);
232
236
  if (acronym.length >= 2 && adjTokens.has(acronym)) return "match";
233
237
  let overlap = 0;
234
238
  for (const t of adjTokens) {
235
- if (realTokens.has(t)) overlap++;
239
+ if (realTokens.has(t)) { overlap++; continue; }
240
+ // Nickname / short-name recognition: a stated token that contains (or is
241
+ // contained by) a real-title token of length >= 4 is the same document
242
+ // under a common name — "IMAP4rev2" carries the real token "imap"
243
+ // ("...Access Protocol (IMAP)..."). Avoids false mismatches on the way
244
+ // developers actually cite RFCs by their well-known short names.
245
+ for (const rt of realTokens) {
246
+ if (rt.length >= 4 && (t.includes(rt) || rt.includes(t))) { overlap++; break; }
247
+ }
236
248
  }
237
249
  // Any shared content word -> the author is describing the right
238
250
  // document. Only a stated title with ZERO overlap is a conflicting
@@ -249,6 +261,29 @@ function lineAround(content, index) {
249
261
  return content.slice(start, end);
250
262
  }
251
263
 
264
+ // Extract a title EXPLICITLY QUOTED immediately after the RFC number on the
265
+ // same line:
266
+ // RFC N "The Title" RFC N: "The Title" RFC N ("The Title")
267
+ // A quoted string is the only unambiguous title claim. Everything else states
268
+ // no title and returns null:
269
+ // - free prose ("RFC 6455 wire layer"), a section pointer ("RFC 5322 §2.3"),
270
+ // and "X per RFC N" mechanism attributions describe usage, not the title;
271
+ // - bare nicknames ("RFC 9051 (IMAP4rev2)") are common short names;
272
+ // - and crucially, an RFC-number-shaped token inside CODE (`envelope.rfc822`
273
+ // matches "RFC 822"; `RFC 3339:` ahead of an object literal) is followed
274
+ // by code punctuation, never a quoted title — so comparing a code fragment
275
+ // against a formal title can no longer produce a phantom mismatch.
276
+ // The opening quote must be SEPARATED from the number by whitespace or a
277
+ // `:` / `(` introducer. A quote touching the last digit (`"…RFC 3339"`) is the
278
+ // CLOSING quote of a string that happens to end with the citation, not the
279
+ // opening quote of a title — without this guard the following code was
280
+ // captured as a phantom "title". The closing quote bounds the title; straight
281
+ // and typographic quotes are accepted.
282
+ function statedTitleAfter(after) {
283
+ const m = after.match(/^(?:\s*[:(]\s*|\s+)["“]([^"”\n]{3,100})["”]/);
284
+ return m ? m[1].trim() : null;
285
+ }
286
+
252
287
  function collect({ cwd = process.cwd() } = {}) {
253
288
  const errors = [];
254
289
  const startTime = Date.now();
@@ -339,7 +374,10 @@ function collect({ cwd = process.cwd() } = {}) {
339
374
  const line = lineAround(content, m.index);
340
375
  const rfcLineNo = lineFromOffset(content, m.index);
341
376
  if (rfcTitles.has(num)) {
342
- const verdict = classifyRfcTitle(line, rfcTitles.get(num));
377
+ const lineStart = content.lastIndexOf("\n", m.index) + 1;
378
+ const after = line.slice((m.index - lineStart) + m[0].length);
379
+ const stated = statedTitleAfter(after);
380
+ const verdict = stated ? classifyRfcTitle(stated, rfcTitles.get(num)) : "no-title-claim";
343
381
  if (verdict === "mismatch" && !illustrative) {
344
382
  hits["rfc-number-title-mismatch"].push({
345
383
  file: f.rel,
@@ -73,6 +73,23 @@ const AUTH_CONFIG_FILES = new Set([
73
73
 
74
74
  const SSH_PRIVATE_KEY_FILES = new Set(["id_rsa", "id_ed25519", "id_ecdsa", "id_dsa"]);
75
75
  const SSH_PRIVATE_KEY_EXTS = new Set([".pem", ".key", ".p12", ".pfx"]);
76
+ // `.pem` / `.key` are ambiguous: a certificate chain (`fullchain.pem`) or a
77
+ // public trust anchor (`bimi-trust-anchors.pem`) is conventionally `.pem` and
78
+ // carries no private key. A name-only classifier flags these as private keys.
79
+ // `.p12` / `.pfx` are binary keystores (private material by nature) and the
80
+ // id_* names are private SSH keys, so only the PEM extensions are content-gated.
81
+ const PEM_PRIVATE_KEY_MARKER = /-----BEGIN (?:[A-Z0-9]+ )*PRIVATE KEY-----/;
82
+ const CONTENT_GATED_KEY_EXTS = new Set([".pem", ".key"]);
83
+ function carriesPrivateKey(file) {
84
+ const ext = path.extname(file.name).toLowerCase();
85
+ if (!CONTENT_GATED_KEY_EXTS.has(ext)) return true; // .p12/.pfx/id_* → private by nature
86
+ try {
87
+ if (fs.statSync(file.full).size > MAX_FILE_BYTES) return true; // too big to scan → conservative
88
+ return PEM_PRIVATE_KEY_MARKER.test(fs.readFileSync(file.full, "utf8"));
89
+ } catch {
90
+ return true; // unreadable → conservative (treat as a key)
91
+ }
92
+ }
76
93
 
77
94
  const IAC_EXTS = new Set([".tf", ".tfvars", ".bicep"]);
78
95
  const IAC_EXACT = new Set(["terraform.tfstate", "values.yaml", "secret.yaml"]);
@@ -104,7 +121,13 @@ const INDICATOR_PATTERNS = [
104
121
  { id: "slack-bot-or-user-token", re: /\bxox[abposr]-[A-Za-z0-9-]{10,}\b/g },
105
122
  { id: "stripe-secret-key", re: /\b(?:sk|rk)_(?:live|test)_[A-Za-z0-9]{24,}\b/g },
106
123
  { id: "jwt-token-with-secret-context", re: /\beyJ[A-Za-z0-9_-]{10,}\.eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g },
107
- { id: "ssh-private-key-block", re: /-----BEGIN (?:RSA |EC |OPENSSH |DSA |ENCRYPTED |)PRIVATE KEY-----/g },
124
+ // Require a complete PEM block header, base64 body, closing marker —
125
+ // so a bare `BEGIN ... PRIVATE KEY` header used as a detection pattern (a
126
+ // redaction/DLP library's regex literal) or a doc placeholder does not
127
+ // register as an embedded key. `-` is excluded from the body class so the
128
+ // run halts at the first `-` of `-----END` (no backtracking, ReDoS-safe).
129
+ // Private-key *files* (.pem/.key) are detected separately by file presence.
130
+ { id: "ssh-private-key-block", re: /-----BEGIN (?:RSA |EC |OPENSSH |DSA |ENCRYPTED |)PRIVATE KEY-----[A-Za-z0-9+/=\s]{20,4000}-----END/g },
108
131
  { id: "openai-api-key", re: /\bsk-(?:proj-|svcacct-|admin-|)[A-Za-z0-9_-]{20,}\b/g },
109
132
  { id: "anthropic-api-key", re: /\bsk-ant-[A-Za-z0-9_-]{20,}\b/g },
110
133
  ];
@@ -230,7 +253,7 @@ function collect({ cwd = process.cwd(), env = process.env, args = {} } = {}) {
230
253
  const c = classify(f);
231
254
  if (c.isEnv) envFiles.push(f);
232
255
  if (c.isAuthConfig) authConfigFiles.push(f);
233
- if (c.isSshKey) sshPrivateKeys.push(f);
256
+ if (c.isSshKey && carriesPrivateKey(f)) sshPrivateKeys.push(f);
234
257
  if (c.isIac) iacFiles.push(f);
235
258
  if (c.isText) textFiles.push(f);
236
259
  }
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "exceptd-security",
3
- "version": "0.14.24",
3
+ "version": "0.14.26",
4
4
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation",
5
5
  "homepage": "https://exceptd.com",
6
6
  "license": "Apache-2.0",
@@ -53,7 +53,7 @@
53
53
  ],
54
54
  "last_threat_review": "2026-05-15",
55
55
  "signature": "lXhZgoIrrVloO3XaTvo/43AxZn4mwErstd7DR0O/oVhD3AOGODM4HqrageYEou9WKOdMEGP5mJNTjJsXdP5NDA==",
56
- "signed_at": "2026-05-28T07:04:55.410Z",
56
+ "signed_at": "2026-05-28T08:19:15.366Z",
57
57
  "cwe_refs": [
58
58
  "CWE-125",
59
59
  "CWE-362",
@@ -123,7 +123,7 @@
123
123
  ],
124
124
  "last_threat_review": "2026-05-17",
125
125
  "signature": "ztSKk/zFMFbT12qRcEeBKpydBn7fTT86KxMmor0DTCoKQWk5fJ0fSInfP1XMSB6rFk4/SuSjKVxQRMKVJ5a+Cg==",
126
- "signed_at": "2026-05-28T07:04:55.412Z",
126
+ "signed_at": "2026-05-28T08:19:15.368Z",
127
127
  "cwe_refs": [
128
128
  "CWE-1039",
129
129
  "CWE-1426",
@@ -196,7 +196,7 @@
196
196
  ],
197
197
  "last_threat_review": "2026-05-17",
198
198
  "signature": "K6QdPHNK5c4K5QFjrW0QsUhjp71D7SOisSoulwPNSvKRdi2rY+yg0kdckijBMkLMsVPyUvcC9giu93mKJ1OZDg==",
199
- "signed_at": "2026-05-28T07:04:55.413Z",
199
+ "signed_at": "2026-05-28T08:19:15.368Z",
200
200
  "cwe_refs": [
201
201
  "CWE-22",
202
202
  "CWE-345",
@@ -248,7 +248,7 @@
248
248
  "framework_gaps": [],
249
249
  "last_threat_review": "2026-05-22",
250
250
  "signature": "zbr8CbOe2rIPuxj2bCl8mVc3YgLsRHnx3/UU7MmyMLNg4c13q6LEBglC1A7cjhfblfHsX/1rxNLaukDzc65lAw==",
251
- "signed_at": "2026-05-28T07:04:55.413Z"
251
+ "signed_at": "2026-05-28T08:19:15.369Z"
252
252
  },
253
253
  {
254
254
  "name": "compliance-theater",
@@ -279,7 +279,7 @@
279
279
  ],
280
280
  "last_threat_review": "2026-05-22",
281
281
  "signature": "F2Shxae0ua0gPtvwzTRVzzHaIgJcFDRT3/akLUAZ4aaMQhkleKkcTaTpkjp+pTVEdPfLeLGNCeAOMs+whVYOBg==",
282
- "signed_at": "2026-05-28T07:04:55.413Z"
282
+ "signed_at": "2026-05-28T08:19:15.369Z"
283
283
  },
284
284
  {
285
285
  "name": "exploit-scoring",
@@ -308,7 +308,7 @@
308
308
  ],
309
309
  "last_threat_review": "2026-05-18",
310
310
  "signature": "NA1hoQycvQhSUoG5rwlXX0mOVmGxoXRVezkELGEA2nZOdGis4gXkHT3O6Sfw7zxE4JuMrsCb65TEeOWk9WEPDg==",
311
- "signed_at": "2026-05-28T07:04:55.414Z"
311
+ "signed_at": "2026-05-28T08:19:15.370Z"
312
312
  },
313
313
  {
314
314
  "name": "rag-pipeline-security",
@@ -345,7 +345,7 @@
345
345
  ],
346
346
  "last_threat_review": "2026-05-22",
347
347
  "signature": "W3pS8lnaCP96TQzsJpG5d5yv5IwgaQyS4Z2Ctcz5BOJf6LbajSIgeDgTZ4f4Bhr5m4E7KsgWGjZS4x7Fwd33BQ==",
348
- "signed_at": "2026-05-28T07:04:55.415Z",
348
+ "signed_at": "2026-05-28T08:19:15.370Z",
349
349
  "cwe_refs": [
350
350
  "CWE-1395",
351
351
  "CWE-1426"
@@ -405,7 +405,7 @@
405
405
  ],
406
406
  "last_threat_review": "2026-05-17",
407
407
  "signature": "/WDGygh1Ck4yWlBWDGtEUVCqKB8d+UaJXoAoBXujtt+GAl8JbMNpaN1TvI0WkEltQ9dTxaAzSn20/eVDqv8iDQ==",
408
- "signed_at": "2026-05-28T07:04:55.415Z",
408
+ "signed_at": "2026-05-28T08:19:15.370Z",
409
409
  "d3fend_refs": [
410
410
  "D3-CA",
411
411
  "D3-CSPP",
@@ -440,7 +440,7 @@
440
440
  "framework_gaps": [],
441
441
  "last_threat_review": "2026-05-22",
442
442
  "signature": "za1NKBpy9LC91F/ESO/qhUfmvVr8GNItQOjR5OJLeHm+2dQ9HHiFWQK2eo53V/n/0uhubuggURA3yS6kJuWwBg==",
443
- "signed_at": "2026-05-28T07:04:55.415Z",
443
+ "signed_at": "2026-05-28T08:19:15.371Z",
444
444
  "cwe_refs": [
445
445
  "CWE-1188"
446
446
  ],
@@ -474,7 +474,7 @@
474
474
  "framework_gaps": [],
475
475
  "last_threat_review": "2026-05-18",
476
476
  "signature": "1853tUUOO35GCXP4vn4qYdBDCdGJu2/WXCNOShhEt69G6BUoq9C3gYGjKWwEPxRKjwjyMtb2nmsL2BZFHRIADw==",
477
- "signed_at": "2026-05-28T07:04:55.416Z",
477
+ "signed_at": "2026-05-28T08:19:15.371Z",
478
478
  "forward_watch": [
479
479
  "New AI attack classes as ATLAS v6 publishes",
480
480
  "Post-quantum adversary capability timeline",
@@ -513,7 +513,7 @@
513
513
  "framework_gaps": [],
514
514
  "last_threat_review": "2026-05-01",
515
515
  "signature": "ZoFh0msOLToS9Xntp9e6zAcg8mE5TOsm7Tq9EYybKL7midjQ5z+aue1Uhp4+xjMRRqVtj8F2W0PvIBTYkYlyAg==",
516
- "signed_at": "2026-05-28T07:04:55.416Z"
516
+ "signed_at": "2026-05-28T08:19:15.371Z"
517
517
  },
518
518
  {
519
519
  "name": "zeroday-gap-learn",
@@ -540,7 +540,7 @@
540
540
  "framework_gaps": [],
541
541
  "last_threat_review": "2026-05-18",
542
542
  "signature": "igRqYyU1unRFH40BsPyAR62SPrk8QZv8dPGb8S9O9EvLCNOZAzm3t+HdT/NKqzWHwrpomOzkkkyLfYI/0qTUDA==",
543
- "signed_at": "2026-05-28T07:04:55.416Z",
543
+ "signed_at": "2026-05-28T08:19:15.372Z",
544
544
  "forward_watch": [
545
545
  "New CISA KEV entries",
546
546
  "New ATLAS TTP additions in each ATLAS release",
@@ -604,7 +604,7 @@
604
604
  ],
605
605
  "last_threat_review": "2026-05-22",
606
606
  "signature": "XJFnPtu9tG23qlHGUJulQ0/Vu/p41qFrQng0fE3+GpCPD35+oipdlDXvf9zFo6A6i4OVj601qNuXKh9/kfcHDw==",
607
- "signed_at": "2026-05-28T07:04:55.417Z",
607
+ "signed_at": "2026-05-28T08:19:15.372Z",
608
608
  "cwe_refs": [
609
609
  "CWE-327"
610
610
  ],
@@ -652,7 +652,7 @@
652
652
  ],
653
653
  "last_threat_review": "2026-05-22",
654
654
  "signature": "QuOVaQ4E2Sl39TClbhZ7HA9XrYAyRrDL44HY3RTE7aWLue0hV2cxaBt40ALGmHS++631QGFDlZTLZI77Tr6nAA==",
655
- "signed_at": "2026-05-28T07:04:55.417Z"
655
+ "signed_at": "2026-05-28T08:19:15.372Z"
656
656
  },
657
657
  {
658
658
  "name": "security-maturity-tiers",
@@ -689,7 +689,7 @@
689
689
  ],
690
690
  "last_threat_review": "2026-05-01",
691
691
  "signature": "8Px1s2lDj10/Q6erwEQlXgUHM1+OTruUR8qAHPX7Oo3k/l69N6P9sm0PsafS9wDFtj9l5C/OiLiFgzMlMt6vBw==",
692
- "signed_at": "2026-05-28T07:04:55.417Z",
692
+ "signed_at": "2026-05-28T08:19:15.373Z",
693
693
  "cwe_refs": [
694
694
  "CWE-1188"
695
695
  ]
@@ -724,7 +724,7 @@
724
724
  "framework_gaps": [],
725
725
  "last_threat_review": "2026-05-11",
726
726
  "signature": "urRcataVWg6/utyEkSiOWoNxTL8sABRjPR7ShyDfZGnAozFph/yDktSoaPVxQDXwu9EfJE+qhUW5OYR/yJECBQ==",
727
- "signed_at": "2026-05-28T07:04:55.418Z"
727
+ "signed_at": "2026-05-28T08:19:15.373Z"
728
728
  },
729
729
  {
730
730
  "name": "attack-surface-pentest",
@@ -796,7 +796,7 @@
796
796
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — Microsoft Edge 4-bug sandbox escape by Orange Tsai (DEVCORE); forward-watch only (browser sandbox, out of current playbook scope); track Microsoft Edge security advisory and KEV add"
797
797
  ],
798
798
  "signature": "C7lv65/Ecm8JJgSKxrX5lxx0YFzKWtrIQSKp+vy50I5e8945s1JmifGUUrnQwRQhq/Pkv7EmfiH5XSO8h75bDg==",
799
- "signed_at": "2026-05-28T07:04:55.418Z"
799
+ "signed_at": "2026-05-28T08:19:15.373Z"
800
800
  },
801
801
  {
802
802
  "name": "fuzz-testing-strategy",
@@ -856,7 +856,7 @@
856
856
  "OSS-Fuzz-Gen / AI-assisted harness generation becoming the default expectation for OSS maintainers"
857
857
  ],
858
858
  "signature": "Z7ypCUnXx8JpLtgxxB6RHNi39w74AmrGY1N4ofAGCXhkuM2EaFVm1AU0dvl9UQ1bVLfHKEDGqMO/TwlIY7RABg==",
859
- "signed_at": "2026-05-28T07:04:55.418Z"
859
+ "signed_at": "2026-05-28T08:19:15.374Z"
860
860
  },
861
861
  {
862
862
  "name": "dlp-gap-analysis",
@@ -931,7 +931,7 @@
931
931
  "Quebec Law 25, India DPDPA, KSA PDPL enforcement actions naming AI-tool prompt data as in-scope personal information"
932
932
  ],
933
933
  "signature": "IgEnpHOhCftAyfUNdKsjbrd169T9pJkk/rRM2ZEna+H18y7p5x48+1kME2sJMZjJuyAdQFBJi8PJXZFwLGI+DQ==",
934
- "signed_at": "2026-05-28T07:04:55.419Z"
934
+ "signed_at": "2026-05-28T08:19:15.374Z"
935
935
  },
936
936
  {
937
937
  "name": "supply-chain-integrity",
@@ -1010,7 +1010,7 @@
1010
1010
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — NVIDIA Megatron Bridge path traversal by haehae; AI training-stack file-system trust boundary; track patch and SBOM-attestation impact"
1011
1011
  ],
1012
1012
  "signature": "pcLrM98A3vUSZRjwNAk0aZ9umvOwB41XCLLsCOy/IebB2F/06oIrGUKkMHtHwm4pTVPShMMcKdZQQ3jz30FnCg==",
1013
- "signed_at": "2026-05-28T07:04:55.419Z"
1013
+ "signed_at": "2026-05-28T08:19:15.374Z"
1014
1014
  },
1015
1015
  {
1016
1016
  "name": "defensive-countermeasure-mapping",
@@ -1067,7 +1067,7 @@
1067
1067
  ],
1068
1068
  "last_threat_review": "2026-05-11",
1069
1069
  "signature": "G5q5elh7Q7eu2xcwTVQJGDTGfvZR0OGQaLSLJPb2wjzCHFF8PWuZfCHZdjjqisiRzRWPyLlzgfHeMJqOdy7cBw==",
1070
- "signed_at": "2026-05-28T07:04:55.419Z"
1070
+ "signed_at": "2026-05-28T08:19:15.375Z"
1071
1071
  },
1072
1072
  {
1073
1073
  "name": "identity-assurance",
@@ -1134,7 +1134,7 @@
1134
1134
  "d3fend_refs": [],
1135
1135
  "last_threat_review": "2026-05-11",
1136
1136
  "signature": "Wv5hGMeHjlaQK1zwicVCA7AvdKgJBgvcjdpGM9Ywahh9tagAKhbkOjybowDQZzu7OZ3bDkbh6pBYc1Sdwr6NAA==",
1137
- "signed_at": "2026-05-28T07:04:55.420Z"
1137
+ "signed_at": "2026-05-28T08:19:15.375Z"
1138
1138
  },
1139
1139
  {
1140
1140
  "name": "ot-ics-security",
@@ -1190,7 +1190,7 @@
1190
1190
  "d3fend_refs": [],
1191
1191
  "last_threat_review": "2026-05-11",
1192
1192
  "signature": "8t5qKHd3yWi57dvG36YQkLN/X9bQWqtEiYjay4IfSmqhJpM/xXPaQVKNGz3wscrO8OLKUZ0OaX7Mj5kzpgBKBQ==",
1193
- "signed_at": "2026-05-28T07:04:55.420Z"
1193
+ "signed_at": "2026-05-28T08:19:15.375Z"
1194
1194
  },
1195
1195
  {
1196
1196
  "name": "coordinated-vuln-disclosure",
@@ -1242,7 +1242,7 @@
1242
1242
  "NYDFS 23 NYCRR 500 amendments potentially adding explicit CVD program requirements"
1243
1243
  ],
1244
1244
  "signature": "GDGt4UPqBa04PjlpSmpyihGzd3OgfBN7jaAK5tfwp+LRSs3ygKOdbeivUCCHNagTY1hE6hG2Ou40ADfBFuXeAg==",
1245
- "signed_at": "2026-05-28T07:04:55.420Z"
1245
+ "signed_at": "2026-05-28T08:19:15.376Z"
1246
1246
  },
1247
1247
  {
1248
1248
  "name": "threat-modeling-methodology",
@@ -1292,7 +1292,7 @@
1292
1292
  "PASTA v2 updates incorporating AI/ML application threats"
1293
1293
  ],
1294
1294
  "signature": "t6IgW+ciQMuY5uvLD0HDDB/U1TjZmgAy76bvH0526QcqPMCz27CWX3cdyJ6nxpg3rYrx93xAawu0opw/ZZckCw==",
1295
- "signed_at": "2026-05-28T07:04:55.421Z"
1295
+ "signed_at": "2026-05-28T08:19:15.376Z"
1296
1296
  },
1297
1297
  {
1298
1298
  "name": "webapp-security",
@@ -1366,7 +1366,7 @@
1366
1366
  "d3fend_refs": [],
1367
1367
  "last_threat_review": "2026-05-11",
1368
1368
  "signature": "ux85YI4t2mVHOyt744Yin1HHy+z11JIFygjKfFfQOBBl5QVV3A267jeIy7utix85irMcpZm/T3yx/ooqiK2tBA==",
1369
- "signed_at": "2026-05-28T07:04:55.421Z",
1369
+ "signed_at": "2026-05-28T08:19:15.376Z",
1370
1370
  "forward_watch": [
1371
1371
  "NGINX Rift CVE-2026-42945 (disclosed 2026-05-13, source depthfirst) — KEV-watch predicted CISA KEV listing by 2026-05-29; AI-assisted discovery angle; track for active-exploitation confirmation and patch advisory affecting front-door web app deployments"
1372
1372
  ]
@@ -1419,7 +1419,7 @@
1419
1419
  "d3fend_refs": [],
1420
1420
  "last_threat_review": "2026-05-15",
1421
1421
  "signature": "IIXnkZ5ZNqFwOto5KfytADTLLZLoyXNZACD1ORZ40P1HUAQxe6u2uyXFzzsfuob4Uy06jNkRGr2FFgCphUH1Cw==",
1422
- "signed_at": "2026-05-28T07:04:55.422Z"
1422
+ "signed_at": "2026-05-28T08:19:15.377Z"
1423
1423
  },
1424
1424
  {
1425
1425
  "name": "sector-healthcare",
@@ -1479,7 +1479,7 @@
1479
1479
  "d3fend_refs": [],
1480
1480
  "last_threat_review": "2026-05-11",
1481
1481
  "signature": "AhF9KF8ZBlDteciV+F8IBSmFVYCvQOn44GmD4rZjgLoPxfIv/QE1/vSkK32zyqDKtHWkLSXExbkkPkxA/V6dDw==",
1482
- "signed_at": "2026-05-28T07:04:55.422Z"
1482
+ "signed_at": "2026-05-28T08:19:15.377Z"
1483
1483
  },
1484
1484
  {
1485
1485
  "name": "sector-financial",
@@ -1560,7 +1560,7 @@
1560
1560
  "TIBER-EU framework v2.0 alignment with DORA TLPT RTS (JC 2024/40); cross-recognition with CBEST and iCAST"
1561
1561
  ],
1562
1562
  "signature": "HQgZvb4ReziEz5rNFr8i/O8/rJEZR+iHRROT7m/D2QUqhrcNISPkYXENsUZlG8xapzy/Ik92ehkseyj4hdmhCQ==",
1563
- "signed_at": "2026-05-28T07:04:55.423Z"
1563
+ "signed_at": "2026-05-28T08:19:15.378Z"
1564
1564
  },
1565
1565
  {
1566
1566
  "name": "sector-federal-government",
@@ -1629,7 +1629,7 @@
1629
1629
  "Australia PSPF 2024 revision and ISM quarterly updates — track for Essential Eight Maturity Level requirements for federal entities"
1630
1630
  ],
1631
1631
  "signature": "linxmsXZiOYtcs71sSWgGCrvb8xQfmxmtTY5PRvZJ0/8FgJulo0tQtejzexYG775s7XhjAmGsDP238BQTQ8ADA==",
1632
- "signed_at": "2026-05-28T07:04:55.423Z"
1632
+ "signed_at": "2026-05-28T08:19:15.378Z"
1633
1633
  },
1634
1634
  {
1635
1635
  "name": "sector-energy",
@@ -1694,7 +1694,7 @@
1694
1694
  "ICS-CERT advisory feed (https://www.cisa.gov/news-events/cybersecurity-advisories/ics-advisories) for vendor CVEs in Siemens, Rockwell, Schneider Electric, ABB, GE Vernova, Hitachi Energy, AVEVA / OSIsoft PI"
1695
1695
  ],
1696
1696
  "signature": "JjBfc0ovta560Clk0x3QGRM5osFJDwcvpy3rT7QEGdCIL827jzE8QCow1C8deXq+4JhY2sA/d7/8IsxikdlkCg==",
1697
- "signed_at": "2026-05-28T07:04:55.424Z"
1697
+ "signed_at": "2026-05-28T08:19:15.379Z"
1698
1698
  },
1699
1699
  {
1700
1700
  "name": "sector-telecom",
@@ -1780,7 +1780,7 @@
1780
1780
  "O-RAN SFG / WG11 security specifications"
1781
1781
  ],
1782
1782
  "signature": "QpfWU8d2FFbo/Kt0Be2jcyDM9JPhKOiwKSi+RWmtPa2SrBVzFNYdC3T23fQXxHDEC2iyApEbXnwk8KN4d6PuBQ==",
1783
- "signed_at": "2026-05-28T07:04:55.424Z"
1783
+ "signed_at": "2026-05-28T08:19:15.379Z"
1784
1784
  },
1785
1785
  {
1786
1786
  "name": "api-security",
@@ -1849,7 +1849,7 @@
1849
1849
  "d3fend_refs": [],
1850
1850
  "last_threat_review": "2026-05-18",
1851
1851
  "signature": "BmCRCestWqr55+fCynEhtAl5NWLT+xLTkpwS0Icp3SaoZOw/ce3Y6TtqjHRSKn4CBJq7YDiLRWxmhO3MStvOAA==",
1852
- "signed_at": "2026-05-28T07:04:55.424Z",
1852
+ "signed_at": "2026-05-28T08:19:15.379Z",
1853
1853
  "forward_watch": [
1854
1854
  "NGINX Rift CVE-2026-42945 (disclosed 2026-05-13, source depthfirst) — KEV-watch predicted CISA KEV listing by 2026-05-29; track for active-exploitation confirmation and patch advisory affecting API gateway / reverse-proxy deployments",
1855
1855
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — LiteLLM 3-bug SSRF + Code Injection chain by k3vg3n; LLM-proxy API surface; track upstream patch and CVE assignments",
@@ -1935,7 +1935,7 @@
1935
1935
  "CISA KEV additions for cloud-control-plane CVEs (IMDSv1 abuses, federation token mishandling, cross-tenant boundary failures); CISA Cybersecurity Advisories for cross-cloud advisories"
1936
1936
  ],
1937
1937
  "signature": "/DV3pmZwrRySrk1OCbyI+0BQESacjupJfUX3eC2NGtXuYOBro0vndIP+z27heFxumnjU3a9sfla7/U9X+pqnDw==",
1938
- "signed_at": "2026-05-28T07:04:55.424Z"
1938
+ "signed_at": "2026-05-28T08:19:15.380Z"
1939
1939
  },
1940
1940
  {
1941
1941
  "name": "container-runtime-security",
@@ -1997,7 +1997,7 @@
1997
1997
  "d3fend_refs": [],
1998
1998
  "last_threat_review": "2026-05-15",
1999
1999
  "signature": "E2UGSf9ATyYgzBr8uM/0ubOUmDqo1jVA7f9mVxv6LHfWGCNuQNXDyuNou9VAmUCeeXEeUYIi3AFjXkJqpOkxDA==",
2000
- "signed_at": "2026-05-28T07:04:55.425Z",
2000
+ "signed_at": "2026-05-28T08:19:15.380Z",
2001
2001
  "forward_watch": [
2002
2002
  "Pwn2Own Berlin 2026 (disclosed 2026-05-14, embargo ends 2026-08-12) — NVIDIA Container Toolkit container escape ($50K award) by chompie / IBM X-Force XOR; high-severity container/hypervisor boundary break; track patch and KEV add post-embargo"
2003
2003
  ]
@@ -2071,7 +2071,7 @@
2071
2071
  "MITRE ATLAS v5.6.0 (released May 2026) shipped the AML.T0010 sub-technique expansion this forecast tracked plus new techniques (\"Publish Poisoned AI Agent Tool\", \"Escape to Host\"); inventory now 16 tactics, 84 techniques, 56 sub-techniques. Forward watch: subsequent ATLAS minor and major releases — track next-cadence updates to agentic-AI TTPs and MLOps-pipeline-specific techniques"
2072
2072
  ],
2073
2073
  "signature": "IL+DlRCDJN/p08iiJCFkasKcoyjcB0uWrJ6ORLjQcS1HrUa5Xt62QxVjYPHzaevlm5y36ZdmfESqsZJmzK3lCg==",
2074
- "signed_at": "2026-05-28T07:04:55.425Z"
2074
+ "signed_at": "2026-05-28T08:19:15.380Z"
2075
2075
  },
2076
2076
  {
2077
2077
  "name": "incident-response-playbook",
@@ -2133,7 +2133,7 @@
2133
2133
  "NYDFS 23 NYCRR 500.17 amendments tightening ransom-payment 24h disclosure operationalization"
2134
2134
  ],
2135
2135
  "signature": "MmjLjlmOMLjhJJ4ZfR8MYlHam+ZB+eSqfh6Nv+DecaG4O5zeo9DBP/iL3cbyDVZxmhnhivgJild2ccYeWTeZAg==",
2136
- "signed_at": "2026-05-28T07:04:55.426Z"
2136
+ "signed_at": "2026-05-28T08:19:15.381Z"
2137
2137
  },
2138
2138
  {
2139
2139
  "name": "ransomware-response",
@@ -2213,7 +2213,7 @@
2213
2213
  ],
2214
2214
  "last_threat_review": "2026-05-22",
2215
2215
  "signature": "ssueL03g9fWlhXpTe+IiY5l7RqQkunN4DTN5QETKE+VOX+qggdjAR8PONxk77ol4xWYmHrM/VcH8CNtXUEvgBA==",
2216
- "signed_at": "2026-05-28T07:04:55.426Z"
2216
+ "signed_at": "2026-05-28T08:19:15.381Z"
2217
2217
  },
2218
2218
  {
2219
2219
  "name": "email-security-anti-phishing",
@@ -2266,7 +2266,7 @@
2266
2266
  "d3fend_refs": [],
2267
2267
  "last_threat_review": "2026-05-18",
2268
2268
  "signature": "oAFeZmci6BN7Xlu0oOThrazZNBQBIWeCQnoZDqjXo9cs1hIe/6ZijSEr3R3hFQSXH3c1KAbhPw+InR9Gc0HIBQ==",
2269
- "signed_at": "2026-05-28T07:04:55.427Z"
2269
+ "signed_at": "2026-05-28T08:19:15.381Z"
2270
2270
  },
2271
2271
  {
2272
2272
  "name": "age-gates-child-safety",
@@ -2334,7 +2334,7 @@
2334
2334
  "US state adult-site age-verification laws — 19+ states by mid-2026 (TX HB 18 upheld by SCOTUS June 2025 in Free Speech Coalition v. Paxton); track ongoing challenges in remaining states"
2335
2335
  ],
2336
2336
  "signature": "Rgho5TOFUL1txOzcVR0kASCNdovSU4yt99JlGilJlJRyg0A+BdeeQYrZrhPF6Vx2reUAVG0BeHfcZtSbi+cwCg==",
2337
- "signed_at": "2026-05-28T07:04:55.427Z"
2337
+ "signed_at": "2026-05-28T08:19:15.382Z"
2338
2338
  },
2339
2339
  {
2340
2340
  "name": "cloud-iam-incident",
@@ -2414,7 +2414,7 @@
2414
2414
  ],
2415
2415
  "last_threat_review": "2026-05-15",
2416
2416
  "signature": "e/kij7GtKaytROyIj7V5RH+FC9WtmVFzrmG2kIlNDNn29ep/CRNlIQKwXLpzo/81AIf634pmdr1qy/+vwIuUDA==",
2417
- "signed_at": "2026-05-28T07:04:55.428Z",
2417
+ "signed_at": "2026-05-28T08:19:15.382Z",
2418
2418
  "forward_watch": [
2419
2419
  "AWS IAM Identity Center session-policy refresh and step-up-on-admin enforcement (anticipated 2026-H2 release)",
2420
2420
  "GCP Workload Identity Federation principal-set attribute mapping tightening (post-2026 Q3 Federation hardening guide)",
@@ -2508,7 +2508,7 @@
2508
2508
  ],
2509
2509
  "last_threat_review": "2026-05-15",
2510
2510
  "signature": "ew9Kglc9fAZzbn0ZIfGP7WSK/j4eV2VhSvpy+s5bEfNEVYIMa2kZjnGBapgUsyGDLes9H9K2ovjQyX17+GKiBw==",
2511
- "signed_at": "2026-05-28T07:04:55.428Z",
2511
+ "signed_at": "2026-05-28T08:19:15.383Z",
2512
2512
  "forward_watch": [
2513
2513
  "Entra ID conditional access evolution post-Midnight Blizzard — Microsoft's 2025-2026 commitments on legacy-tenant MFA enforcement and OAuth-app consent gating",
2514
2514
  "Okta IPSIE (Interoperability Profile for Secure Identity in the Enterprise) OpenID Foundation working-group output and adoption timeline",
@@ -2526,6 +2526,6 @@
2526
2526
  ],
2527
2527
  "manifest_signature": {
2528
2528
  "algorithm": "Ed25519",
2529
- "signature_base64": "38HHa8K5JN9lQ00Kixq0jyhwDA7kVGCkR+IUp+0klY03KqT2hayYiYkx7um4HTM2b7AI07fYviICvOSVsEOrAw=="
2529
+ "signature_base64": "hdHy5abd3+PYvjLw8fytTazfY/PVb1FEMyZE+9HhftqTCEOu7+7ZXpeitXw+iXl4QF+sMM48lvoFehCl6DREAg=="
2530
2530
  }
2531
2531
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blamejs/exceptd-skills",
3
- "version": "0.14.24",
3
+ "version": "0.14.26",
4
4
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 42 skills, 11 catalogs (406 CVEs / 171 CWEs / 805 ATT&CK + ICS / 170 ATLAS / 468 D3FEND / 8888 RFCs), 35 jurisdictions, 10-class catalog gap detector + budget gate, real XML parser + canonical-form diff + content-pattern regression detection, Ed25519-signed.",
5
5
  "keywords": [
6
6
  "ai-security",
package/sbom.cdx.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "bomFormat": "CycloneDX",
3
3
  "specVersion": "1.6",
4
- "serialNumber": "urn:uuid:7fe49d81-d720-4402-a328-7813530feea1",
4
+ "serialNumber": "urn:uuid:5961c60c-cda7-4811-a1a9-c8e34779f276",
5
5
  "version": 1,
6
6
  "metadata": {
7
- "timestamp": "2093-12-29T08:42:41.000Z",
7
+ "timestamp": "2073-07-09T05:58:36.000Z",
8
8
  "tools": [
9
9
  {
10
10
  "vendor": "blamejs",
11
11
  "name": "scripts/refresh-sbom.js",
12
- "version": "0.14.24"
12
+ "version": "0.14.26"
13
13
  }
14
14
  ],
15
15
  "component": {
16
- "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.14.24",
16
+ "bom-ref": "pkg:npm/@blamejs/exceptd-skills@0.14.26",
17
17
  "type": "application",
18
18
  "name": "@blamejs/exceptd-skills",
19
- "version": "0.14.24",
19
+ "version": "0.14.26",
20
20
  "description": "AI security skills grounded in mid-2026 threat reality, not stale framework documentation. 42 skills, 11 catalogs (406 CVEs / 171 CWEs / 805 ATT&CK + ICS / 170 ATLAS / 468 D3FEND / 8888 RFCs), 35 jurisdictions, 10-class catalog gap detector + budget gate, real XML parser + canonical-form diff + content-pattern regression detection, Ed25519-signed.",
21
21
  "licenses": [
22
22
  {
@@ -25,17 +25,17 @@
25
25
  }
26
26
  }
27
27
  ],
28
- "purl": "pkg:npm/%40blamejs/exceptd-skills@0.14.24",
28
+ "purl": "pkg:npm/%40blamejs/exceptd-skills@0.14.26",
29
29
  "hashes": [
30
30
  {
31
31
  "alg": "SHA-256",
32
- "content": "59feff90946b680d632c733662b9afa53fe813ec89eb96a12efee794544466df"
32
+ "content": "6a561a1ced89ca5c27d3d75fa264e8d783526153845340cc228aeac53f43e7f6"
33
33
  }
34
34
  ],
35
35
  "externalReferences": [
36
36
  {
37
37
  "type": "distribution",
38
- "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.14.24"
38
+ "url": "https://www.npmjs.com/package/@blamejs/exceptd-skills/v/0.14.26"
39
39
  },
40
40
  {
41
41
  "type": "vcs",
@@ -116,11 +116,11 @@
116
116
  "hashes": [
117
117
  {
118
118
  "alg": "SHA-256",
119
- "content": "76928b5893158897abb5a115b1108a7edf1128571edd0e2fcad90ea275b2eb4d"
119
+ "content": "b45a8eacd5c13c3e8334683e17ea499a2b1efb490ea0738d15f1529be7220a50"
120
120
  },
121
121
  {
122
122
  "alg": "SHA3-512",
123
- "content": "c90557b3b58f4b5c4e13abead01971c71af6e81ec6739b59a9e81ec89bf64df9a854600b665276f2a16794c097656b8cb179caafc3837ff265479ffdf4be9be8"
123
+ "content": "de1a9a90f30c8b1e6ab205cca7e167ab11a0e2b73e9a98920cf6950b2a2c1742a0559f37c45dfc1053e6994c449ae8843edeedcff9d4f61b691e1c3836331ecb"
124
124
  }
125
125
  ]
126
126
  },
@@ -941,11 +941,11 @@
941
941
  "hashes": [
942
942
  {
943
943
  "alg": "SHA-256",
944
- "content": "bdb569b022a878bce913771058c93982dfb928eb12a8ecb5ef7b91eff5745f79"
944
+ "content": "ae6ef41b1dccf1acfba10f0e94ea4ed682009b2576a5647b1ee3b759c1271650"
945
945
  },
946
946
  {
947
947
  "alg": "SHA3-512",
948
- "content": "1a3c169c1e8306034f67c73561d3ffc141bf5320bd15515ea34d2a5edd40f93e78733c6c7be48a3f2c2d69d7af046ba0767a237a4b397812b1e763f457637a7e"
948
+ "content": "63bd9b061d637793dffc3cb786f505e2f1ac92bfe2ae8776045d8d9158fda1604b5a6142aef2754a968f9257b39145e5faa2bfe58e8936ffca756cea66581aa0"
949
949
  }
950
950
  ]
951
951
  },
@@ -1121,11 +1121,11 @@
1121
1121
  "hashes": [
1122
1122
  {
1123
1123
  "alg": "SHA-256",
1124
- "content": "3fb88752e34869fec0d16bafcff3cff0f8b6391303b708b2a49269243292bd30"
1124
+ "content": "1a9efca30ac6136044868fe427552e4b861ec61a6d3f95c2831b8ca4dbf73e05"
1125
1125
  },
1126
1126
  {
1127
1127
  "alg": "SHA3-512",
1128
- "content": "ee158088d12cb2f4dc8de6509dbfb113602b18e191ca31350787795b373bce346985649c10ff2a6d7c61b828bca5a2ffa2555403ac682ebeeb946ef3164382ca"
1128
+ "content": "02fd06bcc00b5de4cb08c5a55392a4936c793db466595911c9de38717f18fa11af9cdceb01983dd6e56f287f5ccd8cbffc52ba40b99ff7b6ac81f9a7a8fca81d"
1129
1129
  }
1130
1130
  ]
1131
1131
  },
@@ -1751,11 +1751,11 @@
1751
1751
  "hashes": [
1752
1752
  {
1753
1753
  "alg": "SHA-256",
1754
- "content": "9e161d19bbce1ad9a15ca37bcb6e561bf51a6394ee3b02b458951ffd4e840ab6"
1754
+ "content": "f555d900f5b76a676f1ecab9b8697831c1d9c67301f0a475b830e6c8d6b55d05"
1755
1755
  },
1756
1756
  {
1757
1757
  "alg": "SHA3-512",
1758
- "content": "a7f36263781e09eb65dd25af650c3ebfc2d86e27c031a701bb5cf279137496f9af63ab77c2fe5a60a6d14ce24d3dce3f418728d20a1f4e33e07675e1a4437369"
1758
+ "content": "1024639e6bab17b5e680d3cf56afd8e12f6a7ff24c3440dbafcacc14b0169ecac8cbef17b983ed98bab57c3646963426835daa62ac2ccef3ed3dfbcc56eabdf0"
1759
1759
  }
1760
1760
  ]
1761
1761
  },