@vess-id/mdl 0.0.1
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 +179 -0
- package/README.md +181 -0
- package/lib/buffer_utils.d.ts +6 -0
- package/lib/buffer_utils.js +36 -0
- package/lib/cbor/DataItem.d.ts +26 -0
- package/lib/cbor/DataItem.js +77 -0
- package/lib/cbor/index.d.ts +15 -0
- package/lib/cbor/index.js +73 -0
- package/lib/cose/coseKey.d.ts +14 -0
- package/lib/cose/coseKey.js +36 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.js +28 -0
- package/lib/mdoc/IssuerSignedItem.d.ts +18 -0
- package/lib/mdoc/IssuerSignedItem.js +101 -0
- package/lib/mdoc/Verifier.d.ts +33 -0
- package/lib/mdoc/Verifier.js +405 -0
- package/lib/mdoc/checkCallback.d.ts +49 -0
- package/lib/mdoc/checkCallback.js +63 -0
- package/lib/mdoc/errors.d.ts +7 -0
- package/lib/mdoc/errors.js +21 -0
- package/lib/mdoc/model/DeviceResponse.d.ts +120 -0
- package/lib/mdoc/model/DeviceResponse.js +295 -0
- package/lib/mdoc/model/DeviceSignedDocument.d.ts +20 -0
- package/lib/mdoc/model/DeviceSignedDocument.js +50 -0
- package/lib/mdoc/model/Document.d.ts +75 -0
- package/lib/mdoc/model/Document.js +249 -0
- package/lib/mdoc/model/IssuerAuth.d.ts +17 -0
- package/lib/mdoc/model/IssuerAuth.js +72 -0
- package/lib/mdoc/model/IssuerSignedDocument.d.ts +29 -0
- package/lib/mdoc/model/IssuerSignedDocument.js +49 -0
- package/lib/mdoc/model/MDoc.d.ts +21 -0
- package/lib/mdoc/model/MDoc.js +34 -0
- package/lib/mdoc/model/PresentationDefinition.d.ts +21 -0
- package/lib/mdoc/model/PresentationDefinition.js +3 -0
- package/lib/mdoc/model/types.d.ts +110 -0
- package/lib/mdoc/model/types.js +3 -0
- package/lib/mdoc/parser.d.ts +8 -0
- package/lib/mdoc/parser.js +88 -0
- package/lib/mdoc/utils.d.ts +17 -0
- package/lib/mdoc/utils.js +145 -0
- package/package.json +82 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Mac0, Sign1 } from 'cose-kit';
|
|
2
|
+
import { JWK } from 'jose';
|
|
3
|
+
import IssuerAuth from './IssuerAuth';
|
|
4
|
+
import { IssuerSignedDataItem, IssuerSignedItem } from '../IssuerSignedItem';
|
|
5
|
+
export type ValidityInfo = {
|
|
6
|
+
signed: Date;
|
|
7
|
+
validFrom: Date;
|
|
8
|
+
validUntil: Date;
|
|
9
|
+
expectedUpdate?: Date;
|
|
10
|
+
};
|
|
11
|
+
export type IssuerNameSpaces = {
|
|
12
|
+
[x: string]: IssuerSignedItem[];
|
|
13
|
+
};
|
|
14
|
+
export type ValidatedIssuerNameSpaces = {
|
|
15
|
+
[x: string]: {
|
|
16
|
+
[x: string]: unknown;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export type IssuerSigned = {
|
|
20
|
+
issuerAuth: IssuerAuth;
|
|
21
|
+
nameSpaces: IssuerNameSpaces;
|
|
22
|
+
};
|
|
23
|
+
export type DeviceAuth = {
|
|
24
|
+
deviceMac: Mac0;
|
|
25
|
+
} & {
|
|
26
|
+
deviceSignature?: never;
|
|
27
|
+
} | ({
|
|
28
|
+
deviceMac?: never;
|
|
29
|
+
} & {
|
|
30
|
+
deviceSignature: Sign1;
|
|
31
|
+
});
|
|
32
|
+
export type DeviceSigned = {
|
|
33
|
+
deviceAuth: DeviceAuth;
|
|
34
|
+
nameSpaces: Record<string, Record<string, any>>;
|
|
35
|
+
};
|
|
36
|
+
export type RawIndexedDataItem = IssuerSignedDataItem[];
|
|
37
|
+
export type RawNameSpaces = Map<string, RawIndexedDataItem>;
|
|
38
|
+
type RawAuthElement = ConstructorParameters<typeof Sign1>;
|
|
39
|
+
export type RawIssuerAuth = ConstructorParameters<typeof Sign1>;
|
|
40
|
+
export type RawDeviceAuth = Map<'deviceMac' | 'deviceSignature', RawAuthElement>;
|
|
41
|
+
export type DigestAlgorithm = 'SHA-256' | 'SHA-384' | 'SHA-512';
|
|
42
|
+
export type DiagnosticInformation = {
|
|
43
|
+
general: {
|
|
44
|
+
type: string;
|
|
45
|
+
version: string;
|
|
46
|
+
status: number;
|
|
47
|
+
documents: number;
|
|
48
|
+
};
|
|
49
|
+
validityInfo: ValidityInfo;
|
|
50
|
+
attributes: {
|
|
51
|
+
ns: string;
|
|
52
|
+
id: string;
|
|
53
|
+
value: any;
|
|
54
|
+
isValid: boolean;
|
|
55
|
+
matchCertificate?: boolean;
|
|
56
|
+
}[];
|
|
57
|
+
deviceAttributes: {
|
|
58
|
+
ns: string;
|
|
59
|
+
id: string;
|
|
60
|
+
value: any;
|
|
61
|
+
}[];
|
|
62
|
+
issuerCertificate?: {
|
|
63
|
+
subjectName: string;
|
|
64
|
+
notBefore: Date;
|
|
65
|
+
notAfter: Date;
|
|
66
|
+
serialNumber: string;
|
|
67
|
+
thumbprint: string;
|
|
68
|
+
pem: string;
|
|
69
|
+
};
|
|
70
|
+
issuerSignature: {
|
|
71
|
+
alg: string;
|
|
72
|
+
isValid: boolean;
|
|
73
|
+
reasons?: string[];
|
|
74
|
+
digests: {
|
|
75
|
+
[ns: string]: number;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
deviceKey: {
|
|
79
|
+
jwk: JWK;
|
|
80
|
+
};
|
|
81
|
+
deviceSignature: {
|
|
82
|
+
alg: string;
|
|
83
|
+
isValid: boolean;
|
|
84
|
+
reasons?: string[];
|
|
85
|
+
};
|
|
86
|
+
dataIntegrity: {
|
|
87
|
+
disclosedAttributes: string;
|
|
88
|
+
isValid: boolean;
|
|
89
|
+
reasons?: string[];
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
export type DeviceKeyInfo = {
|
|
93
|
+
deviceKey: Map<number, number | Uint8Array>;
|
|
94
|
+
[key: string]: any;
|
|
95
|
+
};
|
|
96
|
+
export type MSO = {
|
|
97
|
+
digestAlgorithm: DigestAlgorithm;
|
|
98
|
+
docType: string;
|
|
99
|
+
version: string;
|
|
100
|
+
validityInfo: ValidityInfo;
|
|
101
|
+
valueDigests?: Map<string, Map<number, Uint8Array>>;
|
|
102
|
+
validityDigests?: {
|
|
103
|
+
[key: string]: Map<number, Uint8Array>;
|
|
104
|
+
};
|
|
105
|
+
deviceKeyInfo?: DeviceKeyInfo;
|
|
106
|
+
};
|
|
107
|
+
export type DocType = 'org.iso.18013.5.1.mDL' | string;
|
|
108
|
+
export type SupportedAlgs = 'ES256' | 'ES384' | 'ES512' | 'EdDSA';
|
|
109
|
+
export type MacSupportedAlgs = 'HS256';
|
|
110
|
+
export {};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWRvYy9tb2RlbC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.parse = void 0;
|
|
7
|
+
const compare_versions_1 = require("compare-versions");
|
|
8
|
+
const cose_kit_1 = require("cose-kit");
|
|
9
|
+
const cbor_1 = require("../cbor");
|
|
10
|
+
const MDoc_1 = require("./model/MDoc");
|
|
11
|
+
const IssuerAuth_1 = __importDefault(require("./model/IssuerAuth"));
|
|
12
|
+
const IssuerSignedItem_1 = require("./IssuerSignedItem");
|
|
13
|
+
const errors_1 = require("./errors");
|
|
14
|
+
const IssuerSignedDocument_1 = require("./model/IssuerSignedDocument");
|
|
15
|
+
const DeviceSignedDocument_1 = require("./model/DeviceSignedDocument");
|
|
16
|
+
const parseIssuerAuthElement = (rawIssuerAuth, expectedDocType) => {
|
|
17
|
+
const issuerAuth = new IssuerAuth_1.default(...rawIssuerAuth);
|
|
18
|
+
const { decodedPayload } = issuerAuth;
|
|
19
|
+
const { docType, version } = decodedPayload;
|
|
20
|
+
if (docType !== expectedDocType) {
|
|
21
|
+
throw new errors_1.MDLParseError(`The issuerAuth docType must be ${expectedDocType}`);
|
|
22
|
+
}
|
|
23
|
+
if (!version || (0, compare_versions_1.compareVersions)(version, '1.0') !== 0) {
|
|
24
|
+
throw new errors_1.MDLParseError("The issuerAuth version must be '1.0'");
|
|
25
|
+
}
|
|
26
|
+
return issuerAuth;
|
|
27
|
+
};
|
|
28
|
+
const parseDeviceAuthElement = (rawDeviceAuth) => {
|
|
29
|
+
const { deviceSignature, deviceMac } = Object.fromEntries(rawDeviceAuth);
|
|
30
|
+
if (deviceSignature) {
|
|
31
|
+
return { deviceSignature: new cose_kit_1.Sign1(...deviceSignature) };
|
|
32
|
+
}
|
|
33
|
+
return { deviceMac: new cose_kit_1.Mac0(...deviceMac) };
|
|
34
|
+
};
|
|
35
|
+
const namespaceToArray = (entries) => {
|
|
36
|
+
return entries.map((di) => new IssuerSignedItem_1.IssuerSignedItem(di));
|
|
37
|
+
};
|
|
38
|
+
const mapIssuerNameSpaces = (namespace) => {
|
|
39
|
+
return Array.from(namespace.entries()).reduce((prev, [nameSpace, entries]) => {
|
|
40
|
+
const mappedNamespace = namespaceToArray(entries);
|
|
41
|
+
return {
|
|
42
|
+
...prev,
|
|
43
|
+
[nameSpace]: mappedNamespace,
|
|
44
|
+
};
|
|
45
|
+
}, {});
|
|
46
|
+
};
|
|
47
|
+
const mapDeviceNameSpaces = (namespace) => {
|
|
48
|
+
const entries = Array.from(namespace.entries()).map(([ns, attrs]) => {
|
|
49
|
+
return [ns, Object.fromEntries(attrs.entries())];
|
|
50
|
+
});
|
|
51
|
+
return Object.fromEntries(entries);
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Parse an mdoc
|
|
55
|
+
*
|
|
56
|
+
* @param encoded - The cbor encoded mdoc
|
|
57
|
+
* @returns {Promise<MDoc>} - The parsed device response
|
|
58
|
+
*/
|
|
59
|
+
const parse = (encoded) => {
|
|
60
|
+
let deviceResponse;
|
|
61
|
+
try {
|
|
62
|
+
deviceResponse = (0, cbor_1.cborDecode)(encoded);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
throw new errors_1.MDLParseError(`Unable to decode device response: ${err.message}`);
|
|
66
|
+
}
|
|
67
|
+
const { version, documents, status } = Object.fromEntries(deviceResponse);
|
|
68
|
+
const parsedDocuments = documents.map((doc) => {
|
|
69
|
+
const issuerAuth = parseIssuerAuthElement(doc.get('issuerSigned').get('issuerAuth'), doc.get('docType'));
|
|
70
|
+
const issuerSigned = doc.has('issuerSigned') ? {
|
|
71
|
+
...doc.get('issuerSigned'),
|
|
72
|
+
nameSpaces: mapIssuerNameSpaces(doc.get('issuerSigned').get('nameSpaces')),
|
|
73
|
+
issuerAuth,
|
|
74
|
+
} : undefined;
|
|
75
|
+
const deviceSigned = doc.has('deviceSigned') ? {
|
|
76
|
+
...doc.get('deviceSigned'),
|
|
77
|
+
nameSpaces: mapDeviceNameSpaces(doc.get('deviceSigned').get('nameSpaces').data),
|
|
78
|
+
deviceAuth: parseDeviceAuthElement(doc.get('deviceSigned').get('deviceAuth')),
|
|
79
|
+
} : undefined;
|
|
80
|
+
if (deviceSigned) {
|
|
81
|
+
return new DeviceSignedDocument_1.DeviceSignedDocument(doc.get('docType'), issuerSigned, deviceSigned);
|
|
82
|
+
}
|
|
83
|
+
return new IssuerSignedDocument_1.IssuerSignedDocument(doc.get('docType'), issuerSigned);
|
|
84
|
+
});
|
|
85
|
+
return new MDoc_1.MDoc(parsedDocuments, version, status);
|
|
86
|
+
};
|
|
87
|
+
exports.parse = parse;
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21kb2MvcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHVEQUFtRDtBQUNuRCx1Q0FBdUM7QUFDdkMsa0NBQXFDO0FBQ3JDLHVDQUFvQztBQUlwQyxvRUFBNEM7QUFDNUMseURBQXNEO0FBQ3RELHFDQUF5QztBQUN6Qyx1RUFBb0U7QUFDcEUsdUVBQW9FO0FBRXBFLE1BQU0sc0JBQXNCLEdBQUcsQ0FDN0IsYUFBNEIsRUFDNUIsZUFBdUIsRUFDWCxFQUFFO0lBQ2QsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBVSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUM7SUFDcEQsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUN0QyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGNBQWMsQ0FBQztJQUU1QyxJQUFJLE9BQU8sS0FBSyxlQUFlLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksc0JBQWEsQ0FBQyxrQ0FBa0MsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFBLGtDQUFlLEVBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxzQkFBYSxDQUFDLHNDQUFzQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxhQUE0QixFQUFjLEVBQUU7SUFDMUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pFLElBQUksZUFBZSxFQUFFLENBQUM7UUFDcEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLGdCQUFLLENBQUMsR0FB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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const hmacSHA256: (key: ArrayBuffer, data: ArrayBuffer) => Promise<ArrayBuffer>;
|
|
2
|
+
/**
|
|
3
|
+
* Calculates the ephemeral mac key for the device authentication.
|
|
4
|
+
*
|
|
5
|
+
* There are two cases for this function:
|
|
6
|
+
* 1. SDeviceKey.Priv and EReaderKey.Pub for the mdoc
|
|
7
|
+
* 2. EReaderKey.Priv and SDeviceKey.Pub for the mdoc reader
|
|
8
|
+
*
|
|
9
|
+
* @param {Uint8Array} privateKey - The private key of the current party (COSE)
|
|
10
|
+
* @param {Uint8Array} publicKey - The public key of the other party, (COSE)
|
|
11
|
+
* @param {Uint8Array} sessionTranscriptBytes - The session transcript bytes
|
|
12
|
+
* @returns {Uint8Array} - The ephemeral mac key
|
|
13
|
+
*/
|
|
14
|
+
export declare const calculateEphemeralMacKey: (privateKey: Uint8Array | Map<number, Uint8Array | number>, publicKey: Uint8Array | Map<number, Uint8Array | number>, sessionTranscriptBytes: Uint8Array) => Promise<Uint8Array>;
|
|
15
|
+
export declare const calculateDeviceAutenticationBytes: (sessionTranscript: Uint8Array | any, docType: string, nameSpaces: Record<string, Record<string, any>>) => Uint8Array;
|
|
16
|
+
export declare function getRandomBytes(len: number): Uint8Array<ArrayBuffer>;
|
|
17
|
+
export declare function fromPEM(pem: string): Uint8Array[];
|
|
@@ -0,0 +1,145 @@
|
|
|
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.calculateDeviceAutenticationBytes = exports.calculateEphemeralMacKey = exports.hmacSHA256 = void 0;
|
|
40
|
+
exports.getRandomBytes = getRandomBytes;
|
|
41
|
+
exports.fromPEM = fromPEM;
|
|
42
|
+
const pkijs = __importStar(require("pkijs"));
|
|
43
|
+
const p256_1 = require("@noble/curves/p256");
|
|
44
|
+
const p384_1 = require("@noble/curves/p384");
|
|
45
|
+
const p521_1 = require("@noble/curves/p521");
|
|
46
|
+
const webcrypto = __importStar(require("uncrypto"));
|
|
47
|
+
const buffer_1 = require("buffer");
|
|
48
|
+
const hkdf_1 = __importDefault(require("@panva/hkdf"));
|
|
49
|
+
const cose_kit_1 = require("cose-kit");
|
|
50
|
+
const cbor_1 = require("../cbor");
|
|
51
|
+
const DataItem_1 = require("../cbor/DataItem");
|
|
52
|
+
const coseKey_1 = __importDefault(require("../cose/coseKey"));
|
|
53
|
+
const { subtle } = webcrypto;
|
|
54
|
+
pkijs.setEngine('webcrypto', new pkijs.CryptoEngine({ name: 'webcrypto', crypto: webcrypto, subtle }));
|
|
55
|
+
const hmacSHA256 = async (key, data) => {
|
|
56
|
+
const saltHMACKey = await subtle.importKey('raw', key, { name: 'HMAC', hash: 'SHA-256' }, false, ['sign', 'verify']);
|
|
57
|
+
const hmac = await subtle.sign('HMAC', saltHMACKey, data);
|
|
58
|
+
return hmac;
|
|
59
|
+
};
|
|
60
|
+
exports.hmacSHA256 = hmacSHA256;
|
|
61
|
+
/**
|
|
62
|
+
* Calculates the ephemeral mac key for the device authentication.
|
|
63
|
+
*
|
|
64
|
+
* There are two cases for this function:
|
|
65
|
+
* 1. SDeviceKey.Priv and EReaderKey.Pub for the mdoc
|
|
66
|
+
* 2. EReaderKey.Priv and SDeviceKey.Pub for the mdoc reader
|
|
67
|
+
*
|
|
68
|
+
* @param {Uint8Array} privateKey - The private key of the current party (COSE)
|
|
69
|
+
* @param {Uint8Array} publicKey - The public key of the other party, (COSE)
|
|
70
|
+
* @param {Uint8Array} sessionTranscriptBytes - The session transcript bytes
|
|
71
|
+
* @returns {Uint8Array} - The ephemeral mac key
|
|
72
|
+
*/
|
|
73
|
+
const calculateEphemeralMacKey = async (privateKey, publicKey, sessionTranscriptBytes) => {
|
|
74
|
+
const { kty, crv } = (0, cose_kit_1.COSEKeyToJWK)(privateKey);
|
|
75
|
+
const privkey = (0, coseKey_1.default)(privateKey); // only d
|
|
76
|
+
const pubkey = (0, coseKey_1.default)(publicKey); // 0x04 || x || y
|
|
77
|
+
let ikm;
|
|
78
|
+
if ((kty === 'EC')) {
|
|
79
|
+
if (crv === 'P-256') {
|
|
80
|
+
ikm = p256_1.p256
|
|
81
|
+
.getSharedSecret(buffer_1.Buffer.from(privkey).toString('hex'), buffer_1.Buffer.from(pubkey).toString('hex'), true)
|
|
82
|
+
.slice(1);
|
|
83
|
+
}
|
|
84
|
+
else if (crv === 'P-384') {
|
|
85
|
+
ikm = p384_1.p384
|
|
86
|
+
.getSharedSecret(buffer_1.Buffer.from(privkey).toString('hex'), buffer_1.Buffer.from(pubkey).toString('hex'), true)
|
|
87
|
+
.slice(1);
|
|
88
|
+
}
|
|
89
|
+
else if (crv === 'P-521') {
|
|
90
|
+
ikm = p521_1.p521
|
|
91
|
+
.getSharedSecret(buffer_1.Buffer.from(privkey).toString('hex'), buffer_1.Buffer.from(pubkey).toString('hex'), true)
|
|
92
|
+
.slice(1);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
throw new Error(`unsupported EC curve: ${crv}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
throw new Error(`unsupported key type: ${kty}`);
|
|
100
|
+
}
|
|
101
|
+
const salt = new Uint8Array(await subtle.digest('SHA-256', sessionTranscriptBytes));
|
|
102
|
+
const info = buffer_1.Buffer.from('EMacKey', 'utf-8');
|
|
103
|
+
const result = await (0, hkdf_1.default)('sha256', ikm, salt, info, 32);
|
|
104
|
+
return result;
|
|
105
|
+
};
|
|
106
|
+
exports.calculateEphemeralMacKey = calculateEphemeralMacKey;
|
|
107
|
+
const calculateDeviceAutenticationBytes = (sessionTranscript, docType, nameSpaces) => {
|
|
108
|
+
let decodedSessionTranscript;
|
|
109
|
+
if (sessionTranscript instanceof Uint8Array) {
|
|
110
|
+
// assume is encoded in a DataItem
|
|
111
|
+
decodedSessionTranscript = (0, cbor_1.cborDecode)(sessionTranscript).data;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
decodedSessionTranscript = sessionTranscript;
|
|
115
|
+
}
|
|
116
|
+
const nameSpacesAsMap = new Map(Object.entries(nameSpaces).map(([ns, items]) => [ns, new Map(Object.entries(items))]));
|
|
117
|
+
const encode = DataItem_1.DataItem.fromData([
|
|
118
|
+
'DeviceAuthentication',
|
|
119
|
+
decodedSessionTranscript,
|
|
120
|
+
docType,
|
|
121
|
+
DataItem_1.DataItem.fromData(nameSpacesAsMap),
|
|
122
|
+
]);
|
|
123
|
+
const result = (0, cbor_1.cborEncode)(encode);
|
|
124
|
+
return result;
|
|
125
|
+
};
|
|
126
|
+
exports.calculateDeviceAutenticationBytes = calculateDeviceAutenticationBytes;
|
|
127
|
+
function getRandomBytes(len) {
|
|
128
|
+
return webcrypto.getRandomValues(new Uint8Array(len));
|
|
129
|
+
}
|
|
130
|
+
function fromPEM(pem) {
|
|
131
|
+
const certs = pem
|
|
132
|
+
.split(/-----END CERTIFICATE-----/)
|
|
133
|
+
.map((block) => block.trim())
|
|
134
|
+
.filter((block) => block.length > 0)
|
|
135
|
+
.map((block) => {
|
|
136
|
+
const fullBlock = `${block}\n-----END CERTIFICATE-----`;
|
|
137
|
+
const base64 = fullBlock
|
|
138
|
+
.replace(/-----BEGIN CERTIFICATE-----/, '')
|
|
139
|
+
.replace(/-----END CERTIFICATE-----/, '')
|
|
140
|
+
.replace(/\s+/g, '');
|
|
141
|
+
return buffer_1.Buffer.from(base64, 'base64');
|
|
142
|
+
});
|
|
143
|
+
return certs;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWRvYy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzSEEsd0NBRUM7QUFFRCwwQkFlQztBQXpJRCw2Q0FBK0I7QUFDL0IsNkNBQTBDO0FBQzFDLDZDQUEwQztBQUMxQyw2Q0FBMEM7QUFDMUMsb0RBQXNDO0FBQ3RDLG1DQUFnQztBQUNoQyx1REFBK0I7QUFDL0IsdUNBQXdDO0FBRXhDLGtDQUFpRDtBQUNqRCwrQ0FBNEM7QUFDNUMsOERBQTJDO0FBRTNDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUM7QUFFN0IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVoRyxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQzdCLEdBQWdCLEVBQ2hCLElBQWlCLEVBQ0ssRUFBRTtJQUN4QixNQUFNLFdBQVcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQ3hDLEtBQUssRUFDTCxHQUFHLEVBQ0gsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFDakMsS0FBSyxFQUNMLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUNuQixDQUFDO0lBRUYsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFMUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFmVyxRQUFBLFVBQVUsY0FlckI7QUFFRjs7Ozs7Ozs7Ozs7R0FXRztBQUNJLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUMzQyxV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
|
package/package.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vess-id/mdl",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Parse and and validate MDOC CBOR encoded binaries according to ISO 18013-5.",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"types": "lib/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"test": "jest --verbose",
|
|
9
|
+
"lint": "eslint ./src/**/*.ts",
|
|
10
|
+
"build": "rm -rf lib ; tsc",
|
|
11
|
+
"prepare": "husky"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/vess-id/mdl.git"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"vess",
|
|
19
|
+
"mdl",
|
|
20
|
+
"iso-18013-5",
|
|
21
|
+
"iso-18013-7",
|
|
22
|
+
"m-doc",
|
|
23
|
+
"m-doc-cbor",
|
|
24
|
+
"m-doc-cbor-parser",
|
|
25
|
+
"m-doc-cbor-validator",
|
|
26
|
+
"m-doc-cbor-encoder",
|
|
27
|
+
"m-doc-cbor-decoder",
|
|
28
|
+
"m-doc-cbor-iso-18013-5",
|
|
29
|
+
"m-doc-cbor-iso-18013-5-parser",
|
|
30
|
+
"m-doc-cbor-iso-18013-5-validator",
|
|
31
|
+
"m-doc-cbor-iso-18013-5-encoder",
|
|
32
|
+
"m-doc-cbor-iso-18013-5-decoder"
|
|
33
|
+
],
|
|
34
|
+
"author": {
|
|
35
|
+
"name": "Auth0 Inc.",
|
|
36
|
+
"url": "https://auth0.com"
|
|
37
|
+
},
|
|
38
|
+
"contributors": [
|
|
39
|
+
"José Romaniello (https://x.com/jfroma)",
|
|
40
|
+
"Sebastian Iacomuzzi (https://x.com/sebasiaco)"
|
|
41
|
+
],
|
|
42
|
+
"files": [
|
|
43
|
+
"lib/**/*"
|
|
44
|
+
],
|
|
45
|
+
"license": "Apache-2.0",
|
|
46
|
+
"devDependencies": {
|
|
47
|
+
"@commitlint/cli": "^19.3.0",
|
|
48
|
+
"@commitlint/config-conventional": "^19.2.2",
|
|
49
|
+
"@types/debug": "^4.1.8",
|
|
50
|
+
"@types/jest": "^29.5.4",
|
|
51
|
+
"@types/node": "^20.5.3",
|
|
52
|
+
"@typescript-eslint/eslint-plugin": "^6.1.0",
|
|
53
|
+
"@typescript-eslint/parser": "^6.1.0",
|
|
54
|
+
"arraybuffer-equal": "^1.0.4",
|
|
55
|
+
"buffer-tag": "^1.0.2",
|
|
56
|
+
"eslint": "^8.45.0",
|
|
57
|
+
"eslint-config-airbnb-base": "^15.0.0",
|
|
58
|
+
"eslint-plugin-import": "^2.27.5",
|
|
59
|
+
"eslint-plugin-jest": "^27.2.3",
|
|
60
|
+
"husky": "^9.1.4",
|
|
61
|
+
"jest": "^29.6.3",
|
|
62
|
+
"ts-jest": "^29.1.1",
|
|
63
|
+
"ts-loader": "^9.4.4",
|
|
64
|
+
"typescript": "^5.1.6"
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@noble/curves": "^1.2.0",
|
|
68
|
+
"@panva/hkdf": "^1.1.1",
|
|
69
|
+
"@peculiar/x509": "^1.9.5",
|
|
70
|
+
"buffer": "^6.0.3",
|
|
71
|
+
"cbor-x": "^1.5.9",
|
|
72
|
+
"compare-versions": "^6.0.0",
|
|
73
|
+
"cose-kit": "^1.7.1",
|
|
74
|
+
"debug": "^4.3.4",
|
|
75
|
+
"jose": "^4.15.5",
|
|
76
|
+
"pkijs": "^3.2.5",
|
|
77
|
+
"uncrypto": "^0.1.3"
|
|
78
|
+
},
|
|
79
|
+
"engines": {
|
|
80
|
+
"node": ">=16.0.0"
|
|
81
|
+
}
|
|
82
|
+
}
|