ubid-common 0.1.0
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/LICENSE +21 -0
- package/README.md +20 -0
- package/dist/ParsingEngine.d.ts +3 -0
- package/dist/ParsingEngine.d.ts.map +1 -0
- package/dist/ParsingEngine.js +25 -0
- package/dist/PublicKeyResolverEngine.d.ts +3 -0
- package/dist/PublicKeyResolverEngine.d.ts.map +1 -0
- package/dist/PublicKeyResolverEngine.js +24 -0
- package/dist/VerifyingEngine.d.ts +3 -0
- package/dist/VerifyingEngine.d.ts.map +1 -0
- package/dist/VerifyingEngine.js +27 -0
- package/dist/credential-parsers/MsoMdocParser.d.ts +6 -0
- package/dist/credential-parsers/MsoMdocParser.d.ts.map +1 -0
- package/dist/credential-parsers/MsoMdocParser.js +164 -0
- package/dist/credential-parsers/SDJWTVCParser.d.ts +6 -0
- package/dist/credential-parsers/SDJWTVCParser.d.ts.map +1 -0
- package/dist/credential-parsers/SDJWTVCParser.js +214 -0
- package/dist/credential-verifiers/MsoMdocVerifier.d.ts +8 -0
- package/dist/credential-verifiers/MsoMdocVerifier.d.ts.map +1 -0
- package/dist/credential-verifiers/MsoMdocVerifier.js +213 -0
- package/dist/credential-verifiers/SDJWTVCValidation.d.ts +52 -0
- package/dist/credential-verifiers/SDJWTVCValidation.d.ts.map +1 -0
- package/dist/credential-verifiers/SDJWTVCValidation.js +248 -0
- package/dist/credential-verifiers/SDJWTVCVerifier.d.ts +15 -0
- package/dist/credential-verifiers/SDJWTVCVerifier.d.ts.map +1 -0
- package/dist/credential-verifiers/SDJWTVCVerifier.js +394 -0
- package/dist/defaultHttpClient.d.ts +3 -0
- package/dist/defaultHttpClient.d.ts.map +1 -0
- package/dist/defaultHttpClient.js +18 -0
- package/dist/error.d.ts +134 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +160 -0
- package/dist/functions/convertDataUriToImage.d.ts +2 -0
- package/dist/functions/convertDataUriToImage.d.ts.map +1 -0
- package/dist/functions/convertDataUriToImage.js +38 -0
- package/dist/functions/convertOpenid4vciToSdjwtvcClaims.d.ts +5 -0
- package/dist/functions/convertOpenid4vciToSdjwtvcClaims.d.ts.map +1 -0
- package/dist/functions/convertOpenid4vciToSdjwtvcClaims.js +31 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciClaims.d.ts +11 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciClaims.d.ts.map +1 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciClaims.js +35 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciDisplay.d.ts +19 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciDisplay.d.ts.map +1 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciDisplay.js +56 -0
- package/dist/functions/formatDate.d.ts +2 -0
- package/dist/functions/formatDate.d.ts.map +1 -0
- package/dist/functions/formatDate.js +50 -0
- package/dist/functions/index.d.ts +3 -0
- package/dist/functions/index.d.ts.map +1 -0
- package/dist/functions/index.js +19 -0
- package/dist/functions/openID4VCICredentialRendering.d.ts +5 -0
- package/dist/functions/openID4VCICredentialRendering.d.ts.map +1 -0
- package/dist/functions/openID4VCICredentialRendering.js +93 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/interfaces.d.ts +112 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +3 -0
- package/dist/rendering.d.ts +3 -0
- package/dist/rendering.d.ts.map +1 -0
- package/dist/rendering.js +56 -0
- package/dist/resolvers/RemoteJwksResolver.d.ts +17 -0
- package/dist/resolvers/RemoteJwksResolver.d.ts.map +1 -0
- package/dist/resolvers/RemoteJwksResolver.js +138 -0
- package/dist/schemas/CredentialConfigurationSupportedSchema.d.ts +710 -0
- package/dist/schemas/CredentialConfigurationSupportedSchema.d.ts.map +1 -0
- package/dist/schemas/CredentialConfigurationSupportedSchema.js +60 -0
- package/dist/schemas/CredentialOfferSchema.d.ts +40 -0
- package/dist/schemas/CredentialOfferSchema.d.ts.map +1 -0
- package/dist/schemas/CredentialOfferSchema.js +14 -0
- package/dist/schemas/OpenidAuthorizationServerMetadataSchema.d.ts +49 -0
- package/dist/schemas/OpenidAuthorizationServerMetadataSchema.d.ts.map +1 -0
- package/dist/schemas/OpenidAuthorizationServerMetadataSchema.js +21 -0
- package/dist/schemas/OpenidCredentialIssuerMetadataSchema.d.ts +1030 -0
- package/dist/schemas/OpenidCredentialIssuerMetadataSchema.d.ts.map +1 -0
- package/dist/schemas/OpenidCredentialIssuerMetadataSchema.js +35 -0
- package/dist/schemas/SdJwtVcPayloadSchema.d.ts +79 -0
- package/dist/schemas/SdJwtVcPayloadSchema.d.ts.map +1 -0
- package/dist/schemas/SdJwtVcPayloadSchema.js +27 -0
- package/dist/schemas/SdJwtVcTypeMetadataSchema.d.ts +930 -0
- package/dist/schemas/SdJwtVcTypeMetadataSchema.d.ts.map +1 -0
- package/dist/schemas/SdJwtVcTypeMetadataSchema.js +105 -0
- package/dist/schemas/index.d.ts +6 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +22 -0
- package/dist/status/TokenStatusListVerifier.d.ts +41 -0
- package/dist/status/TokenStatusListVerifier.d.ts.map +1 -0
- package/dist/status/TokenStatusListVerifier.js +410 -0
- package/dist/trust/AlgorithmPolicy.d.ts +27 -0
- package/dist/trust/AlgorithmPolicy.d.ts.map +1 -0
- package/dist/trust/AlgorithmPolicy.js +60 -0
- package/dist/trust/TrustRegistry.d.ts +49 -0
- package/dist/trust/TrustRegistry.d.ts.map +1 -0
- package/dist/trust/TrustRegistry.js +114 -0
- package/dist/types.d.ts +76 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/utils/escapeSVG.d.ts +2 -0
- package/dist/utils/escapeSVG.d.ts.map +1 -0
- package/dist/utils/escapeSVG.js +18 -0
- package/dist/utils/getIssuerMetadata.d.ts +8 -0
- package/dist/utils/getIssuerMetadata.d.ts.map +1 -0
- package/dist/utils/getIssuerMetadata.js +33 -0
- package/dist/utils/getSdJwtVcMetadata.d.ts +12 -0
- package/dist/utils/getSdJwtVcMetadata.d.ts.map +1 -0
- package/dist/utils/getSdJwtVcMetadata.js +274 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/matchLocalizedDisplay.d.ts +6 -0
- package/dist/utils/matchLocalizedDisplay.d.ts.map +1 -0
- package/dist/utils/matchLocalizedDisplay.js +16 -0
- package/dist/utils/util.d.ts +6 -0
- package/dist/utils/util.d.ts.map +1 -0
- package/dist/utils/util.js +53 -0
- package/dist/utils/verifyCertificate.d.ts +2 -0
- package/dist/utils/verifyCertificate.d.ts.map +1 -0
- package/dist/utils/verifyCertificate.js +100 -0
- package/dist/utils/verifySRIFromObject.d.ts +10 -0
- package/dist/utils/verifySRIFromObject.d.ts.map +1 -0
- package/dist/utils/verifySRIFromObject.js +32 -0
- package/dist/utils/verifyX5C.d.ts +11 -0
- package/dist/utils/verifyX5C.d.ts.map +1 -0
- package/dist/utils/verifyX5C.js +19 -0
- package/dist/x509/X509ChainVerifier.d.ts +59 -0
- package/dist/x509/X509ChainVerifier.d.ts.map +1 -0
- package/dist/x509/X509ChainVerifier.js +458 -0
- package/package.json +82 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { X509ChainVerificationError } from "../error";
|
|
2
|
+
import type { Result } from "../types";
|
|
3
|
+
export type X509RevocationStatus = "good" | "revoked" | "unknown";
|
|
4
|
+
export interface X509RevocationCheckInput {
|
|
5
|
+
certificateDer: Uint8Array;
|
|
6
|
+
issuerCertificateDer: Uint8Array;
|
|
7
|
+
validationTime: Date;
|
|
8
|
+
}
|
|
9
|
+
export interface X509RevocationChecker {
|
|
10
|
+
check(input: X509RevocationCheckInput): Promise<X509RevocationStatus>;
|
|
11
|
+
}
|
|
12
|
+
export interface X509ChainVerifierPolicy {
|
|
13
|
+
maxChainLength?: number;
|
|
14
|
+
maxCertificateBytes?: number;
|
|
15
|
+
maxTotalBytes?: number;
|
|
16
|
+
requireDigitalSignatureKeyUsage?: boolean;
|
|
17
|
+
requiredExtendedKeyUsages?: readonly string[];
|
|
18
|
+
requireSubjectAlternativeName?: boolean;
|
|
19
|
+
revocationMode?: "disabled" | "required";
|
|
20
|
+
revocationChecker?: X509RevocationChecker;
|
|
21
|
+
}
|
|
22
|
+
export interface X509ChainVerificationInput {
|
|
23
|
+
/**
|
|
24
|
+
* JWS `x5c` order: leaf first, followed by intermediates. A root may be
|
|
25
|
+
* included but is trusted only when it exactly matches a configured anchor.
|
|
26
|
+
*/
|
|
27
|
+
x5c: readonly string[];
|
|
28
|
+
/**
|
|
29
|
+
* PEM or Base64 DER trust anchors configured locally by the consumer.
|
|
30
|
+
*/
|
|
31
|
+
trustedCertificates: readonly string[];
|
|
32
|
+
/**
|
|
33
|
+
* JOSE algorithm from the protected header. When supplied, the leaf SPKI
|
|
34
|
+
* must have the corresponding key type and curve.
|
|
35
|
+
*/
|
|
36
|
+
algorithm?: string;
|
|
37
|
+
/**
|
|
38
|
+
* DNS name or HTTPS issuer URL. Matching uses subjectAltName dNSName only;
|
|
39
|
+
* Common Name fallback is intentionally disabled.
|
|
40
|
+
*/
|
|
41
|
+
expectedHostname?: string;
|
|
42
|
+
validationTime?: Date;
|
|
43
|
+
}
|
|
44
|
+
export interface X509ChainVerificationResult {
|
|
45
|
+
leafCertificatePem: string;
|
|
46
|
+
leafCertificateDer: Uint8Array;
|
|
47
|
+
chainLength: number;
|
|
48
|
+
subjectAlternativeNames: readonly string[];
|
|
49
|
+
trustAnchorFingerprintSha256: string;
|
|
50
|
+
}
|
|
51
|
+
export interface X509ChainVerifierI {
|
|
52
|
+
verify(input: X509ChainVerificationInput): Promise<Result<X509ChainVerificationResult, X509ChainVerificationError>>;
|
|
53
|
+
}
|
|
54
|
+
export declare class X509ChainVerifier implements X509ChainVerifierI {
|
|
55
|
+
private readonly policy;
|
|
56
|
+
constructor(policy?: X509ChainVerifierPolicy);
|
|
57
|
+
verify(input: X509ChainVerificationInput): Promise<Result<X509ChainVerificationResult, X509ChainVerificationError>>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=X509ChainVerifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"X509ChainVerifier.d.ts","sourceRoot":"","sources":["../../src/x509/X509ChainVerifier.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AA+CvC,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,wBAAwB;IACxC,cAAc,EAAE,UAAU,CAAC;IAC3B,oBAAoB,EAAE,UAAU,CAAC;IACjC,cAAc,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,uBAAuB;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,yBAAyB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9C,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,cAAc,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACzC,iBAAiB,CAAC,EAAE,qBAAqB,CAAC;CAC1C;AAaD,MAAM,WAAW,0BAA0B;IAC1C;;;OAGG;IACH,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB;;OAEG;IACH,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,2BAA2B;IAC3C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,UAAU,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3C,4BAA4B,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IAClC,MAAM,CACL,KAAK,EAAE,0BAA0B,GAC/B,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,0BAA0B,CAAC,CAAC,CAAC;CAC5E;AAgQD,qBAAa,iBAAkB,YAAW,kBAAkB;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;gBAE9B,MAAM,GAAE,uBAA4B;IAI1C,MAAM,CACX,KAAK,EAAE,0BAA0B,GAC/B,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,0BAA0B,CAAC,CAAC;CAuN3E"}
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.X509ChainVerifier = void 0;
|
|
40
|
+
const asn1js = __importStar(require("asn1js"));
|
|
41
|
+
const pkijs = __importStar(require("pkijs"));
|
|
42
|
+
const buffer_1 = require("buffer");
|
|
43
|
+
const uncrypto_1 = __importDefault(require("uncrypto"));
|
|
44
|
+
const error_1 = require("../error");
|
|
45
|
+
const OID = Object.freeze({
|
|
46
|
+
ecPublicKey: "1.2.840.10045.2.1",
|
|
47
|
+
rsaEncryption: "1.2.840.113549.1.1.1",
|
|
48
|
+
ed25519: "1.3.101.112",
|
|
49
|
+
p256: "1.2.840.10045.3.1.7",
|
|
50
|
+
p384: "1.3.132.0.34",
|
|
51
|
+
p521: "1.3.132.0.35",
|
|
52
|
+
secp256k1: "1.3.132.0.10",
|
|
53
|
+
basicConstraints: "2.5.29.19",
|
|
54
|
+
keyUsage: "2.5.29.15",
|
|
55
|
+
extendedKeyUsage: "2.5.29.37",
|
|
56
|
+
subjectAltName: "2.5.29.17",
|
|
57
|
+
anyExtendedKeyUsage: "2.5.29.37.0",
|
|
58
|
+
});
|
|
59
|
+
const WEAK_SIGNATURE_ALGORITHM_OIDS = new Set([
|
|
60
|
+
"1.2.840.113549.1.1.2", // md2WithRSAEncryption
|
|
61
|
+
"1.2.840.113549.1.1.3", // md4WithRSAEncryption
|
|
62
|
+
"1.2.840.113549.1.1.4", // md5WithRSAEncryption
|
|
63
|
+
"1.2.840.113549.1.1.5", // sha1WithRSAEncryption
|
|
64
|
+
"1.2.840.10040.4.3", // dsaWithSha1
|
|
65
|
+
"1.2.840.10045.4.1", // ecdsa-with-SHA1
|
|
66
|
+
]);
|
|
67
|
+
const SUPPORTED_CRITICAL_EXTENSION_OIDS = new Set([
|
|
68
|
+
"2.5.29.14", // subjectKeyIdentifier
|
|
69
|
+
"2.5.29.15", // keyUsage
|
|
70
|
+
"2.5.29.17", // subjectAltName
|
|
71
|
+
"2.5.29.18", // issuerAltName
|
|
72
|
+
"2.5.29.19", // basicConstraints
|
|
73
|
+
"2.5.29.30", // nameConstraints
|
|
74
|
+
"2.5.29.31", // cRLDistributionPoints
|
|
75
|
+
"2.5.29.32", // certificatePolicies
|
|
76
|
+
"2.5.29.33", // policyMappings
|
|
77
|
+
"2.5.29.35", // authorityKeyIdentifier
|
|
78
|
+
"2.5.29.36", // policyConstraints
|
|
79
|
+
"2.5.29.37", // extendedKeyUsage
|
|
80
|
+
"2.5.29.46", // freshestCRL
|
|
81
|
+
"2.5.29.54", // inhibitAnyPolicy
|
|
82
|
+
]);
|
|
83
|
+
const DEFAULT_MAX_CHAIN_LENGTH = 8;
|
|
84
|
+
const DEFAULT_MAX_CERTIFICATE_BYTES = 64 * 1024;
|
|
85
|
+
const DEFAULT_MAX_TOTAL_BYTES = 256 * 1024;
|
|
86
|
+
function failure(error) {
|
|
87
|
+
return { success: false, error };
|
|
88
|
+
}
|
|
89
|
+
function positiveInteger(value, fallback, field) {
|
|
90
|
+
const normalized = value ?? fallback;
|
|
91
|
+
if (!Number.isSafeInteger(normalized) || normalized <= 0) {
|
|
92
|
+
throw new TypeError(`${field} must be a positive safe integer`);
|
|
93
|
+
}
|
|
94
|
+
return normalized;
|
|
95
|
+
}
|
|
96
|
+
function normalizePolicy(policy) {
|
|
97
|
+
const requiredExtendedKeyUsages = policy.requiredExtendedKeyUsages ?? [];
|
|
98
|
+
if (requiredExtendedKeyUsages.some((value) => typeof value !== "string" || !/^[0-9]+(?:\.[0-9]+)+$/.test(value)) ||
|
|
99
|
+
new Set(requiredExtendedKeyUsages).size !== requiredExtendedKeyUsages.length) {
|
|
100
|
+
throw new TypeError("requiredExtendedKeyUsages must contain unique OIDs");
|
|
101
|
+
}
|
|
102
|
+
const revocationMode = policy.revocationMode ?? "disabled";
|
|
103
|
+
if (revocationMode === "required" && !policy.revocationChecker) {
|
|
104
|
+
throw new TypeError("revocationChecker is required when revocationMode is required");
|
|
105
|
+
}
|
|
106
|
+
return Object.freeze({
|
|
107
|
+
maxChainLength: positiveInteger(policy.maxChainLength, DEFAULT_MAX_CHAIN_LENGTH, "maxChainLength"),
|
|
108
|
+
maxCertificateBytes: positiveInteger(policy.maxCertificateBytes, DEFAULT_MAX_CERTIFICATE_BYTES, "maxCertificateBytes"),
|
|
109
|
+
maxTotalBytes: positiveInteger(policy.maxTotalBytes, DEFAULT_MAX_TOTAL_BYTES, "maxTotalBytes"),
|
|
110
|
+
requireDigitalSignatureKeyUsage: policy.requireDigitalSignatureKeyUsage !== false,
|
|
111
|
+
requiredExtendedKeyUsages: Object.freeze([...requiredExtendedKeyUsages]),
|
|
112
|
+
requireSubjectAlternativeName: policy.requireSubjectAlternativeName !== false,
|
|
113
|
+
revocationMode,
|
|
114
|
+
revocationChecker: policy.revocationChecker,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
function normalizeBase64Der(value, allowPem) {
|
|
118
|
+
let base64 = value.trim();
|
|
119
|
+
const pemMatch = base64.match(/^-----BEGIN CERTIFICATE-----\s*([A-Za-z0-9+/=\s]+?)\s*-----END CERTIFICATE-----$/);
|
|
120
|
+
if (pemMatch) {
|
|
121
|
+
if (!allowPem)
|
|
122
|
+
return undefined;
|
|
123
|
+
base64 = pemMatch[1].replace(/\s/g, "");
|
|
124
|
+
}
|
|
125
|
+
else if (/\s/.test(base64)) {
|
|
126
|
+
return undefined;
|
|
127
|
+
}
|
|
128
|
+
if (base64.length === 0 ||
|
|
129
|
+
base64.length % 4 !== 0 ||
|
|
130
|
+
!/^[A-Za-z0-9+/]+={0,2}$/.test(base64)) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
return base64;
|
|
134
|
+
}
|
|
135
|
+
function parseCertificate(value, allowPem, maxCertificateBytes) {
|
|
136
|
+
const base64 = normalizeBase64Der(value, allowPem);
|
|
137
|
+
if (!base64)
|
|
138
|
+
return undefined;
|
|
139
|
+
let bytes;
|
|
140
|
+
try {
|
|
141
|
+
bytes = new Uint8Array(buffer_1.Buffer.from(base64, "base64"));
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
if (bytes.byteLength === 0 ||
|
|
147
|
+
bytes.byteLength > maxCertificateBytes ||
|
|
148
|
+
buffer_1.Buffer.from(bytes).toString("base64") !== base64) {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
const der = bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
152
|
+
const asn1 = asn1js.fromBER(der);
|
|
153
|
+
if (asn1.offset !== der.byteLength || asn1.result.error)
|
|
154
|
+
return undefined;
|
|
155
|
+
try {
|
|
156
|
+
const certificate = new pkijs.Certificate({ schema: asn1.result });
|
|
157
|
+
return {
|
|
158
|
+
certificate,
|
|
159
|
+
der: new Uint8Array(bytes),
|
|
160
|
+
fingerprintKey: buffer_1.Buffer.from(bytes).toString("hex"),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
return undefined;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function toPem(der) {
|
|
168
|
+
const base64 = buffer_1.Buffer.from(der).toString("base64");
|
|
169
|
+
const lines = base64.match(/.{1,64}/g) ?? [];
|
|
170
|
+
return `-----BEGIN CERTIFICATE-----\n${lines.join("\n")}\n-----END CERTIFICATE-----`;
|
|
171
|
+
}
|
|
172
|
+
function extension(certificate, oid) {
|
|
173
|
+
return certificate.extensions?.find((item) => item.extnID === oid);
|
|
174
|
+
}
|
|
175
|
+
function isCertificateAuthority(certificate) {
|
|
176
|
+
const value = extension(certificate, OID.basicConstraints)?.parsedValue;
|
|
177
|
+
return value instanceof pkijs.BasicConstraints && value.cA === true;
|
|
178
|
+
}
|
|
179
|
+
function hasDigitalSignatureKeyUsage(certificate) {
|
|
180
|
+
const value = extension(certificate, OID.keyUsage)?.parsedValue;
|
|
181
|
+
if (!(value instanceof asn1js.BitString))
|
|
182
|
+
return false;
|
|
183
|
+
const bytes = value.valueBlock.valueHexView;
|
|
184
|
+
return bytes.length > 0 && (bytes[0] & 0x80) === 0x80;
|
|
185
|
+
}
|
|
186
|
+
function extendedKeyUsages(certificate) {
|
|
187
|
+
const value = extension(certificate, OID.extendedKeyUsage)?.parsedValue;
|
|
188
|
+
return value instanceof pkijs.ExtKeyUsage ? value.keyPurposes : [];
|
|
189
|
+
}
|
|
190
|
+
function subjectAlternativeNames(certificate) {
|
|
191
|
+
const value = extension(certificate, OID.subjectAltName)?.parsedValue;
|
|
192
|
+
if (!(value instanceof pkijs.AltName))
|
|
193
|
+
return [];
|
|
194
|
+
return Object.freeze(value.altNames
|
|
195
|
+
.filter((name) => name.type === 2 && typeof name.value === "string")
|
|
196
|
+
.map((name) => String(name.value).toLowerCase()));
|
|
197
|
+
}
|
|
198
|
+
function normalizeHostname(value) {
|
|
199
|
+
let hostname = value.trim();
|
|
200
|
+
try {
|
|
201
|
+
hostname = new URL(hostname).hostname;
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
// A bare DNS name is accepted below.
|
|
205
|
+
}
|
|
206
|
+
hostname = hostname.toLowerCase().replace(/\.$/, "");
|
|
207
|
+
if (hostname.length === 0 ||
|
|
208
|
+
hostname.length > 253 ||
|
|
209
|
+
hostname.includes(":") ||
|
|
210
|
+
hostname.split(".").some((label) => label.length === 0 ||
|
|
211
|
+
label.length > 63 ||
|
|
212
|
+
!/^[a-z0-9-]+$/.test(label) ||
|
|
213
|
+
label.startsWith("-") ||
|
|
214
|
+
label.endsWith("-"))) {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
return hostname;
|
|
218
|
+
}
|
|
219
|
+
function dnsNameMatches(hostname, certificateName) {
|
|
220
|
+
const pattern = certificateName.toLowerCase().replace(/\.$/, "");
|
|
221
|
+
if (!pattern.includes("*"))
|
|
222
|
+
return pattern === hostname;
|
|
223
|
+
if (!pattern.startsWith("*.") ||
|
|
224
|
+
pattern.indexOf("*", 1) !== -1) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
const suffix = pattern.slice(2);
|
|
228
|
+
const hostnameLabels = hostname.split(".");
|
|
229
|
+
const suffixLabels = suffix.split(".");
|
|
230
|
+
return (suffixLabels.length >= 2 &&
|
|
231
|
+
hostnameLabels.length === suffixLabels.length + 1 &&
|
|
232
|
+
hostnameLabels.slice(1).join(".") === suffix);
|
|
233
|
+
}
|
|
234
|
+
function objectIdentifierValue(value) {
|
|
235
|
+
return value instanceof asn1js.ObjectIdentifier
|
|
236
|
+
? value.valueBlock.toString()
|
|
237
|
+
: undefined;
|
|
238
|
+
}
|
|
239
|
+
function algorithmMatches(certificate, algorithm) {
|
|
240
|
+
const publicKeyAlgorithm = certificate.subjectPublicKeyInfo.algorithm;
|
|
241
|
+
const keyOid = publicKeyAlgorithm.algorithmId;
|
|
242
|
+
const curveOid = objectIdentifierValue(publicKeyAlgorithm.algorithmParams);
|
|
243
|
+
switch (algorithm) {
|
|
244
|
+
case "ES256":
|
|
245
|
+
return keyOid === OID.ecPublicKey && curveOid === OID.p256;
|
|
246
|
+
case "ES384":
|
|
247
|
+
return keyOid === OID.ecPublicKey && curveOid === OID.p384;
|
|
248
|
+
case "ES512":
|
|
249
|
+
return keyOid === OID.ecPublicKey && curveOid === OID.p521;
|
|
250
|
+
case "ES256K":
|
|
251
|
+
return keyOid === OID.ecPublicKey && curveOid === OID.secp256k1;
|
|
252
|
+
case "RS256":
|
|
253
|
+
case "RS384":
|
|
254
|
+
case "RS512":
|
|
255
|
+
case "PS256":
|
|
256
|
+
case "PS384":
|
|
257
|
+
case "PS512":
|
|
258
|
+
return keyOid === OID.rsaEncryption;
|
|
259
|
+
case "EdDSA":
|
|
260
|
+
return keyOid === OID.ed25519;
|
|
261
|
+
default:
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
function isWeaklySigned(certificate) {
|
|
266
|
+
return WEAK_SIGNATURE_ALGORITHM_OIDS.has(certificate.signatureAlgorithm.algorithmId);
|
|
267
|
+
}
|
|
268
|
+
function certificateTimeError(certificate, validationTime) {
|
|
269
|
+
if (certificate.notBefore.value.getTime() > validationTime.getTime()) {
|
|
270
|
+
return error_1.X509ChainVerificationError.CertificateNotYetValid;
|
|
271
|
+
}
|
|
272
|
+
if (certificate.notAfter.value.getTime() < validationTime.getTime()) {
|
|
273
|
+
return error_1.X509ChainVerificationError.CertificateExpired;
|
|
274
|
+
}
|
|
275
|
+
return undefined;
|
|
276
|
+
}
|
|
277
|
+
async function sha256Hex(value) {
|
|
278
|
+
const digest = await uncrypto_1.default.subtle.digest("SHA-256", new Uint8Array(value));
|
|
279
|
+
return buffer_1.Buffer.from(digest).toString("hex");
|
|
280
|
+
}
|
|
281
|
+
class X509ChainVerifier {
|
|
282
|
+
policy;
|
|
283
|
+
constructor(policy = {}) {
|
|
284
|
+
this.policy = normalizePolicy(policy);
|
|
285
|
+
}
|
|
286
|
+
async verify(input) {
|
|
287
|
+
if (!Array.isArray(input.x5c) || input.x5c.length === 0) {
|
|
288
|
+
return failure(error_1.X509ChainVerificationError.EmptyChain);
|
|
289
|
+
}
|
|
290
|
+
if (input.x5c.length > this.policy.maxChainLength) {
|
|
291
|
+
return failure(error_1.X509ChainVerificationError.ChainTooLong);
|
|
292
|
+
}
|
|
293
|
+
if (!Array.isArray(input.trustedCertificates) ||
|
|
294
|
+
input.trustedCertificates.length === 0) {
|
|
295
|
+
return failure(error_1.X509ChainVerificationError.NoTrustAnchors);
|
|
296
|
+
}
|
|
297
|
+
const chain = [];
|
|
298
|
+
let totalBytes = 0;
|
|
299
|
+
for (const encodedCertificate of input.x5c) {
|
|
300
|
+
if (typeof encodedCertificate !== "string") {
|
|
301
|
+
return failure(error_1.X509ChainVerificationError.InvalidCertificateEncoding);
|
|
302
|
+
}
|
|
303
|
+
const parsed = parseCertificate(encodedCertificate, false, this.policy.maxCertificateBytes);
|
|
304
|
+
if (!parsed) {
|
|
305
|
+
return failure(error_1.X509ChainVerificationError.InvalidCertificateEncoding);
|
|
306
|
+
}
|
|
307
|
+
totalBytes += parsed.der.byteLength;
|
|
308
|
+
if (totalBytes > this.policy.maxTotalBytes) {
|
|
309
|
+
return failure(error_1.X509ChainVerificationError.ChainTooLarge);
|
|
310
|
+
}
|
|
311
|
+
chain.push(parsed);
|
|
312
|
+
}
|
|
313
|
+
if (new Set(chain.map((item) => item.fingerprintKey)).size !== chain.length) {
|
|
314
|
+
return failure(error_1.X509ChainVerificationError.DuplicateCertificate);
|
|
315
|
+
}
|
|
316
|
+
const trustAnchors = [];
|
|
317
|
+
for (const encodedCertificate of input.trustedCertificates) {
|
|
318
|
+
if (typeof encodedCertificate !== "string") {
|
|
319
|
+
return failure(error_1.X509ChainVerificationError.InvalidTrustAnchor);
|
|
320
|
+
}
|
|
321
|
+
const parsed = parseCertificate(encodedCertificate, true, this.policy.maxCertificateBytes);
|
|
322
|
+
if (!parsed) {
|
|
323
|
+
return failure(error_1.X509ChainVerificationError.InvalidTrustAnchor);
|
|
324
|
+
}
|
|
325
|
+
trustAnchors.push(parsed);
|
|
326
|
+
}
|
|
327
|
+
if (new Set(trustAnchors.map((item) => item.fingerprintKey)).size !==
|
|
328
|
+
trustAnchors.length) {
|
|
329
|
+
return failure(error_1.X509ChainVerificationError.InvalidTrustAnchor);
|
|
330
|
+
}
|
|
331
|
+
for (let index = 0; index < chain.length - 1; index++) {
|
|
332
|
+
if (!chain[index].certificate.issuer.isEqual(chain[index + 1].certificate.subject)) {
|
|
333
|
+
return failure(error_1.X509ChainVerificationError.InvalidChainOrder);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
const validationTime = input.validationTime
|
|
337
|
+
? new Date(input.validationTime)
|
|
338
|
+
: new Date();
|
|
339
|
+
if (Number.isNaN(validationTime.getTime())) {
|
|
340
|
+
return failure(error_1.X509ChainVerificationError.InvalidValidationTime);
|
|
341
|
+
}
|
|
342
|
+
for (const item of [...chain, ...trustAnchors]) {
|
|
343
|
+
const timeError = certificateTimeError(item.certificate, validationTime);
|
|
344
|
+
if (timeError)
|
|
345
|
+
return failure(timeError);
|
|
346
|
+
}
|
|
347
|
+
if (chain.some((item) => isWeaklySigned(item.certificate))) {
|
|
348
|
+
return failure(error_1.X509ChainVerificationError.WeakCertificateSignature);
|
|
349
|
+
}
|
|
350
|
+
if (chain.some((item) => item.certificate.extensions?.some((item) => item.critical && !SUPPORTED_CRITICAL_EXTENSION_OIDS.has(item.extnID)))) {
|
|
351
|
+
return failure(error_1.X509ChainVerificationError.UnsupportedCriticalExtension);
|
|
352
|
+
}
|
|
353
|
+
const leaf = chain[0].certificate;
|
|
354
|
+
if (isCertificateAuthority(leaf)) {
|
|
355
|
+
return failure(error_1.X509ChainVerificationError.LeafIsCertificateAuthority);
|
|
356
|
+
}
|
|
357
|
+
if (this.policy.requireDigitalSignatureKeyUsage &&
|
|
358
|
+
!hasDigitalSignatureKeyUsage(leaf)) {
|
|
359
|
+
return failure(error_1.X509ChainVerificationError.InvalidLeafKeyUsage);
|
|
360
|
+
}
|
|
361
|
+
if (input.algorithm !== undefined && !algorithmMatches(leaf, input.algorithm)) {
|
|
362
|
+
return failure(error_1.X509ChainVerificationError.AlgorithmMismatch);
|
|
363
|
+
}
|
|
364
|
+
const leafExtendedKeyUsages = extendedKeyUsages(leaf);
|
|
365
|
+
if (this.policy.requiredExtendedKeyUsages.length > 0 &&
|
|
366
|
+
!leafExtendedKeyUsages.includes(OID.anyExtendedKeyUsage) &&
|
|
367
|
+
!this.policy.requiredExtendedKeyUsages.some((oid) => leafExtendedKeyUsages.includes(oid))) {
|
|
368
|
+
return failure(error_1.X509ChainVerificationError.ExtendedKeyUsageMismatch);
|
|
369
|
+
}
|
|
370
|
+
const names = subjectAlternativeNames(leaf);
|
|
371
|
+
if (input.expectedHostname !== undefined) {
|
|
372
|
+
const expectedHostname = normalizeHostname(input.expectedHostname);
|
|
373
|
+
if (!expectedHostname) {
|
|
374
|
+
return failure(error_1.X509ChainVerificationError.InvalidExpectedHostname);
|
|
375
|
+
}
|
|
376
|
+
if ((this.policy.requireSubjectAlternativeName && names.length === 0) ||
|
|
377
|
+
!names.some((name) => dnsNameMatches(expectedHostname, name))) {
|
|
378
|
+
return failure(error_1.X509ChainVerificationError.HostnameMismatch);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
pkijs.setEngine("ubid-x509-webcrypto", uncrypto_1.default, new pkijs.CryptoEngine({
|
|
382
|
+
name: "ubid-x509-webcrypto",
|
|
383
|
+
crypto: uncrypto_1.default,
|
|
384
|
+
subtle: uncrypto_1.default.subtle,
|
|
385
|
+
}));
|
|
386
|
+
let path;
|
|
387
|
+
try {
|
|
388
|
+
const verificationResult = await new pkijs.CertificateChainValidationEngine({
|
|
389
|
+
trustedCerts: trustAnchors.map((item) => item.certificate),
|
|
390
|
+
certs: chain.map((item) => item.certificate).reverse(),
|
|
391
|
+
checkDate: validationTime,
|
|
392
|
+
}).verify();
|
|
393
|
+
if (!verificationResult.result || !verificationResult.certificatePath) {
|
|
394
|
+
console.error("[X509ChainVerifier] PKIjs validation failed", {
|
|
395
|
+
result: verificationResult.result,
|
|
396
|
+
resultCode: verificationResult.resultCode,
|
|
397
|
+
resultMessage: verificationResult.resultMessage,
|
|
398
|
+
inputChainLength: chain.length,
|
|
399
|
+
trustAnchorCount: trustAnchors.length,
|
|
400
|
+
});
|
|
401
|
+
return failure(error_1.X509ChainVerificationError.InvalidCertificateChain);
|
|
402
|
+
}
|
|
403
|
+
path = verificationResult.certificatePath;
|
|
404
|
+
}
|
|
405
|
+
catch (error) {
|
|
406
|
+
console.error("[X509ChainVerifier] PKIjs threw", {
|
|
407
|
+
name: error instanceof Error ? error.name : undefined,
|
|
408
|
+
message: error instanceof Error ? error.message : String(error),
|
|
409
|
+
inputChainLength: chain.length,
|
|
410
|
+
trustAnchorCount: trustAnchors.length,
|
|
411
|
+
});
|
|
412
|
+
return failure(error_1.X509ChainVerificationError.InvalidCertificateChain);
|
|
413
|
+
}
|
|
414
|
+
const trustAnchor = path[path.length - 1];
|
|
415
|
+
const parsedTrustAnchor = trustAnchors.find((item) => item.certificate.tbsView.byteLength === trustAnchor.tbsView.byteLength &&
|
|
416
|
+
item.fingerprintKey === buffer_1.Buffer.from(trustAnchor.toSchema().toBER(false)).toString("hex"));
|
|
417
|
+
if (!parsedTrustAnchor) {
|
|
418
|
+
return failure(error_1.X509ChainVerificationError.UntrustedRoot);
|
|
419
|
+
}
|
|
420
|
+
if (this.policy.revocationMode === "required") {
|
|
421
|
+
const checker = this.policy.revocationChecker;
|
|
422
|
+
if (!checker) {
|
|
423
|
+
return failure(error_1.X509ChainVerificationError.RevocationStatusUnavailable);
|
|
424
|
+
}
|
|
425
|
+
for (let index = 0; index < path.length - 1; index++) {
|
|
426
|
+
let status;
|
|
427
|
+
try {
|
|
428
|
+
status = await checker.check({
|
|
429
|
+
certificateDer: new Uint8Array(path[index].toSchema().toBER(false)),
|
|
430
|
+
issuerCertificateDer: new Uint8Array(path[index + 1].toSchema().toBER(false)),
|
|
431
|
+
validationTime: new Date(validationTime),
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
catch {
|
|
435
|
+
return failure(error_1.X509ChainVerificationError.RevocationStatusUnavailable);
|
|
436
|
+
}
|
|
437
|
+
if (status === "revoked") {
|
|
438
|
+
return failure(error_1.X509ChainVerificationError.CertificateRevoked);
|
|
439
|
+
}
|
|
440
|
+
if (status !== "good") {
|
|
441
|
+
return failure(error_1.X509ChainVerificationError.RevocationStatusUnavailable);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
return {
|
|
446
|
+
success: true,
|
|
447
|
+
value: {
|
|
448
|
+
leafCertificatePem: toPem(chain[0].der),
|
|
449
|
+
leafCertificateDer: new Uint8Array(chain[0].der),
|
|
450
|
+
chainLength: path.length,
|
|
451
|
+
subjectAlternativeNames: names,
|
|
452
|
+
trustAnchorFingerprintSha256: await sha256Hex(parsedTrustAnchor.der),
|
|
453
|
+
},
|
|
454
|
+
};
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
exports.X509ChainVerifier = X509ChainVerifier;
|
|
458
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiWDUwOUNoYWluVmVyaWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMveDUwOS9YNTA5Q2hhaW5WZXJpZmllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNkNBQStCO0FBQy9CLG1DQUFnQztBQUNoQyx3REFBaUM7QUFDakMsb0NBQXNEO0FBR3RELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDekIsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQyxhQUFhLEVBQUUsc0JBQXNCO0lBQ3JDLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsSUFBSSxFQUFFLGNBQWM7SUFDcEIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsU0FBUyxFQUFFLGNBQWM7SUFDekIsZ0JBQWdCLEVBQUUsV0FBVztJQUM3QixRQUFRLEVBQUUsV0FBVztJQUNyQixnQkFBZ0IsRUFBRSxXQUFXO0lBQzdCLGNBQWMsRUFBRSxXQUFXO0lBQzNCLG1CQUFtQixFQUFFLGFBQWE7Q0FDbEMsQ0FBQyxDQUFDO0FBRUgsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUM3QyxzQkFBc0IsRUFBRSx1QkFBdUI7SUFDL0Msc0JBQXNCLEVBQUUsdUJBQXVCO0lBQy9DLHNCQUFzQixFQUFFLHVCQUF1QjtJQUMvQyxzQkFBc0IsRUFBRSx3QkFBd0I7SUFDaEQsbUJBQW1CLEVBQUUsY0FBYztJQUNuQyxtQkFBbUIsRUFBRSxrQkFBa0I7Q0FDdkMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxpQ0FBaUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNqRCxXQUFXLEVBQUUsdUJBQXVCO0lBQ3BDLFdBQVcsRUFBRSxXQUFXO0lBQ3hCLFdBQVcsRUFBRSxpQkFBaUI7SUFDOUIsV0FBVyxFQUFFLGdCQUFnQjtJQUM3QixXQUFXLEVBQUUs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
|
package/package.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ubid-common",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Shared credential parsing, rendering, verification, trust, and cryptographic utility components for the UbID ecosystem.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ubid",
|
|
7
|
+
"digital-identity",
|
|
8
|
+
"verifiable-credentials",
|
|
9
|
+
"openid4vci",
|
|
10
|
+
"openid4vp",
|
|
11
|
+
"sd-jwt",
|
|
12
|
+
"mdoc",
|
|
13
|
+
"digital-credentials",
|
|
14
|
+
"identity",
|
|
15
|
+
"verification"
|
|
16
|
+
],
|
|
17
|
+
"type": "commonjs",
|
|
18
|
+
"main": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"require": "./dist/index.js",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"files": [
|
|
28
|
+
"dist"
|
|
29
|
+
],
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"repository": {
|
|
32
|
+
"type": "git",
|
|
33
|
+
"url": "git+https://github.com/paradigma-cl/ubid-common.git"
|
|
34
|
+
},
|
|
35
|
+
"bugs": {
|
|
36
|
+
"url": "https://github.com/paradigma-cl/ubid-common/issues"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://github.com/paradigma-cl/ubid-common#readme",
|
|
39
|
+
"engines": {
|
|
40
|
+
"node": ">=20.19"
|
|
41
|
+
},
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public",
|
|
44
|
+
"registry": "https://registry.npmjs.org/"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
48
|
+
"build": "npm run clean && tsc",
|
|
49
|
+
"typecheck": "tsc --noEmit",
|
|
50
|
+
"test": "vitest run --maxWorkers=1",
|
|
51
|
+
"test:watch": "vitest",
|
|
52
|
+
"prepack": "npm run build"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@auth0/mdl": "^2.2.0",
|
|
56
|
+
"@sd-jwt/core": "^0.10.0",
|
|
57
|
+
"@sd-jwt/sd-jwt-vc": "^0.13.0",
|
|
58
|
+
"asn1js": "^3.0.5",
|
|
59
|
+
"axios": "^1.20.0",
|
|
60
|
+
"buffer": "^6.0.3",
|
|
61
|
+
"cose-kit": "^1.7.1",
|
|
62
|
+
"jose": "^5.9.6",
|
|
63
|
+
"jsonpointer": "^5.0.1",
|
|
64
|
+
"pako": "2.1.0",
|
|
65
|
+
"pkijs": "^3.2.4",
|
|
66
|
+
"uncrypto": "^0.1.3",
|
|
67
|
+
"zod": "^3.24.1"
|
|
68
|
+
},
|
|
69
|
+
"devDependencies": {
|
|
70
|
+
"@sd-jwt/types": "^0.10.0",
|
|
71
|
+
"@types/node": "^22.20.1",
|
|
72
|
+
"@xmldom/xmldom": "^0.9.12",
|
|
73
|
+
"typescript": "^5.9.3",
|
|
74
|
+
"vitest": "^4.1.10"
|
|
75
|
+
},
|
|
76
|
+
"overrides": {
|
|
77
|
+
"ajv": "8.20.0",
|
|
78
|
+
"fast-uri": "3.1.6",
|
|
79
|
+
"form-data": "4.0.6",
|
|
80
|
+
"follow-redirects": "1.16.0"
|
|
81
|
+
}
|
|
82
|
+
}
|