@blamejs/pki 0.6.40 → 0.6.41
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 +13 -0
- package/lib/acme.js +24 -13
- package/lib/asn1-der.js +5 -5
- package/lib/attrcert-sign.js +14 -14
- package/lib/cbor-det.js +2 -2
- package/lib/cmc-build.js +16 -16
- package/lib/cmc-verify.js +5 -5
- package/lib/cmp-build.js +29 -19
- package/lib/cmp-session.js +21 -16
- package/lib/cmp-verify.js +4 -4
- package/lib/cms-decrypt.js +8 -8
- package/lib/cms-encrypt.js +22 -22
- package/lib/cms-sign.js +17 -17
- package/lib/cms-verify.js +6 -6
- package/lib/composite-kem.js +1 -1
- package/lib/composite-sig.js +4 -4
- package/lib/constants.js +13 -9
- package/lib/crl-sign.js +17 -17
- package/lib/crmf-sign.js +11 -11
- package/lib/csr-sign.js +2 -2
- package/lib/ct.js +19 -11
- package/lib/edwards-point.js +2 -2
- package/lib/est.js +74 -43
- package/lib/guard-async.js +17 -1
- package/lib/guard-bytes.js +2 -2
- package/lib/guard-compress.js +5 -5
- package/lib/guard-identifier.js +45 -1
- package/lib/guard-name.js +1 -1
- package/lib/guard-time.js +3 -1
- package/lib/hpke.js +10 -10
- package/lib/http-digest.js +2 -2
- package/lib/http-transport.js +3 -3
- package/lib/inspect.js +9 -9
- package/lib/jose.js +14 -14
- package/lib/key.js +7 -7
- package/lib/lint.js +6 -4
- package/lib/merkle.js +2 -2
- package/lib/mime.js +2 -2
- package/lib/ocsp-verify.js +1 -1
- package/lib/ocsp.js +5 -5
- package/lib/oid.js +3 -3
- package/lib/path-validate.js +32 -22
- package/lib/pbes2.js +2 -2
- package/lib/pkcs12-build.js +15 -15
- package/lib/pki-build.js +2 -2
- package/lib/scep.js +47 -16
- package/lib/schema-all.js +1 -1
- package/lib/schema-attrcert.js +4 -3
- package/lib/schema-c509.js +23 -23
- package/lib/schema-cmc.js +6 -6
- package/lib/schema-cmp.js +3 -3
- package/lib/schema-cms.js +15 -8
- package/lib/schema-crmf.js +1 -1
- package/lib/schema-csr.js +1 -1
- package/lib/schema-engine.js +2 -1
- package/lib/schema-pkcs12.js +1 -1
- package/lib/schema-pkix.js +3 -0
- package/lib/schema-tsp.js +2 -2
- package/lib/shbs.js +2 -2
- package/lib/sign-scheme.js +9 -9
- package/lib/sigstore.js +9 -8
- package/lib/smime.js +12 -12
- package/lib/tls-cert-compress.js +6 -6
- package/lib/trust.js +9 -9
- package/lib/tsp-sign.js +11 -11
- package/lib/validator-attcert.js +2 -2
- package/lib/validator-cose.js +5 -5
- package/lib/validator-sig.js +3 -3
- package/lib/validator-tpm.js +5 -4
- package/lib/webauthn.js +12 -12
- package/lib/webcrypto.js +22 -14
- package/lib/x509-sign.js +8 -8
- package/package.json +1 -1
- package/sbom.cdx.json +6 -6
package/lib/webauthn.js
CHANGED
|
@@ -59,7 +59,7 @@ function _ucmp(a, b) {
|
|
|
59
59
|
return Buffer.compare(strip(a), strip(b)) === 0;
|
|
60
60
|
}
|
|
61
61
|
function _isInteger(node) { return !!node && !node.constructed && node.tagClass === "universal" && node.tagNumber === asn1.TAGS.INTEGER; }
|
|
62
|
-
var COSE_ALG_HASH = { "-7": "sha256", "-9": "sha256", "-257": "sha256", "-37": "sha256", "-35": "sha384", "-51": "sha384", "-258": "sha384", "-38": "sha384", "-36": "sha512", "-52": "sha512", "-259": "sha512", "-39": "sha512", "-65535": "sha1" };
|
|
62
|
+
var COSE_ALG_HASH = intrinsic.assign(intrinsic.create(null), { "-7": "sha256", "-9": "sha256", "-257": "sha256", "-37": "sha256", "-35": "sha384", "-51": "sha384", "-258": "sha384", "-38": "sha384", "-36": "sha512", "-52": "sha512", "-259": "sha512", "-39": "sha512", "-65535": "sha1" });
|
|
63
63
|
function _coseAlgHash(alg, E) {
|
|
64
64
|
var h = COSE_ALG_HASH[String(alg)];
|
|
65
65
|
if (!h) throw E("webauthn/unsupported-algorithm", "no hash mapping for COSE algorithm " + alg);
|
|
@@ -154,7 +154,7 @@ function parseCoseKey(bytes) {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
|
|
157
|
-
var COSE_ALG = {
|
|
157
|
+
var COSE_ALG = intrinsic.assign(intrinsic.create(null), {
|
|
158
158
|
"-7": { imp: { name: "ECDSA", namedCurve: "P-256" }, verify: { name: "ECDSA", hash: "SHA-256" }, ecdsa: 32 },
|
|
159
159
|
"-35": { imp: { name: "ECDSA", namedCurve: "P-384" }, verify: { name: "ECDSA", hash: "SHA-384" }, ecdsa: 48 },
|
|
160
160
|
"-36": { imp: { name: "ECDSA", namedCurve: "P-521" }, verify: { name: "ECDSA", hash: "SHA-512" }, ecdsa: 66 },
|
|
@@ -171,7 +171,7 @@ var COSE_ALG = {
|
|
|
171
171
|
"-38": { imp: { name: "RSA-PSS", hash: "SHA-384" }, verify: { name: "RSA-PSS", saltLength: 48 }, ecdsa: 0 },
|
|
172
172
|
"-39": { imp: { name: "RSA-PSS", hash: "SHA-512" }, verify: { name: "RSA-PSS", saltLength: 64 }, ecdsa: 0 },
|
|
173
173
|
"-65535": { imp: { name: "RSASSA-PKCS1-v1_5", hash: "SHA-1" }, verify: { name: "RSASSA-PKCS1-v1_5" }, ecdsa: 0 },
|
|
174
|
-
};
|
|
174
|
+
});
|
|
175
175
|
|
|
176
176
|
function _derEcdsaToRaw(der, curve) { return validator.sig.ecdsaDerToP1363(der, curve, WebauthnError, "webauthn/bad-signature"); }
|
|
177
177
|
|
|
@@ -186,7 +186,7 @@ function _verifySig(alg, sig, spkiBytes, message, E) {
|
|
|
186
186
|
.then(function (key) { return subtle.verify(ver, key, s, message); })
|
|
187
187
|
.catch(function (e) { throw _err("webauthn/verify-error", "the attestation signature could not be evaluated", e); });
|
|
188
188
|
}
|
|
189
|
-
var ED_OID_NAME =
|
|
189
|
+
var ED_OID_NAME = intrinsic.create(null);
|
|
190
190
|
ED_OID_NAME[oid.byName("Ed25519")] = "Ed25519";
|
|
191
191
|
ED_OID_NAME[oid.byName("Ed448")] = "Ed448";
|
|
192
192
|
function _edName(spkiBytes, E) {
|
|
@@ -325,7 +325,7 @@ function _attRead(map, key, reader, what) {
|
|
|
325
325
|
function _algOf(attStmt) { return Number(_attRead(attStmt, "alg", cbor.read.int, "an integer")); }
|
|
326
326
|
function _sigOf(attStmt) { return _attRead(attStmt, "sig", cbor.read.byteString, "a byte string"); }
|
|
327
327
|
function _requireAttShape(attStmt, allowed, required) {
|
|
328
|
-
var have =
|
|
328
|
+
var have = intrinsic.create(null);
|
|
329
329
|
cbor.read.map(attStmt).forEach(function (kv) {
|
|
330
330
|
if (kv[0].majorType !== 3) throw _err("webauthn/bad-att-stmt", "the attestation statement has a non-text-string field key");
|
|
331
331
|
have[cbor.read.textString(kv[0])] = true;
|
|
@@ -333,7 +333,7 @@ function _requireAttShape(attStmt, allowed, required) {
|
|
|
333
333
|
Object.keys(have).forEach(function (k) { if (allowed.indexOf(k) === -1) throw _err("webauthn/bad-att-stmt", "the attestation statement carries an unexpected field '" + k + "'"); });
|
|
334
334
|
required.forEach(function (k) { if (!have[k]) throw _err("webauthn/bad-att-stmt", "the attestation statement is missing the '" + k + "' field"); });
|
|
335
335
|
}
|
|
336
|
-
var ATT_STMT_MAJOR = { compound: 4 };
|
|
336
|
+
var ATT_STMT_MAJOR = intrinsic.assign(intrinsic.create(null), { compound: 4 });
|
|
337
337
|
|
|
338
338
|
var _AAGUID_SIGNED_BY_FMT = Object.assign(Object.create(null), { "fido-u2f": false });
|
|
339
339
|
function _aaguidIsSigned(fmt) { return _AAGUID_SIGNED_BY_FMT[fmt] !== false; }
|
|
@@ -353,7 +353,7 @@ function _cloneParsed(v, depth) {
|
|
|
353
353
|
if (Array.isArray(v)) return v.map(function (x) { return _cloneParsed(x, depth + 1); });
|
|
354
354
|
if (guard.time.isDate(v)) return new Date(guard.time.instantOf(v));
|
|
355
355
|
if (v && typeof v === "object") {
|
|
356
|
-
var out =
|
|
356
|
+
var out = intrinsic.create(null);
|
|
357
357
|
Object.keys(v).forEach(function (k) { out[k] = _cloneParsed(v[k], depth + 1); });
|
|
358
358
|
return out;
|
|
359
359
|
}
|
|
@@ -501,13 +501,13 @@ function _readX5c(attStmt) {
|
|
|
501
501
|
try { return x509.parse(der); } catch (e) { throw _err("webauthn/bad-att-stmt", "an x5c certificate is not a well-formed X.509 certificate", e); }
|
|
502
502
|
});
|
|
503
503
|
}
|
|
504
|
-
var _exts = { find: _findExt, decode: _decodeExt };
|
|
504
|
+
var _exts = intrinsic.assign(intrinsic.create(null), { find: _findExt, decode: _decodeExt });
|
|
505
505
|
function _requireV3(cert) { validator.attcert.requireV3(cert, WebauthnError, "webauthn/bad-att-cert"); }
|
|
506
506
|
function _checkPackedCert(cert) { validator.attcert.packedCert(cert, _exts, WebauthnError, "webauthn/bad-att-cert"); }
|
|
507
507
|
function _checkAikCert(cert) { validator.attcert.aikCert(cert, _exts, WebauthnError, "webauthn/bad-att-cert"); }
|
|
508
508
|
function _checkAaguidExt(cert, aaguid) { validator.attcert.aaguidExt(cert, aaguid, _exts, WebauthnError, "webauthn/bad-att-cert", "webauthn/aaguid-mismatch"); }
|
|
509
509
|
|
|
510
|
-
var VERIFIERS = {
|
|
510
|
+
var VERIFIERS = intrinsic.assign(intrinsic.create(null), {
|
|
511
511
|
packed: function (att, clientDataHash) {
|
|
512
512
|
var isX5c = !!cbor.read.mapGet(att.attStmt, "x5c");
|
|
513
513
|
_requireAttShape(att.attStmt, isX5c ? ["alg", "sig", "x5c"] : ["alg", "sig"], isX5c ? ["alg", "sig", "x5c"] : ["alg", "sig"]);
|
|
@@ -722,7 +722,7 @@ var VERIFIERS = {
|
|
|
722
722
|
}
|
|
723
723
|
return Promise.resolve(_result("none", "None", [], att));
|
|
724
724
|
},
|
|
725
|
-
};
|
|
725
|
+
});
|
|
726
726
|
|
|
727
727
|
function _isPlainObject(v) { return !!v && typeof v === "object" && !Array.isArray(v); }
|
|
728
728
|
|
|
@@ -1473,7 +1473,7 @@ var _ASSERT_OPTS = Object.assign(Object.create(null), {
|
|
|
1473
1473
|
function _snapshotAssertion(input) {
|
|
1474
1474
|
if (!_isPlainObject(input)) throw _err("webauthn/bad-input", "pki.webauthn.verifyAssertion takes an options object");
|
|
1475
1475
|
guard.identifier.assertKnownKeys(input, _ASSERT_OPTS, _err, "webauthn/bad-input", "verifyAssertion input has an unknown key ");
|
|
1476
|
-
var out =
|
|
1476
|
+
var out = intrinsic.create(null), k;
|
|
1477
1477
|
for (k in input) { if (_hasOwn(input, k)) out[k] = input[k]; }
|
|
1478
1478
|
["authenticatorData", "clientDataJSON", "clientDataHash", "signature", "expectedChallenge"].forEach(function (f) {
|
|
1479
1479
|
if (_isBufferSource(out[f])) out[f] = guard.bytes.snapshotSource(out[f], WebauthnError, "webauthn/bad-input", f);
|
|
@@ -1482,7 +1482,7 @@ function _snapshotAssertion(input) {
|
|
|
1482
1482
|
out.credentialPublicKey = guard.bytes.snapshotSource(out.credentialPublicKey, WebauthnError,
|
|
1483
1483
|
"webauthn/bad-input", "credentialPublicKey");
|
|
1484
1484
|
} else if (_isPlainObject(out.credentialPublicKey)) {
|
|
1485
|
-
var key =
|
|
1485
|
+
var key = intrinsic.create(null), kk;
|
|
1486
1486
|
for (kk in out.credentialPublicKey) {
|
|
1487
1487
|
if (!_hasOwn(out.credentialPublicKey, kk)) continue;
|
|
1488
1488
|
var v;
|
package/lib/webcrypto.js
CHANGED
|
@@ -116,7 +116,7 @@ function _normalizeAlg(algorithm, who) {
|
|
|
116
116
|
if (!alg || typeof alg.name !== "string") {
|
|
117
117
|
throw new WebCryptoError("webcrypto/syntax", (who || "operation") + ": algorithm must be a string or an object with a name");
|
|
118
118
|
}
|
|
119
|
-
var out =
|
|
119
|
+
var out = intrinsic.create(null);
|
|
120
120
|
for (var k in alg) { if (_hasOwn(alg, k)) out[k] = alg[k]; }
|
|
121
121
|
out.name = _toUpperCase(alg.name);
|
|
122
122
|
return out;
|
|
@@ -125,7 +125,7 @@ function _normalizeAlg(algorithm, who) {
|
|
|
125
125
|
var _STD_ALG_NAME = intrinsic.assign(intrinsic.create(null), { "RSASSA-PKCS1-V1_5": "RSASSA-PKCS1-v1_5", "ED25519": "Ed25519", "ED448": "Ed448" });
|
|
126
126
|
function _stdName(name) { return _STD_ALG_NAME[name] || name; }
|
|
127
127
|
|
|
128
|
-
var HASH_NODE = {
|
|
128
|
+
var HASH_NODE = intrinsic.assign(intrinsic.create(null), {
|
|
129
129
|
"SHA-1": "sha1",
|
|
130
130
|
"SHA-224": "sha224",
|
|
131
131
|
"SHA-256": "sha256",
|
|
@@ -134,12 +134,12 @@ var HASH_NODE = {
|
|
|
134
134
|
"SHA3-256": "sha3-256",
|
|
135
135
|
"SHA3-384": "sha3-384",
|
|
136
136
|
"SHA3-512": "sha3-512",
|
|
137
|
-
};
|
|
137
|
+
});
|
|
138
138
|
|
|
139
|
-
var XOF_NODE = {
|
|
139
|
+
var XOF_NODE = intrinsic.assign(intrinsic.create(null), {
|
|
140
140
|
"SHAKE128": { node: "shake128", length: 32 },
|
|
141
141
|
"SHAKE256": { node: "shake256", length: 64 },
|
|
142
|
-
};
|
|
142
|
+
});
|
|
143
143
|
|
|
144
144
|
function _hashNode(h, who) {
|
|
145
145
|
var name = (typeof h === "string") ? h : (h && h.name);
|
|
@@ -148,10 +148,10 @@ function _hashNode(h, who) {
|
|
|
148
148
|
return node;
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
var HMAC_BLOCK_BITS = {
|
|
151
|
+
var HMAC_BLOCK_BITS = intrinsic.assign(intrinsic.create(null), {
|
|
152
152
|
"SHA-1": 512, "SHA-256": 512, "SHA-384": 1024, "SHA-512": 1024,
|
|
153
153
|
"SHA3-256": 1088, "SHA3-384": 832, "SHA3-512": 576,
|
|
154
|
-
};
|
|
154
|
+
});
|
|
155
155
|
|
|
156
156
|
function _hmacLengthBits(alg, who) {
|
|
157
157
|
var name = (typeof alg.hash === "string") ? alg.hash : (alg.hash && alg.hash.name);
|
|
@@ -859,7 +859,7 @@ function _nodeKey(fn, who) {
|
|
|
859
859
|
}
|
|
860
860
|
}
|
|
861
861
|
|
|
862
|
-
var ML_KEM_INNER =
|
|
862
|
+
var ML_KEM_INNER = intrinsic.create(null);
|
|
863
863
|
["id-ml-kem-512", "id-ml-kem-768", "id-ml-kem-1024"].forEach(function (n) {
|
|
864
864
|
var row = oid.kemParams(n);
|
|
865
865
|
ML_KEM_INNER[oid.byName(n)] = { ek: row.ek, dk: row.dk };
|
|
@@ -891,7 +891,7 @@ function _validateMlKemInner(innerBytes, sizes) {
|
|
|
891
891
|
throw new WebCryptoError("webcrypto/data", "an ML-KEM private key must be the seed, expandedKey, or both CHOICE (RFC 9935 sec. 6)");
|
|
892
892
|
}
|
|
893
893
|
|
|
894
|
-
var PKCS8_INNER_VALIDATORS =
|
|
894
|
+
var PKCS8_INNER_VALIDATORS = intrinsic.create(null);
|
|
895
895
|
_forEach(_keys(ML_KEM_INNER), function (o) { PKCS8_INNER_VALIDATORS[o] = function (inner) { _validateMlKemInner(inner, ML_KEM_INNER[o]); }; });
|
|
896
896
|
|
|
897
897
|
function _preValidatePkcs8(p8, name) {
|
|
@@ -974,14 +974,22 @@ function _importRawPublic(name, alg, raw, extractable, usages) {
|
|
|
974
974
|
throw new WebCryptoError("webcrypto/not-supported", "importKey raw: unsupported public-key algorithm " + _stringify(name));
|
|
975
975
|
}
|
|
976
976
|
|
|
977
|
+
/** @internal Each inner set is asked whether it holds the key's own type, so it answers from its own
|
|
978
|
+
* entries alone: a type naming an Object.prototype member would otherwise resolve to a truthy
|
|
979
|
+
* inherited value and pass a key the algorithm does not accept. */
|
|
980
|
+
function _typeSet(names) {
|
|
981
|
+
var t = intrinsic.create(null);
|
|
982
|
+
_forEach(names, function (n) { t[n] = 1; });
|
|
983
|
+
return t;
|
|
984
|
+
}
|
|
977
985
|
var IMPORT_KEY_TYPE = intrinsic.assign(intrinsic.create(null), {
|
|
978
|
-
"RSASSA-PKCS1-V1_5":
|
|
979
|
-
"ECDSA":
|
|
980
|
-
"ED25519":
|
|
981
|
-
"X25519":
|
|
986
|
+
"RSASSA-PKCS1-V1_5": _typeSet(["rsa"]), "RSA-PSS": _typeSet(["rsa", "rsa-pss"]), "RSA-OAEP": _typeSet(["rsa"]),
|
|
987
|
+
"ECDSA": _typeSet(["ec"]), "ECDH": _typeSet(["ec"]),
|
|
988
|
+
"ED25519": _typeSet(["ed25519"]), "ED448": _typeSet(["ed448"]),
|
|
989
|
+
"X25519": _typeSet(["x25519"]), "X448": _typeSet(["x448"]),
|
|
982
990
|
});
|
|
983
991
|
[ML_DSA_NODE, ML_KEM_NODE, SLH_DSA_NODE].forEach(function (m) {
|
|
984
|
-
_forEach(_keys(m), function (webName) {
|
|
992
|
+
_forEach(_keys(m), function (webName) { IMPORT_KEY_TYPE[webName] = _typeSet([m[webName]]); });
|
|
985
993
|
});
|
|
986
994
|
function _algFromImport(name, alg, keyObject) {
|
|
987
995
|
var wantType = IMPORT_KEY_TYPE[name];
|
package/lib/x509-sign.js
CHANGED
|
@@ -40,18 +40,18 @@ function O(n) { return oid.byName(n); }
|
|
|
40
40
|
|
|
41
41
|
var OID_SKI = O("subjectKeyIdentifier");
|
|
42
42
|
|
|
43
|
-
var KNOWN_SPEC_KEYS = {
|
|
43
|
+
var KNOWN_SPEC_KEYS = intrinsic.assign(intrinsic.create(null), {
|
|
44
44
|
subject: 1, subjectPublicKey: 1, notBefore: 1, notAfter: 1, serialNumber: 1, extensions: 1,
|
|
45
|
-
};
|
|
46
|
-
var KNOWN_ISSUER_CERT_KEYS = { key: 1, cert: 1 };
|
|
47
|
-
var KNOWN_ISSUER_EXPLICIT_KEYS = { key: 1, name: 1, publicKey: 1 };
|
|
48
|
-
var KNOWN_SIGN_OPTS = { digestAlgorithm: 1, pem: 1, pss: 1 };
|
|
45
|
+
});
|
|
46
|
+
var KNOWN_ISSUER_CERT_KEYS = intrinsic.assign(intrinsic.create(null), { key: 1, cert: 1 });
|
|
47
|
+
var KNOWN_ISSUER_EXPLICIT_KEYS = intrinsic.assign(intrinsic.create(null), { key: 1, name: 1, publicKey: 1 });
|
|
48
|
+
var KNOWN_SIGN_OPTS = intrinsic.assign(intrinsic.create(null), { digestAlgorithm: 1, pem: 1, pss: 1 });
|
|
49
49
|
|
|
50
|
-
var KNOWN_EXT_KEYS = {
|
|
50
|
+
var KNOWN_EXT_KEYS = intrinsic.assign(intrinsic.create(null), {
|
|
51
51
|
subjectKeyIdentifier: 1, authorityKeyIdentifier: 1, keyUsage: 1, keyUsageCritical: 1,
|
|
52
52
|
extendedKeyUsage: 1, extendedKeyUsageCritical: 1, basicConstraints: 1, subjectAltName: 1,
|
|
53
53
|
certificatePolicies: 1, certificatePoliciesCritical: 1,
|
|
54
|
-
};
|
|
54
|
+
});
|
|
55
55
|
|
|
56
56
|
var _b = pkiBuild.makeBuilder({ ErrorClass: CertificateError, prefix: "x509", O: O, NS: NS, NAME_SCHEMA: NAME_SCHEMA, SPKI_SCHEMA: SPKI_SCHEMA, EXT_DECODERS: EXT_DECODERS });
|
|
57
57
|
var _encodeName = _b.encodeName, _isEmptyName = _b.isEmptyName, _reqDer = _b.reqDer,
|
|
@@ -80,7 +80,7 @@ function _akiKeyId(val, ctx) {
|
|
|
80
80
|
function _buildExtensions(extSpec, ctx) {
|
|
81
81
|
if (extSpec == null) return [];
|
|
82
82
|
if (_isArray(extSpec)) {
|
|
83
|
-
var seenExt =
|
|
83
|
+
var seenExt = intrinsic.create(null), arrCa = false, arrKeyCertSign = false, arrPathLen = false;
|
|
84
84
|
var oidBc = O("basicConstraints"), oidKu = O("keyUsage");
|
|
85
85
|
var arr = extSpec.map(function (e, i) {
|
|
86
86
|
var der = _reqDer(e, "extension");
|
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:c14ed2d9-f3d5-4322-88e1-51afbe3a3fbe",
|
|
6
6
|
"version": 1,
|
|
7
7
|
"metadata": {
|
|
8
|
-
"timestamp": "2026-09-
|
|
8
|
+
"timestamp": "2026-09-06T02:19:25.175Z",
|
|
9
9
|
"lifecycles": [
|
|
10
10
|
{
|
|
11
11
|
"phase": "build"
|
|
@@ -19,14 +19,14 @@
|
|
|
19
19
|
}
|
|
20
20
|
],
|
|
21
21
|
"component": {
|
|
22
|
-
"bom-ref": "@blamejs/pki@0.6.
|
|
22
|
+
"bom-ref": "@blamejs/pki@0.6.41",
|
|
23
23
|
"type": "application",
|
|
24
24
|
"name": "pki",
|
|
25
|
-
"version": "0.6.
|
|
25
|
+
"version": "0.6.41",
|
|
26
26
|
"scope": "required",
|
|
27
27
|
"author": "blamejs contributors",
|
|
28
28
|
"description": "Pure-JavaScript PKI toolkit that owns its stack — X.509, ASN.1/DER, CMS, PQC-first.",
|
|
29
|
-
"purl": "pkg:npm/%40blamejs/pki@0.6.
|
|
29
|
+
"purl": "pkg:npm/%40blamejs/pki@0.6.41",
|
|
30
30
|
"properties": [],
|
|
31
31
|
"externalReferences": [
|
|
32
32
|
{
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"components": [],
|
|
55
55
|
"dependencies": [
|
|
56
56
|
{
|
|
57
|
-
"ref": "@blamejs/pki@0.6.
|
|
57
|
+
"ref": "@blamejs/pki@0.6.41",
|
|
58
58
|
"dependsOn": []
|
|
59
59
|
}
|
|
60
60
|
]
|