@blamejs/core 0.18.46 → 0.18.48
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 +40 -0
- package/lib/codepoint-class.js +31 -3
- package/lib/gate-contract.js +256 -2
- package/lib/guard-archive.js +18 -0
- package/lib/guard-auth.js +28 -0
- package/lib/guard-cidr.js +19 -0
- package/lib/guard-country.js +4 -4
- package/lib/guard-csv.js +31 -2
- package/lib/guard-domain.js +22 -0
- package/lib/guard-email.js +18 -0
- package/lib/guard-filename.js +46 -11
- package/lib/guard-graphql.js +16 -0
- package/lib/guard-html.js +21 -0
- package/lib/guard-image.js +19 -0
- package/lib/guard-json.js +24 -0
- package/lib/guard-jsonpath.js +14 -1
- package/lib/guard-jwt.js +20 -2
- package/lib/guard-markdown.js +26 -0
- package/lib/guard-mime.js +15 -5
- package/lib/guard-oauth.js +23 -0
- package/lib/guard-pdf.js +19 -1
- package/lib/guard-regex.js +16 -1
- package/lib/guard-shell.js +14 -1
- package/lib/guard-svg.js +18 -0
- package/lib/guard-template.js +14 -1
- package/lib/guard-text.js +21 -1
- package/lib/guard-time.js +20 -4
- package/lib/guard-uuid.js +28 -4
- package/lib/guard-xml.js +20 -0
- package/lib/guard-yaml.js +29 -2
- package/lib/network-dns.js +25 -12
- package/package.json +1 -1
- package/sbom.cdx.json +6 -6
package/lib/guard-template.js
CHANGED
|
@@ -228,7 +228,7 @@ function _detectIssues(input, opts) {
|
|
|
228
228
|
* bidiPolicy: "reject"|"audit"|"allow",
|
|
229
229
|
* controlPolicy: "reject"|"audit"|"allow",
|
|
230
230
|
* nullBytePolicy: "reject"|"audit"|"allow",
|
|
231
|
-
* zeroWidthPolicy: "reject"|"
|
|
231
|
+
* zeroWidthPolicy: "reject"|"audit"|"allow",
|
|
232
232
|
* jinjaPolicy: "reject"|"audit"|"allow",
|
|
233
233
|
* erbPolicy: "reject"|"audit"|"allow",
|
|
234
234
|
* pugPolicy: "reject"|"audit"|"allow",
|
|
@@ -316,7 +316,20 @@ var INTEGRATION_FIXTURES = gateContract.identifierFixtures("Hello world", "Hello
|
|
|
316
316
|
// factory default serve -> audit-only -> refuse chain; ctxFields names the
|
|
317
317
|
// ctx fields it reads (ctx.identifier, then ctx.text) so untrusted strings on
|
|
318
318
|
// either field reach the SSTI validator before any engine renders them.
|
|
319
|
+
// Each policy's vocabulary, so a misspelling is a boot error rather than a
|
|
320
|
+
// runtime surprise. Read leniently, a typo takes whichever branch is not the
|
|
321
|
+
// strict one: `jinjaPolicy: "rejct"` is not "allow", so the check runs, and it
|
|
322
|
+
// is not "reject" either, so the finding drops to a warning.
|
|
323
|
+
//
|
|
324
|
+
// The character policies are absent on purpose — they are derived for the
|
|
325
|
+
// whole guard family, and an entry here would shadow that derivation.
|
|
326
|
+
var POLICY_ENUM = gateContract.policyVocabulary([
|
|
327
|
+
"jinjaPolicy", "erbPolicy", "pugPolicy", "dollarBracePolicy",
|
|
328
|
+
"velocityDirectivePolicy",
|
|
329
|
+
], gateContract.POLICY_VALUES.rejectAuditAllow);
|
|
330
|
+
|
|
319
331
|
module.exports = gateContract.defineGuard({
|
|
332
|
+
enumOpts: POLICY_ENUM,
|
|
320
333
|
name: "template",
|
|
321
334
|
kind: "identifier",
|
|
322
335
|
errorClass: GuardTemplateError,
|
package/lib/guard-text.js
CHANGED
|
@@ -118,6 +118,20 @@ var COMPLIANCE_POSTURES = gateContract.compliancePostures(PROFILES, { base: 256
|
|
|
118
118
|
// so this guard's hand-bound resolver holds a caller to the same rules the
|
|
119
119
|
// generated validate() does. maxRuntimeMs is deliberately absent: zero there
|
|
120
120
|
// means no runtime budget. See guard-image for the full reasoning.
|
|
121
|
+
// Each policy's vocabulary, so a misspelling is a boot error rather than a
|
|
122
|
+
// runtime surprise. Read leniently, a typo takes whichever branch is not the
|
|
123
|
+
// strict one: `encodingPolicy: "rejct"` is not "allow", so the check runs, and
|
|
124
|
+
// it is not "reject" either, so malformed UTF-8 drops to a warning.
|
|
125
|
+
var POLICY_ENUM = gateContract.policyVocabulary(
|
|
126
|
+
["confusablePolicy", "encodingPolicy"],
|
|
127
|
+
gateContract.POLICY_VALUES.rejectAuditAllow);
|
|
128
|
+
|
|
129
|
+
// The same table for the entry points that bind their own resolver, with the
|
|
130
|
+
// family's character policies folded in — defineGuard adds those itself, a
|
|
131
|
+
// hand-bound resolver has to be given them.
|
|
132
|
+
var RESOLVER_ENUMS = Object.freeze(Object.assign({},
|
|
133
|
+
gateContract.charPolicyEnums(DEFAULTS, { canRepair: true }), POLICY_ENUM));
|
|
134
|
+
|
|
121
135
|
var INT_OPTS = ["maxBytes"];
|
|
122
136
|
|
|
123
137
|
// ---- Internal helpers ----
|
|
@@ -129,9 +143,13 @@ function _resolveOpts(opts) {
|
|
|
129
143
|
defaults: DEFAULTS,
|
|
130
144
|
errorClass: GuardTextError,
|
|
131
145
|
errCodePrefix: "text",
|
|
132
|
-
// Own resolver, own cap declaration — see guard-image.gate.
|
|
146
|
+
// Own resolver, own cap declaration — see guard-image.gate. The policy
|
|
147
|
+
// vocabulary comes with it for the same reason: a hand-bound resolver that
|
|
148
|
+
// omits it accepts `bidiPolicy: "rejct"` on gate() and validate() while the
|
|
149
|
+
// generated path refuses it.
|
|
133
150
|
intOpts: INT_OPTS,
|
|
134
151
|
nonNegativeOpts: gateContract.capKeysOf(DEFAULTS),
|
|
152
|
+
enumOpts: RESOLVER_ENUMS,
|
|
135
153
|
});
|
|
136
154
|
}
|
|
137
155
|
|
|
@@ -571,8 +589,10 @@ var INTEGRATION_FIXTURES = Object.freeze({
|
|
|
571
589
|
// inspection surface (validate / sanitize / gate). The bespoke `gate` carries
|
|
572
590
|
// the text sanitize-then-refuse chain (confusables are non-repairable).
|
|
573
591
|
module.exports = gateContract.defineGuard({
|
|
592
|
+
enumOpts: POLICY_ENUM,
|
|
574
593
|
name: "text",
|
|
575
594
|
kind: "content",
|
|
595
|
+
charRepair: true,
|
|
576
596
|
errorClass: GuardTextError,
|
|
577
597
|
profiles: PROFILES,
|
|
578
598
|
defaults: DEFAULTS,
|
package/lib/guard-time.js
CHANGED
|
@@ -299,10 +299,10 @@ function _detectIssues(input, opts) {
|
|
|
299
299
|
* @opts
|
|
300
300
|
* profile: "strict"|"balanced"|"permissive",
|
|
301
301
|
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
302
|
-
* bidiPolicy: "reject"|"
|
|
303
|
-
* controlPolicy: "reject"|"
|
|
304
|
-
* nullBytePolicy: "reject"|"
|
|
305
|
-
* zeroWidthPolicy: "reject"|"
|
|
302
|
+
* bidiPolicy: "reject"|"audit"|"allow",
|
|
303
|
+
* controlPolicy: "reject"|"audit"|"allow",
|
|
304
|
+
* nullBytePolicy: "reject"|"audit"|"allow",
|
|
305
|
+
* zeroWidthPolicy: "reject"|"audit"|"allow",
|
|
306
306
|
* naiveDatetimePolicy: "reject"|"audit"|"allow",
|
|
307
307
|
* nonUtcOffsetPolicy: "reject"|"audit"|"allow",
|
|
308
308
|
* leapSecondPolicy: "reject"|"audit"|"allow",
|
|
@@ -393,7 +393,23 @@ var INTEGRATION_FIXTURES = gateContract.identifierFixtures("2026-05-05T12:34:56Z
|
|
|
393
393
|
// surface (validate / sanitize). The gate is the factory default — the
|
|
394
394
|
// standard serve -> audit-only -> refuse chain — reading
|
|
395
395
|
// ctx.identifier / ctx.timestamp / ctx.time via ctxFields.
|
|
396
|
+
// Each policy's vocabulary, so a misspelling is a boot error rather than a
|
|
397
|
+
// runtime surprise. Read leniently, a typo takes whichever branch is not the
|
|
398
|
+
// strict one: `naiveDatetimePolicy: "rejct"` is not "allow", so the check
|
|
399
|
+
// runs, and it is not "reject" either, so a zone-less timestamp drops to a
|
|
400
|
+
// warning.
|
|
401
|
+
//
|
|
402
|
+
// `fractionalDigitsPolicy` carries "truncate" because over-precise fractional
|
|
403
|
+
// seconds are the one finding here that can be repaired rather than reported.
|
|
404
|
+
var POLICY_ENUM = gateContract.policyVocabulary([
|
|
405
|
+
"naiveDatetimePolicy", "nonUtcOffsetPolicy", "leapSecondPolicy",
|
|
406
|
+
"dateOnlyPolicy", "timeOnlyPolicy",
|
|
407
|
+
], gateContract.POLICY_VALUES.rejectAuditAllow, {
|
|
408
|
+
fractionalDigitsPolicy: ["reject", "truncate", "audit", "audit-only", "allow"],
|
|
409
|
+
});
|
|
410
|
+
|
|
396
411
|
module.exports = gateContract.defineGuard({
|
|
412
|
+
enumOpts: POLICY_ENUM,
|
|
397
413
|
name: "time",
|
|
398
414
|
kind: "identifier",
|
|
399
415
|
errorClass: GuardTimeError,
|
package/lib/guard-uuid.js
CHANGED
|
@@ -286,10 +286,10 @@ function _detectIssues(input, opts) {
|
|
|
286
286
|
* @opts
|
|
287
287
|
* profile: "strict"|"balanced"|"permissive",
|
|
288
288
|
* compliancePosture: "hipaa"|"pci-dss"|"gdpr"|"soc2",
|
|
289
|
-
* bidiPolicy: "reject"|"
|
|
290
|
-
* controlPolicy: "reject"|"
|
|
291
|
-
* nullBytePolicy: "reject"|"
|
|
292
|
-
* zeroWidthPolicy: "reject"|"
|
|
289
|
+
* bidiPolicy: "reject"|"audit"|"allow",
|
|
290
|
+
* controlPolicy: "reject"|"audit"|"allow",
|
|
291
|
+
* nullBytePolicy: "reject"|"audit"|"allow",
|
|
292
|
+
* zeroWidthPolicy: "reject"|"audit"|"allow",
|
|
293
293
|
* formatPolicy: "hyphenated"|"hyphenless"|"braced"|"urn"|"hyphenated-only"|"any",
|
|
294
294
|
* versionPolicy: "reject-unassigned"|"audit"|"allow",
|
|
295
295
|
* variantPolicy: "reject-non-rfc"|"audit"|"allow",
|
|
@@ -371,10 +371,34 @@ var INTEGRATION_FIXTURES = gateContract.identifierFixtures("550e8400-e29b-41d4-a
|
|
|
371
371
|
// surface (validate / sanitize). The gate is the factory default — the
|
|
372
372
|
// standard serve -> audit-only -> refuse chain — reading ctx.identifier ||
|
|
373
373
|
// ctx.uuid via ctxFields.
|
|
374
|
+
// Each policy's vocabulary, so a misspelling is a boot error rather than a
|
|
375
|
+
// runtime surprise. Read leniently, a typo takes whichever branch is not the
|
|
376
|
+
// strict one: `versionPolicy: "reject-unassinged"` is not "allow", so the check
|
|
377
|
+
// runs, and it is not the reject spelling either, so the finding drops to a
|
|
378
|
+
// warning — the operator asked to refuse an unassigned version and silently got
|
|
379
|
+
// an audit. The values are the ones written beside each profile entry above,
|
|
380
|
+
// confirmed against what the code compares.
|
|
381
|
+
//
|
|
382
|
+
// `audit-only` rides with `audit` because it behaves identically here and the
|
|
383
|
+
// framework treats them as synonyms everywhere else; refusing it here while
|
|
384
|
+
// accepting it elsewhere would be a fresh disagreement between two spellings of
|
|
385
|
+
// one setting.
|
|
386
|
+
var POLICY_ENUM = gateContract.policyVocabulary([
|
|
387
|
+
"nilPolicy", "maxPolicy", "urnPolicy", "bracedPolicy",
|
|
388
|
+
], gateContract.POLICY_VALUES.rejectAuditAllow, {
|
|
389
|
+
// These three name their own values because their findings are not "this
|
|
390
|
+
// construct appeared" but "the identifier is the wrong shape", and the
|
|
391
|
+
// refusal has to say which shape it wanted.
|
|
392
|
+
formatPolicy: ["hyphenated", "hyphenless", "braced", "urn", "hyphenated-only", "any"],
|
|
393
|
+
versionPolicy: ["reject-unassigned", "audit", "audit-only", "allow"],
|
|
394
|
+
variantPolicy: ["reject-non-rfc", "audit", "audit-only", "allow"],
|
|
395
|
+
});
|
|
396
|
+
|
|
374
397
|
module.exports = gateContract.defineGuard({
|
|
375
398
|
name: "uuid",
|
|
376
399
|
kind: "identifier",
|
|
377
400
|
errorClass: GuardUuidError,
|
|
401
|
+
enumOpts: POLICY_ENUM,
|
|
378
402
|
profiles: PROFILES,
|
|
379
403
|
defaults: DEFAULTS,
|
|
380
404
|
postures: COMPLIANCE_POSTURES,
|
package/lib/guard-xml.js
CHANGED
|
@@ -733,9 +733,29 @@ var INTEGRATION_FIXTURES = Object.freeze({
|
|
|
733
733
|
// ENTITY / external / parameter-entity throwing while strip-able char-class
|
|
734
734
|
// threats are repaired. The bespoke `gate` carries XML's per-policy
|
|
735
735
|
// canSanitize matrix unchanged.
|
|
736
|
+
// Each policy's vocabulary, so a misspelling is a boot error rather than a
|
|
737
|
+
// runtime surprise. Read leniently, a typo takes whichever branch is not the
|
|
738
|
+
// strict one: `externalEntityPolicy: "rejct"` is not "allow", so the check
|
|
739
|
+
// runs, and it is not "reject" either, so an XXE vector drops to a warning.
|
|
740
|
+
//
|
|
741
|
+
// `xmlDsigPolicy` has no "reject": a signature block is a legitimate part of a
|
|
742
|
+
// signed document, so the guard reports its presence and leaves verification
|
|
743
|
+
// to the caller rather than refusing the document for carrying one.
|
|
744
|
+
//
|
|
745
|
+
// The character policies are absent on purpose — they are derived for the
|
|
746
|
+
// whole guard family, and an entry here would shadow that derivation.
|
|
747
|
+
var POLICY_ENUM = gateContract.policyVocabulary([
|
|
748
|
+
"doctypePolicy", "entityPolicy", "externalEntityPolicy", "xincludePolicy",
|
|
749
|
+
"processingInstrPolicy", "cdataPolicy", "schemaLocationPolicy",
|
|
750
|
+
], gateContract.POLICY_VALUES.rejectAuditAllow, {
|
|
751
|
+
xmlDsigPolicy: ["audit", "audit-only", "allow"],
|
|
752
|
+
});
|
|
753
|
+
|
|
736
754
|
var _guard = module.exports = gateContract.defineGuard({
|
|
755
|
+
enumOpts: POLICY_ENUM,
|
|
737
756
|
name: "xml",
|
|
738
757
|
kind: "content",
|
|
758
|
+
charRepair: true,
|
|
739
759
|
errorClass: GuardXmlError,
|
|
740
760
|
profiles: PROFILES,
|
|
741
761
|
defaults: DEFAULTS,
|
package/lib/guard-yaml.js
CHANGED
|
@@ -262,6 +262,25 @@ var COMPLIANCE_POSTURES = gateContract.compliancePostures(PROFILES, { base: 256
|
|
|
262
262
|
// The options that are genuinely CAPS, where zero is not a setting — named once
|
|
263
263
|
// so this guard's hand-bound parse() and gate() hold a caller to the same rules
|
|
264
264
|
// the generated validate() does. See guard-image for the full reasoning.
|
|
265
|
+
// Each policy's vocabulary, so a misspelling is a boot error rather than a
|
|
266
|
+
// runtime surprise. Read leniently, a typo takes whichever branch is not the
|
|
267
|
+
// strict one: `aliasPolicy: "rejct"` is not "allow", so the check runs, and it
|
|
268
|
+
// is not "reject" either, so a billion-laughs alias drops to a warning.
|
|
269
|
+
//
|
|
270
|
+
// `audit-only` is absent: tagPolicy tests for "audit" exactly, and a guard
|
|
271
|
+
// whose policies do not all take the same values is worse than one that takes
|
|
272
|
+
// fewer.
|
|
273
|
+
var POLICY_ENUM = gateContract.policyVocabulary([
|
|
274
|
+
"tagPolicy", "aliasPolicy", "multiDocPolicy", "norwayPolicy",
|
|
275
|
+
"leadingZeroPolicy", "duplicateKeyPolicy", "mergeKeyPolicy",
|
|
276
|
+
], ["reject", "audit", "allow"]);
|
|
277
|
+
|
|
278
|
+
// The same table for the entry points that bind their own resolver, with the
|
|
279
|
+
// family's character policies folded in — defineGuard adds those itself, a
|
|
280
|
+
// hand-bound resolver has to be given them.
|
|
281
|
+
var RESOLVER_ENUMS = Object.freeze(Object.assign({},
|
|
282
|
+
gateContract.charPolicyEnums(DEFAULTS, { canRepair: true }), POLICY_ENUM));
|
|
283
|
+
|
|
265
284
|
var INT_OPTS = ["maxBytes", "maxDepth", "maxAnchors", "maxAliasDepth",
|
|
266
285
|
"maxDocuments", "maxNodes", "maxScalarLength"];
|
|
267
286
|
|
|
@@ -648,9 +667,12 @@ function parse(input, opts) {
|
|
|
648
667
|
defaults: DEFAULTS,
|
|
649
668
|
errorClass: GuardYamlError,
|
|
650
669
|
errCodePrefix: "yaml",
|
|
651
|
-
// Own resolver, own cap declaration — see guard-image.gate.
|
|
670
|
+
// Own resolver, own cap declaration — see guard-image.gate. The policy
|
|
671
|
+
// vocabulary comes with it: a hand-bound resolver that omits it accepts
|
|
672
|
+
// `bidiPolicy: "rejct"` here while the generated path refuses it.
|
|
652
673
|
intOpts: INT_OPTS,
|
|
653
674
|
nonNegativeOpts: gateContract.capKeysOf(DEFAULTS),
|
|
675
|
+
enumOpts: RESOLVER_ENUMS,
|
|
654
676
|
});
|
|
655
677
|
if (typeof input !== "string") {
|
|
656
678
|
throw _err("yaml.bad-input", "parse requires string input");
|
|
@@ -797,9 +819,12 @@ function gate(opts) {
|
|
|
797
819
|
defaults: DEFAULTS,
|
|
798
820
|
errorClass: GuardYamlError,
|
|
799
821
|
errCodePrefix: "yaml",
|
|
800
|
-
// Own resolver, own cap declaration — see guard-image.gate.
|
|
822
|
+
// Own resolver, own cap declaration — see guard-image.gate. The policy
|
|
823
|
+
// vocabulary comes with it: a hand-bound resolver that omits it accepts
|
|
824
|
+
// `bidiPolicy: "rejct"` here while the generated path refuses it.
|
|
801
825
|
intOpts: INT_OPTS,
|
|
802
826
|
nonNegativeOpts: gateContract.capKeysOf(DEFAULTS),
|
|
827
|
+
enumOpts: RESOLVER_ENUMS,
|
|
803
828
|
});
|
|
804
829
|
return gateContract.buildContentGate({
|
|
805
830
|
name: opts.name || "guardYaml:" + (opts.profile || "default"),
|
|
@@ -811,8 +836,10 @@ function gate(opts) {
|
|
|
811
836
|
}
|
|
812
837
|
|
|
813
838
|
module.exports = gateContract.defineGuard({
|
|
839
|
+
enumOpts: POLICY_ENUM,
|
|
814
840
|
name: "yaml",
|
|
815
841
|
kind: "content",
|
|
842
|
+
charRepair: true,
|
|
816
843
|
errorClass: GuardYamlError,
|
|
817
844
|
profiles: PROFILES,
|
|
818
845
|
defaults: DEFAULTS,
|
package/lib/network-dns.js
CHANGED
|
@@ -2086,8 +2086,13 @@ function isNullMx(mxRecords) {
|
|
|
2086
2086
|
* Classify a DNSKEY / RRSIG algorithm number against the IANA DNS
|
|
2087
2087
|
* Security Algorithm Numbers registry, flagging SHA-1-based and
|
|
2088
2088
|
* other deprecated algorithms per RFC 9905 (Deprecating DNSSEC
|
|
2089
|
-
* SHA-1 Usage), RFC
|
|
2090
|
-
*
|
|
2089
|
+
* SHA-1 Usage), RFC 9904 (Algorithm Implementation Requirements,
|
|
2090
|
+
* which obsoletes RFC 8624), and RFC 6725 (RSAMD5 deprecation).
|
|
2091
|
+
*
|
|
2092
|
+
* `deprecated` answers "should this still be accepted", so it follows
|
|
2093
|
+
* the VALIDATION requirement. Where a spelling differs between signing
|
|
2094
|
+
* and validation — RSASHA512 is NOT RECOMMENDED to sign with but MUST
|
|
2095
|
+
* still validate — the `reason` names both, since one boolean cannot.
|
|
2091
2096
|
*
|
|
2092
2097
|
* Returns `{ algorithm, name, deprecated, reason, known }` for any
|
|
2093
2098
|
* IANA-assigned number; `known: false` for unassigned numbers
|
|
@@ -2123,18 +2128,22 @@ function isNullMx(mxRecords) {
|
|
|
2123
2128
|
// auditing DNSSEC chain-of-trust evidence know they cannot validate
|
|
2124
2129
|
// the entry against a public algorithm registry.
|
|
2125
2130
|
var DNSKEY_ALGORITHMS = Object.freeze({
|
|
2126
|
-
1: { name: "RSAMD5", deprecated: true, reason: "MD5 broken (RFC
|
|
2131
|
+
1: { name: "RSAMD5", deprecated: true, reason: "MD5 broken; deprecated for zone signing (RFC 6725 §2.2)" },
|
|
2127
2132
|
2: { name: "DH", deprecated: true, reason: "Diffie-Hellman key (RFC 2539) — never widely deployed; superseded by signature algorithms" },
|
|
2128
|
-
3: { name: "DSA", deprecated: true, reason: "DSA
|
|
2133
|
+
3: { name: "DSA", deprecated: true, reason: "DSA MUST NOT be used for signing or validation (RFC 9904 Table 2)" },
|
|
2129
2134
|
4: { name: "Reserved", deprecated: true, reason: "Reserved (RFC 4034 §A.1) — not for production use" },
|
|
2130
2135
|
5: { name: "RSASHA1", deprecated: true, reason: "SHA-1 deprecated (RFC 9905 §3)" },
|
|
2131
|
-
6: { name: "DSA-NSEC3-SHA1", deprecated: true, reason: "SHA-1 deprecated (RFC 9905 §3); DSA
|
|
2136
|
+
6: { name: "DSA-NSEC3-SHA1", deprecated: true, reason: "SHA-1 deprecated (RFC 9905 §3); DSA MUST NOT be used (RFC 9904 Table 2)" },
|
|
2132
2137
|
7: { name: "RSASHA1-NSEC3-SHA1", deprecated: true, reason: "SHA-1 deprecated (RFC 9905 §3)" },
|
|
2133
2138
|
8: { name: "RSASHA256", deprecated: false, reason: "current — RFC 5702" }, // IANA DNSKEY algorithm number
|
|
2134
2139
|
9: { name: "Reserved", deprecated: true, reason: "Reserved (RFC 5155) — not for production use" },
|
|
2135
|
-
|
|
2140
|
+
// Not deprecated — validation is still MUST, so a caller deciding whether to
|
|
2141
|
+
// ACCEPT a zone must keep accepting it. But it is NOT RECOMMENDED to sign
|
|
2142
|
+
// with, and reporting it as plainly "current" answered a signing question
|
|
2143
|
+
// with the opposite of what the current RFC says.
|
|
2144
|
+
10: { name: "RSASHA512", deprecated: false, reason: "defined in RFC 5702; RFC 9904 Table 2 — signing NOT RECOMMENDED, validation MUST" },
|
|
2136
2145
|
11: { name: "Reserved", deprecated: true, reason: "Reserved (RFC 5155) — not for production use" },
|
|
2137
|
-
12: { name: "ECC-GOST", deprecated: true, reason: "
|
|
2146
|
+
12: { name: "ECC-GOST", deprecated: true, reason: "MUST NOT be used for signing (RFC 9904 Table 2)" },
|
|
2138
2147
|
13: { name: "ECDSAP256SHA256", deprecated: false, reason: "current — RFC 6605" },
|
|
2139
2148
|
14: { name: "ECDSAP384SHA384", deprecated: false, reason: "current — RFC 6605" },
|
|
2140
2149
|
15: { name: "ED25519", deprecated: false, reason: "current — RFC 8080" },
|
|
@@ -2173,15 +2182,19 @@ var DNSKEY_ALGORITHMS = Object.freeze({
|
|
|
2173
2182
|
* // → { digestType: 2, name: "SHA-256", deprecated: false, ... }
|
|
2174
2183
|
*/
|
|
2175
2184
|
|
|
2176
|
-
// DS digest-type vocabulary (RFC 4034 §5.1 + RFC 6605 §6 + RFC
|
|
2177
|
-
//
|
|
2178
|
-
// §4
|
|
2179
|
-
//
|
|
2185
|
+
// DS digest-type vocabulary (RFC 4034 §5.1 + RFC 6605 §6 + RFC 9904
|
|
2186
|
+
// Table 3 + RFC 9558). Digest type 1 = SHA-1 is deprecated per RFC 9905
|
|
2187
|
+
// §4 — RFC 9904 Table 3 spells it MUST NOT for delegation and MUST for
|
|
2188
|
+
// validation, so `deprecated` follows the delegation side here for the
|
|
2189
|
+
// same reason it follows validation in the DNSKEY table: that is the
|
|
2190
|
+
// side an operator can still choose. Digest types 5 (GOST R 34.11-2012)
|
|
2191
|
+
// and 6 (SM3) added by RFC 9558. Reserved value 0 surfaced for
|
|
2192
|
+
// completeness.
|
|
2180
2193
|
var DS_DIGEST_TYPES = Object.freeze({
|
|
2181
2194
|
0: { name: "Reserved", deprecated: true, reason: "Reserved (RFC 3658) — not for production use" },
|
|
2182
2195
|
1: { name: "SHA-1", deprecated: true, reason: "SHA-1 deprecated (RFC 9905 §4)" },
|
|
2183
2196
|
2: { name: "SHA-256", deprecated: false, reason: "current — RFC 4509" },
|
|
2184
|
-
3: { name: "GOST R 34.11-94", deprecated: true, reason: "
|
|
2197
|
+
3: { name: "GOST R 34.11-94", deprecated: true, reason: "MUST NOT be used for delegation (RFC 9904 Table 3); superseded by GOST 2012 in RFC 9558" },
|
|
2185
2198
|
4: { name: "SHA-384", deprecated: false, reason: "current — RFC 6605 §6" },
|
|
2186
2199
|
5: { name: "GOST R 34.11-2012", deprecated: false, reason: "current — RFC 9558 §3" },
|
|
2187
2200
|
6: { name: "SM3", deprecated: false, reason: "current — RFC 9558 §3 (Chinese national standard)" },
|
package/package.json
CHANGED
package/sbom.cdx.json
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"$schema": "http://cyclonedx.org/schema/bom-1.5.schema.json",
|
|
3
3
|
"bomFormat": "CycloneDX",
|
|
4
4
|
"specVersion": "1.5",
|
|
5
|
-
"serialNumber": "urn:uuid:
|
|
5
|
+
"serialNumber": "urn:uuid:a63c2af3-b9b9-4c06-b74a-dd7049ac3f6c",
|
|
6
6
|
"version": 1,
|
|
7
7
|
"metadata": {
|
|
8
|
-
"timestamp": "2026-08-
|
|
8
|
+
"timestamp": "2026-08-22T16:44:54.517Z",
|
|
9
9
|
"lifecycles": [
|
|
10
10
|
{
|
|
11
11
|
"phase": "build"
|
|
@@ -19,14 +19,14 @@
|
|
|
19
19
|
}
|
|
20
20
|
],
|
|
21
21
|
"component": {
|
|
22
|
-
"bom-ref": "@blamejs/core@0.18.
|
|
22
|
+
"bom-ref": "@blamejs/core@0.18.48",
|
|
23
23
|
"type": "application",
|
|
24
24
|
"name": "blamejs",
|
|
25
|
-
"version": "0.18.
|
|
25
|
+
"version": "0.18.48",
|
|
26
26
|
"scope": "required",
|
|
27
27
|
"author": "blamejs contributors",
|
|
28
28
|
"description": "The Node framework that owns its stack.",
|
|
29
|
-
"purl": "pkg:npm/%40blamejs/core@0.18.
|
|
29
|
+
"purl": "pkg:npm/%40blamejs/core@0.18.48",
|
|
30
30
|
"properties": [],
|
|
31
31
|
"externalReferences": [
|
|
32
32
|
{
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"components": [],
|
|
55
55
|
"dependencies": [
|
|
56
56
|
{
|
|
57
|
-
"ref": "@blamejs/core@0.18.
|
|
57
|
+
"ref": "@blamejs/core@0.18.48",
|
|
58
58
|
"dependsOn": []
|
|
59
59
|
}
|
|
60
60
|
]
|