@blamejs/pki 0.6.13 → 0.6.15
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 +22 -1
- package/README.md +1 -1
- package/index.js +1 -1
- package/lib/acme.js +59 -815
- package/lib/asn1-der.js +7 -245
- package/lib/attrcert-sign.js +12 -260
- package/lib/attrcert-verify.js +1 -7
- package/lib/byte-reader.js +0 -8
- package/lib/byte-writer.js +0 -11
- package/lib/cbor-det.js +0 -54
- package/lib/cmc-build.js +15 -357
- package/lib/cmc-verify.js +6 -239
- package/lib/cmp-build.js +41 -317
- package/lib/cmp-session.js +73 -760
- package/lib/cmp-verify.js +32 -488
- package/lib/cms-compress.js +3 -32
- package/lib/cms-decrypt.js +29 -294
- package/lib/cms-encrypt.js +14 -234
- package/lib/cms-sign.js +29 -324
- package/lib/cms-verify.js +9 -500
- package/lib/composite-kem.js +2 -102
- package/lib/composite-sig.js +1 -77
- package/lib/constants.js +0 -249
- package/lib/crl-sign.js +9 -237
- package/lib/crl-verify.js +1 -10
- package/lib/crmf-sign.js +19 -198
- package/lib/crmf-verify.js +1 -12
- package/lib/csr-sign.js +3 -34
- package/lib/csr-verify.js +1 -12
- package/lib/ct.js +28 -253
- package/lib/edwards-point.js +10 -44
- package/lib/est.js +28 -764
- package/lib/framework-error.js +4 -182
- package/lib/guard-all.js +1 -58
- package/lib/guard-async.js +1 -36
- package/lib/guard-bytes.js +6 -650
- package/lib/guard-compress.js +5 -102
- package/lib/guard-crypto.js +1 -40
- package/lib/guard-der.js +2 -93
- package/lib/guard-encoding.js +2 -60
- package/lib/guard-header.js +1 -36
- package/lib/guard-identifier.js +7 -531
- package/lib/guard-intrinsic.js +1 -150
- package/lib/guard-json.js +10 -73
- package/lib/guard-limits.js +1 -77
- package/lib/guard-list.js +1 -49
- package/lib/guard-name.js +3 -209
- package/lib/guard-parsed.js +7 -335
- package/lib/guard-range.js +1 -71
- package/lib/guard-secret.js +1 -102
- package/lib/guard-text.js +1 -64
- package/lib/guard-time.js +1 -97
- package/lib/hpke.js +3 -105
- package/lib/http-digest.js +14 -142
- package/lib/http-retry-after.js +1 -47
- package/lib/http-transport.js +21 -131
- package/lib/inspect.js +30 -284
- package/lib/ip-utils.js +6 -47
- package/lib/jose.js +7 -142
- package/lib/key.js +2 -67
- package/lib/lint.js +9 -194
- package/lib/merkle.js +1 -27
- package/lib/mime.js +9 -82
- package/lib/ocsp-request-verify.js +1 -14
- package/lib/ocsp-verify.js +1 -82
- package/lib/ocsp.js +11 -169
- package/lib/oid.js +5 -337
- package/lib/path-validate.js +103 -1492
- package/lib/pbes2.js +2 -89
- package/lib/pkcs12-build.js +31 -379
- package/lib/pki-build.js +64 -290
- package/lib/rc2.js +2 -18
- package/lib/rfc3339.js +4 -27
- package/lib/scep.js +59 -233
- package/lib/schema-all.js +0 -122
- package/lib/schema-attrcert.js +4 -146
- package/lib/schema-c509.js +153 -802
- package/lib/schema-cmc.js +5 -220
- package/lib/schema-cmp.js +2 -223
- package/lib/schema-cms.js +13 -427
- package/lib/schema-crl.js +5 -68
- package/lib/schema-crmf.js +6 -167
- package/lib/schema-csr.js +1 -54
- package/lib/schema-csrattrs.js +2 -87
- package/lib/schema-engine.js +0 -152
- package/lib/schema-ocsp.js +0 -117
- package/lib/schema-pkcs12.js +2 -93
- package/lib/schema-pkcs8.js +3 -35
- package/lib/schema-pkix.js +24 -655
- package/lib/schema-smime.js +0 -54
- package/lib/schema-tsp.js +3 -99
- package/lib/schema-x509.js +4 -63
- package/lib/shbs.js +11 -95
- package/lib/sign-scheme.js +2 -97
- package/lib/sigstore.js +9 -169
- package/lib/sleep.js +2 -8
- package/lib/smime.js +15 -408
- package/lib/tls-cert-compress.js +0 -62
- package/lib/trust.js +19 -185
- package/lib/tsp-sign.js +16 -270
- package/lib/validator-all.js +1 -30
- package/lib/validator-attcert.js +2 -46
- package/lib/validator-cose.js +2 -153
- package/lib/validator-keydesc.js +1 -37
- package/lib/validator-sig.js +1 -46
- package/lib/validator-tls.js +1 -88
- package/lib/validator-tpm.js +19 -122
- package/lib/verify-seam.js +1 -24
- package/lib/webauthn-mds.js +3 -400
- package/lib/webauthn.js +12 -833
- package/lib/webcrypto.js +5 -485
- package/lib/x509-sign.js +4 -108
- package/package.json +1 -1
- package/sbom.cdx.json +6 -6
package/lib/cms-compress.js
CHANGED
|
@@ -1,19 +1,8 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
// Copyright (c) blamejs contributors
|
|
3
3
|
"use strict";
|
|
4
|
-
//
|
|
5
|
-
// @internal -- the pki.cms.compress / pki.cms.decompress implementation. The operator-facing
|
|
4
|
+
// @internal
|
|
6
5
|
// @module pki.cms + the @primitive blocks live in cms-verify.js, which re-exports these (the
|
|
7
|
-
// cms-encrypt.js / cms-decrypt.js model).
|
|
8
|
-
//
|
|
9
|
-
// CMS CompressedData (RFC 3274) -- the size-transform content type. compress ZLIB-compresses
|
|
10
|
-
// (RFC 1950 / RFC 1951) the content and wraps it as a CompressedData ContentInfo; decompress parses
|
|
11
|
-
// one (over the shipped strict schema-cms parser), enforces version 0 + id-alg-zlibCompress +
|
|
12
|
-
// absent-or-NULL params (RFC 3274 sec. 2), and BOUNDED-inflates the eContent. There is NO crypto
|
|
13
|
-
// here -- CompressedData provides no integrity / confidentiality / authentication (RFC 8551 sec.
|
|
14
|
-
// 2.4.5); it is purely a size transform. The one load-bearing defense is the decompression-bomb
|
|
15
|
-
// cap: inflate stops at C.LIMITS.COMPRESS_MAX_BYTES before the output is materialized (a
|
|
16
|
-
// resource-exhaustion defense, CWE-409), and every zlib fault collapses to a uniform typed error.
|
|
17
6
|
|
|
18
7
|
var zlib = require("zlib");
|
|
19
8
|
var oid = require("./oid");
|
|
@@ -29,12 +18,8 @@ function O(n) { return oid.byName(n); }
|
|
|
29
18
|
function _err(code, message, cause) { return new CmsError(code, message, cause); }
|
|
30
19
|
|
|
31
20
|
var OID_ZLIB = O("id-alg-zlibCompress");
|
|
32
|
-
// The NULL params DER (0x05 0x00) -- the one non-absent encoding RFC 3274 sec. 2 permits (MAY be NULL).
|
|
33
21
|
var NULL_PARAMS_DER = Buffer.from([0x05, 0x00]);
|
|
34
22
|
|
|
35
|
-
// Compress `content` and wrap it as a CMS CompressedData ContentInfo (RFC 3274 sec. 1.1): version 0,
|
|
36
|
-
// compressionAlgorithm = id-alg-zlibCompress with ABSENT parameters, encapContentInfo = { eContentType
|
|
37
|
-
// (default id-data), eContent = the RFC 1950 ZLIB stream }.
|
|
38
23
|
async function compress(content, opts) {
|
|
39
24
|
opts = opts || {};
|
|
40
25
|
var raw = guard.bytes.source(content, CmsError, "cms/bad-input", "content");
|
|
@@ -48,29 +33,25 @@ async function compress(content, opts) {
|
|
|
48
33
|
catch (e) { throw _err("cms/bad-input", "the content could not be compressed (check opts.level)", e); }
|
|
49
34
|
var cd = b.sequence([
|
|
50
35
|
b.integer(0),
|
|
51
|
-
b.sequence([b.oid(OID_ZLIB)]),
|
|
36
|
+
b.sequence([b.oid(OID_ZLIB)]),
|
|
52
37
|
b.sequence([b.oid(ctOid), b.explicit(0, b.octetString(stream))]),
|
|
53
38
|
]);
|
|
54
39
|
var ci = b.sequence([b.oid(O("compressedData")), b.explicit(0, cd)]);
|
|
55
40
|
return opts.pem ? schemaCms.pemEncode(ci, "CMS") : ci;
|
|
56
41
|
}
|
|
57
42
|
|
|
58
|
-
// Parse a CMS CompressedData and recover its content. Requires contentTypeName == compressedData,
|
|
59
|
-
// version 0 (enforced by the parser), compressionAlgorithm == id-alg-zlibCompress with absent-or-NULL
|
|
60
|
-
// params, and a present eContent; then BOUNDED-inflates. Every failure is a typed CmsError.
|
|
61
43
|
async function decompress(input, opts) {
|
|
62
44
|
opts = opts || {};
|
|
63
45
|
var cap = C.LIMITS.COMPRESS_MAX_BYTES;
|
|
64
46
|
if (opts.maxOutputBytes !== undefined) {
|
|
65
47
|
var mo = opts.maxOutputBytes;
|
|
66
48
|
if (typeof mo !== "number" || !isFinite(mo) || mo <= 0 || Math.floor(mo) !== mo) throw _err("cms/bad-input", "opts.maxOutputBytes must be a positive integer");
|
|
67
|
-
if (mo < cap) cap = mo;
|
|
49
|
+
if (mo < cap) cap = mo;
|
|
68
50
|
}
|
|
69
51
|
var parsed = schemaCms.parse(_toDer(input));
|
|
70
52
|
if (parsed.contentTypeName !== "compressedData") throw _err("cms/unsupported-content-type", "input is not a CMS CompressedData (got " + parsed.contentTypeName + ")");
|
|
71
53
|
var alg = parsed.compressionAlgorithm;
|
|
72
54
|
if (alg.oid !== OID_ZLIB) throw _err("cms/unsupported-algorithm", "unsupported compressionAlgorithm " + (alg.name || alg.oid) + " (only id-alg-zlibCompress, RFC 3274 sec. 2)");
|
|
73
|
-
// RFC 3274 sec. 2: the parameters SHOULD be omitted but MAY be NULL. Reject any other encoding.
|
|
74
55
|
if (alg.parameters != null && Buffer.compare(alg.parameters, NULL_PARAMS_DER) !== 0) throw _err("cms/bad-algorithm-parameters", "id-alg-zlibCompress parameters must be absent or NULL (RFC 3274 sec. 2)");
|
|
75
56
|
var eci = parsed.encapContentInfo;
|
|
76
57
|
if (eci.eContent == null) throw _err("cms/no-encapsulated-content", "the CompressedData carries no encapsulated content (a detached CompressedData cannot be decompressed)");
|
|
@@ -79,8 +60,6 @@ async function decompress(input, opts) {
|
|
|
79
60
|
content: content,
|
|
80
61
|
contentType: eci.eContentType,
|
|
81
62
|
contentTypeName: oid.name(eci.eContentType) || eci.eContentType,
|
|
82
|
-
// Coverage residual: reaching here requires alg.oid === id-alg-zlibCompress (line above), which is
|
|
83
|
-
// always a registered name, so the `|| alg.oid` fallback is a defensive belt, never selected.
|
|
84
63
|
compressionAlgorithm: alg.name || alg.oid,
|
|
85
64
|
};
|
|
86
65
|
}
|
|
@@ -91,14 +70,6 @@ function _toDer(input) {
|
|
|
91
70
|
throw _err("cms/bad-input", "input must be a DER Buffer, Uint8Array, or PEM string");
|
|
92
71
|
}
|
|
93
72
|
|
|
94
|
-
// Inflate the RFC 1950 ZLIB stream through the shared bounded-decompression guard, which applies
|
|
95
|
-
// the output cap at the decompressor (so a bomb is refused mid-stream, before it is allocated) and
|
|
96
|
-
// requires the whole octet string to be exactly one compressed frame (so trailing bytes cannot give
|
|
97
|
-
// one content a second encoding). This module keeps its own verdict codes: a cap breach is
|
|
98
|
-
// cms/decompress-too-large, every other fault the uniform cms/decompress-failed.
|
|
99
|
-
//
|
|
100
|
-
// `_err` is a factory and the guard calls it as one. Handing it CmsError instead would throw
|
|
101
|
-
// "class cannot be invoked without new" on the rejection path, turning a refusal into a crash.
|
|
102
73
|
function _inflateBounded(stream, cap) {
|
|
103
74
|
var view = guard.bytes.view(stream, CmsError, "cms/decompress-failed", "the compressed content");
|
|
104
75
|
return guard.compress.bounded("zlib", view, cap, _err,
|