@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,49 @@
|
|
|
1
|
+
export declare const VerificationAssessmentId: {
|
|
2
|
+
readonly ISSUER_AUTH: {
|
|
3
|
+
readonly IssuerCertificateValidity: "ISSUER_CERTIFICATE_VALIDITY";
|
|
4
|
+
readonly IssuerSignatureValidity: "ISSUER_SIGNATURE_VALIDITY";
|
|
5
|
+
readonly MsoSignedDateWithinCertificateValidity: "MSO_SIGNED_DATE_WITHIN_CERTIFICATE_VALIDITY";
|
|
6
|
+
readonly MsoValidityAtVerificationTime: "MSO_VALIDITY_AT_VERIFICATION_TIME";
|
|
7
|
+
readonly IssuerSubjectCountryNamePresence: "ISSUER_SUBJECT_COUNTRY_NAME_PRESENCE";
|
|
8
|
+
};
|
|
9
|
+
readonly DEVICE_AUTH: {
|
|
10
|
+
readonly DocumentDeviceSignaturePresence: "DOCUMENT_DEVICE_SIGNATURE_PRESENCE";
|
|
11
|
+
readonly DeviceAuthSignatureOrMacPresence: "DEVICE_AUTH_SIGNATURE_OR_MAC_PRESENCE";
|
|
12
|
+
readonly SessionTranscriptProvided: "SESSION_TRANSCRIPT_PROVIDED";
|
|
13
|
+
readonly DeviceKeyAvailableInIssuerAuth: "DEVICE_KEY_AVAILABLE_IN_ISSUERAUTH";
|
|
14
|
+
readonly DeviceSignatureValidity: "DEVICE_SIGNATURE_VALIDITY";
|
|
15
|
+
readonly DeviceMacPresence: "DEVICE_MAC_PRESENCE";
|
|
16
|
+
readonly DeviceMacAlgorithmCorrectness: "DEVICE_MAC_ALGORITHM_CORRECTNESS";
|
|
17
|
+
readonly EphemeralKeyPresence: "EPHEMERAL_KEY_PRESENCE";
|
|
18
|
+
readonly DeviceMacValidity: "DEVICE_MAC_VALIDITY";
|
|
19
|
+
};
|
|
20
|
+
readonly DATA_INTEGRITY: {
|
|
21
|
+
readonly IssuerAuthDigestAlgorithmSupported: "ISSUER_AUTH_DIGEST_ALGORITHM_SUPPORTED";
|
|
22
|
+
readonly IssuerAuthNamespaceDigestPresence: "ISSUER_AUTH_NAMESPACE_DIGEST_PRESENCE";
|
|
23
|
+
readonly AttributeDigestMatch: "ATTRIBUTE_DIGEST_MATCH";
|
|
24
|
+
readonly IssuingCountryMatchesCertificate: "ISSUING_COUNTRY_MATCHES_CERTIFICATE";
|
|
25
|
+
readonly IssuingJurisdictionMatchesCertificate: "ISSUING_JURISDICTION_MATCHES_CERTIFICATE";
|
|
26
|
+
};
|
|
27
|
+
readonly DOCUMENT_FORMAT: {
|
|
28
|
+
readonly DeviceResponseVersionPresence: "DEVICE_RESPONSE_VERSION_PRESENCE";
|
|
29
|
+
readonly DeviceResponseVersionSupported: "DEVICE_RESPONSE_VERSION_SUPPORTED";
|
|
30
|
+
readonly DeviceResponseDocumentPresence: "DEVICE_RESPONSE_DOCUMENT_PRESENCE";
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export type VerificationAssessment = {
|
|
34
|
+
status: 'PASSED' | 'FAILED' | 'WARNING';
|
|
35
|
+
check: string;
|
|
36
|
+
reason?: string;
|
|
37
|
+
} & {
|
|
38
|
+
[C in keyof typeof VerificationAssessmentId]: {
|
|
39
|
+
category: C;
|
|
40
|
+
id: typeof VerificationAssessmentId[C][keyof typeof VerificationAssessmentId[C]];
|
|
41
|
+
};
|
|
42
|
+
}[keyof typeof VerificationAssessmentId];
|
|
43
|
+
export type VerificationCallback = (item: VerificationAssessment) => void;
|
|
44
|
+
export type UserDefinedVerificationCallback = (item: VerificationAssessment, original: VerificationCallback) => void;
|
|
45
|
+
export declare const defaultCallback: VerificationCallback;
|
|
46
|
+
export declare const buildCallback: (callback?: UserDefinedVerificationCallback) => VerificationCallback;
|
|
47
|
+
export declare const onCatCheck: <C extends keyof typeof VerificationAssessmentId>(onCheck: UserDefinedVerificationCallback, category: C) => (item: Omit<Extract<VerificationAssessment, {
|
|
48
|
+
category: C;
|
|
49
|
+
}>, "category">) => void;
|
|
@@ -0,0 +1,63 @@
|
|
|
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.onCatCheck = exports.buildCallback = exports.defaultCallback = exports.VerificationAssessmentId = void 0;
|
|
7
|
+
const debug_1 = __importDefault(require("debug"));
|
|
8
|
+
const errors_1 = require("./errors");
|
|
9
|
+
const log = (0, debug_1.default)('mdl');
|
|
10
|
+
exports.VerificationAssessmentId = {
|
|
11
|
+
ISSUER_AUTH: {
|
|
12
|
+
IssuerCertificateValidity: 'ISSUER_CERTIFICATE_VALIDITY',
|
|
13
|
+
IssuerSignatureValidity: 'ISSUER_SIGNATURE_VALIDITY',
|
|
14
|
+
MsoSignedDateWithinCertificateValidity: 'MSO_SIGNED_DATE_WITHIN_CERTIFICATE_VALIDITY',
|
|
15
|
+
MsoValidityAtVerificationTime: 'MSO_VALIDITY_AT_VERIFICATION_TIME',
|
|
16
|
+
IssuerSubjectCountryNamePresence: 'ISSUER_SUBJECT_COUNTRY_NAME_PRESENCE',
|
|
17
|
+
},
|
|
18
|
+
DEVICE_AUTH: {
|
|
19
|
+
DocumentDeviceSignaturePresence: 'DOCUMENT_DEVICE_SIGNATURE_PRESENCE',
|
|
20
|
+
DeviceAuthSignatureOrMacPresence: 'DEVICE_AUTH_SIGNATURE_OR_MAC_PRESENCE',
|
|
21
|
+
SessionTranscriptProvided: 'SESSION_TRANSCRIPT_PROVIDED',
|
|
22
|
+
DeviceKeyAvailableInIssuerAuth: 'DEVICE_KEY_AVAILABLE_IN_ISSUERAUTH',
|
|
23
|
+
DeviceSignatureValidity: 'DEVICE_SIGNATURE_VALIDITY',
|
|
24
|
+
DeviceMacPresence: 'DEVICE_MAC_PRESENCE',
|
|
25
|
+
DeviceMacAlgorithmCorrectness: 'DEVICE_MAC_ALGORITHM_CORRECTNESS',
|
|
26
|
+
EphemeralKeyPresence: 'EPHEMERAL_KEY_PRESENCE',
|
|
27
|
+
DeviceMacValidity: 'DEVICE_MAC_VALIDITY',
|
|
28
|
+
},
|
|
29
|
+
DATA_INTEGRITY: {
|
|
30
|
+
IssuerAuthDigestAlgorithmSupported: 'ISSUER_AUTH_DIGEST_ALGORITHM_SUPPORTED',
|
|
31
|
+
IssuerAuthNamespaceDigestPresence: 'ISSUER_AUTH_NAMESPACE_DIGEST_PRESENCE',
|
|
32
|
+
AttributeDigestMatch: 'ATTRIBUTE_DIGEST_MATCH',
|
|
33
|
+
IssuingCountryMatchesCertificate: 'ISSUING_COUNTRY_MATCHES_CERTIFICATE',
|
|
34
|
+
IssuingJurisdictionMatchesCertificate: 'ISSUING_JURISDICTION_MATCHES_CERTIFICATE',
|
|
35
|
+
},
|
|
36
|
+
DOCUMENT_FORMAT: {
|
|
37
|
+
DeviceResponseVersionPresence: 'DEVICE_RESPONSE_VERSION_PRESENCE',
|
|
38
|
+
DeviceResponseVersionSupported: 'DEVICE_RESPONSE_VERSION_SUPPORTED',
|
|
39
|
+
DeviceResponseDocumentPresence: 'DEVICE_RESPONSE_DOCUMENT_PRESENCE',
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
exports.defaultCallback = ((verification) => {
|
|
43
|
+
log(`Verification: ${verification.check} => ${verification.status}`);
|
|
44
|
+
if (verification.status !== 'FAILED')
|
|
45
|
+
return;
|
|
46
|
+
throw new errors_1.MDLError(verification.reason ?? verification.check, verification.id);
|
|
47
|
+
});
|
|
48
|
+
const buildCallback = (callback) => {
|
|
49
|
+
if (typeof callback === 'undefined') {
|
|
50
|
+
return exports.defaultCallback;
|
|
51
|
+
}
|
|
52
|
+
return (item) => {
|
|
53
|
+
callback(item, exports.defaultCallback);
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
exports.buildCallback = buildCallback;
|
|
57
|
+
const onCatCheck = (onCheck, category) => {
|
|
58
|
+
return (item) => {
|
|
59
|
+
onCheck({ ...item, category }, exports.defaultCallback);
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
exports.onCatCheck = onCatCheck;
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tDYWxsYmFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tZG9jL2NoZWNrQ2FsbGJhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLHFDQUFvQztBQUVwQyxNQUFNLEdBQUcsR0FBRyxJQUFBLGVBQUssRUFBQyxLQUFLLENBQUMsQ0FBQztBQUVaLFFBQUEsd0JBQXdCLEdBQUc7SUFDdEMsV0FBVyxFQUFFO1FBQ1gseUJBQXlCLEVBQUUsNkJBQTZCO1FBQ3hELHVCQUF1QixFQUFFLDJCQUEyQjtRQUNwRCxzQ0FBc0MsRUFBRSw2Q0FBNkM7UUFDckYsNkJBQTZCLEVBQUUsbUNBQW1DO1FBQ2xFLGdDQUFnQyxFQUFFLHNDQUFzQztLQUN6RTtJQUVELFdBQVcsRUFBRTtRQUNYLCtCQUErQixFQUFFLG9DQUFvQztRQUNyRSxnQ0FBZ0MsRUFBRSx1Q0FBdUM7UUFDekUseUJBQXlCLEVBQUUsNkJBQTZCO1FBQ3hELDhCQUE4QixFQUFFLG9DQUFvQztRQUNwRSx1QkFBdUIsRUFBRSwyQkFBMkI7UUFDcEQsaUJBQWlCLEVBQUUscUJBQXFCO1FBQ3hDLDZCQUE2QixFQUFFLGtDQUFrQztRQUNqRSxvQkFBb0IsRUFBRSx3QkFBd0I7UUFDOUMsaUJBQWlCLEVBQUUscUJBQXFCO0tBQ3pDO0lBRUQsY0FBYyxFQUFFO1FBQ2Qsa0NBQWtDLEVBQUUsd0NBQXdDO1FBQzVFLGlDQUFpQyxFQUFFLHVDQUF1QztRQUMxRSxvQkFBb0IsRUFBRSx3QkFBd0I7UUFDOUMsZ0NBQWdDLEVBQUUscUNBQXFDO1FBQ3ZFLHFDQUFxQyxFQUFFLDBDQUEwQztLQUNsRjtJQUVELGVBQWUsRUFBRTtRQUNmLDZCQUE2QixFQUFFLGtDQUFrQztRQUNqRSw4QkFBOEIsRUFBRSxtQ0FBbUM7UUFDbkUsOEJBQThCLEVBQUUsbUNBQW1DO0tBQ3BFO0NBQ08sQ0FBQztBQWdCRSxRQUFBLGVBQWUsR0FBeUIsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO0lBQ3JFLEdBQUcsQ0FBQyxpQkFBaUIsWUFBWSxDQUFDLEtBQUssT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRSxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssUUFBUTtRQUFFLE9BQU87SUFDN0MsTUFBTSxJQUFJLGlCQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRixDQUFDLENBQUMsQ0FBQztBQUVJLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBMEMsRUFBd0IsRUFBRTtJQUNoRyxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQUMsT0FBTyx1QkFBZSxDQUFDO0lBQUMsQ0FBQztJQUNoRSxPQUFPLENBQUMsSUFBNEIsRUFBRSxFQUFFO1FBQ3RDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsdUJBQWUsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUxXLFFBQUEsYUFBYSxpQkFLeEI7QUFFSyxNQUFNLFVBQVUsR0FBRyxDQUFrRCxPQUF3QyxFQUFFLFFBQVcsRUFBRSxFQUFFO0lBQ25JLE9BQU8sQ0FBQyxJQUF3RSxFQUFFLEVBQUU7UUFDbEYsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUE0QixFQUFFLHVCQUFlLENBQUMsQ0FBQztJQUM1RSxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFKVyxRQUFBLFVBQVUsY0FJckIifQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MDLParseError = exports.MDLError = void 0;
|
|
4
|
+
class MDLError extends Error {
|
|
5
|
+
constructor(message, code) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = new.target.name;
|
|
8
|
+
this.code = code;
|
|
9
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.MDLError = MDLError;
|
|
13
|
+
class MDLParseError extends Error {
|
|
14
|
+
constructor(message) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = new.target.name;
|
|
17
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.MDLParseError = MDLParseError;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21kb2MvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQWEsUUFBUyxTQUFRLEtBQUs7SUFHakMsWUFBWSxPQUFlLEVBQUUsSUFBYTtRQUN4QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGO0FBVEQsNEJBU0M7QUFFRCxNQUFhLGFBQWMsU0FBUSxLQUFLO0lBQ3RDLFlBQVksT0FBZ0I7UUFDMUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztRQUM1QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQU5ELHNDQU1DIn0=
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import * as jose from 'jose';
|
|
2
|
+
import { Buffer } from 'buffer';
|
|
3
|
+
import { PresentationDefinition } from './PresentationDefinition';
|
|
4
|
+
import { MDoc } from './MDoc';
|
|
5
|
+
import { MacSupportedAlgs, SupportedAlgs } from './types';
|
|
6
|
+
/**
|
|
7
|
+
* A builder class for creating a device response.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DeviceResponse {
|
|
10
|
+
private mdoc;
|
|
11
|
+
private pd;
|
|
12
|
+
private sessionTranscriptBytes;
|
|
13
|
+
private useMac;
|
|
14
|
+
private devicePrivateKey;
|
|
15
|
+
deviceResponseCbor: Buffer;
|
|
16
|
+
nameSpaces: Record<string, Record<string, any>>;
|
|
17
|
+
private alg;
|
|
18
|
+
private macAlg;
|
|
19
|
+
private ephemeralPublicKey;
|
|
20
|
+
/**
|
|
21
|
+
* Create a DeviceResponse builder.
|
|
22
|
+
*
|
|
23
|
+
* @param {MDoc | Uint8Array} mdoc - The mdoc to use as a base for the device response.
|
|
24
|
+
* It can be either a parsed MDoc or a CBOR encoded MDoc.
|
|
25
|
+
* @returns {DeviceResponse} - A DeviceResponse builder.
|
|
26
|
+
*/
|
|
27
|
+
static from(mdoc: MDoc | Uint8Array): DeviceResponse;
|
|
28
|
+
constructor(mdoc: MDoc);
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
* @param pd - The presentation definition to use for the device response.
|
|
32
|
+
* @returns {DeviceResponse}
|
|
33
|
+
*/
|
|
34
|
+
usingPresentationDefinition(pd: PresentationDefinition): DeviceResponse;
|
|
35
|
+
/**
|
|
36
|
+
* Set the session transcript data to use for the device response with the given handover data.
|
|
37
|
+
* this is a shortcut to calling {@link usingSessionTranscriptBytes}(`<cbor encoding of [null, null, handover] in a Tagged 24 structure>`),
|
|
38
|
+
* which is what the OID4VP protocol expects.
|
|
39
|
+
*
|
|
40
|
+
* @deprecated Use {@link usingSessionTranscriptForOID4VP} instead.
|
|
41
|
+
* @param {string[]} handover - The handover data to use in the session transcript.
|
|
42
|
+
* @returns {DeviceResponse}
|
|
43
|
+
*/
|
|
44
|
+
usingHandover(handover: string[]): DeviceResponse;
|
|
45
|
+
/**
|
|
46
|
+
* Set the session transcript data to use for the device response.
|
|
47
|
+
*
|
|
48
|
+
* This is arbitrary and should match the session transcript as it will be calculated by the verifier.
|
|
49
|
+
* The transcript must be a CBOR encoded DataItem of an array, there is no further requirement.
|
|
50
|
+
*
|
|
51
|
+
* Example: `usingSessionTranscriptBytes(cborEncode(DataItem.fromData([a,b,c])))` where `a`, `b` and `c` can be anything including `null`.
|
|
52
|
+
*
|
|
53
|
+
* It is preferable to use {@link usingSessionTranscriptForOID4VP} or {@link usingSessionTranscriptForWebAPI} when possible.
|
|
54
|
+
*
|
|
55
|
+
* @param {Buffer} sessionTranscriptBytes - The sessionTranscriptBytes data to use in the session transcript.
|
|
56
|
+
* @returns {DeviceResponse}
|
|
57
|
+
*/
|
|
58
|
+
usingSessionTranscriptBytes(sessionTranscriptBytes: Buffer): DeviceResponse;
|
|
59
|
+
/**
|
|
60
|
+
* Set the session transcript data to use for the device response as defined in ISO/IEC 18013-7 in Annex B (OID4VP), 2023 draft.
|
|
61
|
+
*
|
|
62
|
+
* This should match the session transcript as it will be calculated by the verifier.
|
|
63
|
+
*
|
|
64
|
+
* @param {string} mdocGeneratedNonce - A cryptographically random number with sufficient entropy.
|
|
65
|
+
* @param {string} clientId - The client_id Authorization Request parameter from the Authorization Request Object.
|
|
66
|
+
* @param {string} responseUri - The response_uri Authorization Request parameter from the Authorization Request Object.
|
|
67
|
+
* @param {string} verifierGeneratedNonce - The nonce Authorization Request parameter from the Authorization Request Object.
|
|
68
|
+
* @returns {DeviceResponse}
|
|
69
|
+
*/
|
|
70
|
+
usingSessionTranscriptForOID4VP(mdocGeneratedNonce: string, clientId: string, responseUri: string, verifierGeneratedNonce: string): DeviceResponse;
|
|
71
|
+
/**
|
|
72
|
+
* Set the session transcript data to use for the device response as defined in ISO/IEC 18013-7 in Annex A (Web API), 2023 draft.
|
|
73
|
+
*
|
|
74
|
+
* This should match the session transcript as it will be calculated by the verifier.
|
|
75
|
+
*
|
|
76
|
+
* @param {Buffer} deviceEngagementBytes - The device engagement, encoded as a Tagged 24 cbor
|
|
77
|
+
* @param {Buffer} readerEngagementBytes - The reader engagement, encoded as a Tagged 24 cbor
|
|
78
|
+
* @param {Buffer} eReaderKeyBytes - The reader ephemeral public key as a COSE Key, encoded as a Tagged 24 cbor
|
|
79
|
+
* @returns {DeviceResponse}
|
|
80
|
+
*/
|
|
81
|
+
usingSessionTranscriptForWebAPI(deviceEngagementBytes: Buffer, readerEngagementBytes: Buffer, eReaderKeyBytes: Buffer): DeviceResponse;
|
|
82
|
+
/**
|
|
83
|
+
* Add a name space to the device response.
|
|
84
|
+
*
|
|
85
|
+
* @param {string} nameSpace - The name space to add to the device response.
|
|
86
|
+
* @param {Record<string, any>} data - The data to add to the name space.
|
|
87
|
+
* @returns {DeviceResponse}
|
|
88
|
+
*/
|
|
89
|
+
addDeviceNameSpace(nameSpace: string, data: Record<string, any>): DeviceResponse;
|
|
90
|
+
/**
|
|
91
|
+
* Set the device's private key to be used for signing the device response.
|
|
92
|
+
*
|
|
93
|
+
* @param {jose.JWK | Uint8Array} devicePrivateKey - The device's private key either as a JWK or a COSEKey.
|
|
94
|
+
* @param {SupportedAlgs} alg - The algorithm to use for signing the device response.
|
|
95
|
+
* @returns {DeviceResponse}
|
|
96
|
+
*/
|
|
97
|
+
authenticateWithSignature(devicePrivateKey: jose.JWK | Uint8Array, alg: SupportedAlgs): DeviceResponse;
|
|
98
|
+
/**
|
|
99
|
+
* Set the reader shared key to be used for signing the device response with MAC.
|
|
100
|
+
*
|
|
101
|
+
* @param {jose.JWK | Uint8Array} devicePrivateKey - The device's private key either as a JWK or a COSEKey.
|
|
102
|
+
* @param {Uint8Array} ephemeralPublicKey - The public part of the ephemeral key generated by the MDOC.
|
|
103
|
+
* @param {SupportedAlgs} alg - The algorithm to use for signing the device response.
|
|
104
|
+
* @returns {DeviceResponse}
|
|
105
|
+
*/
|
|
106
|
+
authenticateWithMAC(devicePrivateKey: jose.JWK | Uint8Array, ephemeralPublicKey: Uint8Array, alg: MacSupportedAlgs): DeviceResponse;
|
|
107
|
+
/**
|
|
108
|
+
* Sign the device response and return the MDoc.
|
|
109
|
+
*
|
|
110
|
+
* @returns {Promise<MDoc>} - The device response as an MDoc.
|
|
111
|
+
*/
|
|
112
|
+
sign(): Promise<MDoc>;
|
|
113
|
+
private handleInputDescriptor;
|
|
114
|
+
private getDeviceSigned;
|
|
115
|
+
private getDeviceAuthMac;
|
|
116
|
+
private getDeviceAuthSign;
|
|
117
|
+
private prepareNamespaces;
|
|
118
|
+
private prepareDigest;
|
|
119
|
+
private handleAgeOverNN;
|
|
120
|
+
}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeviceResponse = void 0;
|
|
4
|
+
const cose_kit_1 = require("cose-kit");
|
|
5
|
+
const buffer_1 = require("buffer");
|
|
6
|
+
const MDoc_1 = require("./MDoc");
|
|
7
|
+
const DeviceSignedDocument_1 = require("./DeviceSignedDocument");
|
|
8
|
+
const parser_1 = require("../parser");
|
|
9
|
+
const utils_1 = require("../utils");
|
|
10
|
+
const cbor_1 = require("../../cbor");
|
|
11
|
+
/**
|
|
12
|
+
* A builder class for creating a device response.
|
|
13
|
+
*/
|
|
14
|
+
class DeviceResponse {
|
|
15
|
+
/**
|
|
16
|
+
* Create a DeviceResponse builder.
|
|
17
|
+
*
|
|
18
|
+
* @param {MDoc | Uint8Array} mdoc - The mdoc to use as a base for the device response.
|
|
19
|
+
* It can be either a parsed MDoc or a CBOR encoded MDoc.
|
|
20
|
+
* @returns {DeviceResponse} - A DeviceResponse builder.
|
|
21
|
+
*/
|
|
22
|
+
static from(mdoc) {
|
|
23
|
+
if (mdoc instanceof Uint8Array) {
|
|
24
|
+
return new DeviceResponse((0, parser_1.parse)(mdoc));
|
|
25
|
+
}
|
|
26
|
+
return new DeviceResponse(mdoc);
|
|
27
|
+
}
|
|
28
|
+
constructor(mdoc) {
|
|
29
|
+
this.useMac = true;
|
|
30
|
+
this.nameSpaces = {};
|
|
31
|
+
this.mdoc = mdoc;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
* @param pd - The presentation definition to use for the device response.
|
|
36
|
+
* @returns {DeviceResponse}
|
|
37
|
+
*/
|
|
38
|
+
usingPresentationDefinition(pd) {
|
|
39
|
+
if (!pd.input_descriptors.length) {
|
|
40
|
+
throw new Error('The Presentation Definition must have at least one Input Descriptor object.');
|
|
41
|
+
}
|
|
42
|
+
const hasDuplicates = pd.input_descriptors.some((id1, idx) => pd.input_descriptors.findIndex((id2) => id2.id === id1.id) !== idx);
|
|
43
|
+
if (hasDuplicates) {
|
|
44
|
+
throw new Error('Each Input Descriptor object must have a unique id property.');
|
|
45
|
+
}
|
|
46
|
+
this.pd = pd;
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Set the session transcript data to use for the device response with the given handover data.
|
|
51
|
+
* this is a shortcut to calling {@link usingSessionTranscriptBytes}(`<cbor encoding of [null, null, handover] in a Tagged 24 structure>`),
|
|
52
|
+
* which is what the OID4VP protocol expects.
|
|
53
|
+
*
|
|
54
|
+
* @deprecated Use {@link usingSessionTranscriptForOID4VP} instead.
|
|
55
|
+
* @param {string[]} handover - The handover data to use in the session transcript.
|
|
56
|
+
* @returns {DeviceResponse}
|
|
57
|
+
*/
|
|
58
|
+
usingHandover(handover) {
|
|
59
|
+
this.usingSessionTranscriptBytes((0, cbor_1.cborEncode)(cbor_1.DataItem.fromData([
|
|
60
|
+
null, // deviceEngagementBytes
|
|
61
|
+
null, // eReaderKeyBytes
|
|
62
|
+
handover
|
|
63
|
+
])));
|
|
64
|
+
return this;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Set the session transcript data to use for the device response.
|
|
68
|
+
*
|
|
69
|
+
* This is arbitrary and should match the session transcript as it will be calculated by the verifier.
|
|
70
|
+
* The transcript must be a CBOR encoded DataItem of an array, there is no further requirement.
|
|
71
|
+
*
|
|
72
|
+
* Example: `usingSessionTranscriptBytes(cborEncode(DataItem.fromData([a,b,c])))` where `a`, `b` and `c` can be anything including `null`.
|
|
73
|
+
*
|
|
74
|
+
* It is preferable to use {@link usingSessionTranscriptForOID4VP} or {@link usingSessionTranscriptForWebAPI} when possible.
|
|
75
|
+
*
|
|
76
|
+
* @param {Buffer} sessionTranscriptBytes - The sessionTranscriptBytes data to use in the session transcript.
|
|
77
|
+
* @returns {DeviceResponse}
|
|
78
|
+
*/
|
|
79
|
+
usingSessionTranscriptBytes(sessionTranscriptBytes) {
|
|
80
|
+
if (this.sessionTranscriptBytes) {
|
|
81
|
+
throw new Error('A session transcript has already been set, either with .usingSessionTranscriptForOID4VP, .usingSessionTranscriptForWebAPI or .usingSessionTranscriptBytes');
|
|
82
|
+
}
|
|
83
|
+
this.sessionTranscriptBytes = sessionTranscriptBytes;
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Set the session transcript data to use for the device response as defined in ISO/IEC 18013-7 in Annex B (OID4VP), 2023 draft.
|
|
88
|
+
*
|
|
89
|
+
* This should match the session transcript as it will be calculated by the verifier.
|
|
90
|
+
*
|
|
91
|
+
* @param {string} mdocGeneratedNonce - A cryptographically random number with sufficient entropy.
|
|
92
|
+
* @param {string} clientId - The client_id Authorization Request parameter from the Authorization Request Object.
|
|
93
|
+
* @param {string} responseUri - The response_uri Authorization Request parameter from the Authorization Request Object.
|
|
94
|
+
* @param {string} verifierGeneratedNonce - The nonce Authorization Request parameter from the Authorization Request Object.
|
|
95
|
+
* @returns {DeviceResponse}
|
|
96
|
+
*/
|
|
97
|
+
usingSessionTranscriptForOID4VP(mdocGeneratedNonce, clientId, responseUri, verifierGeneratedNonce) {
|
|
98
|
+
this.usingSessionTranscriptBytes((0, cbor_1.cborEncode)(cbor_1.DataItem.fromData([
|
|
99
|
+
null, // deviceEngagementBytes
|
|
100
|
+
null, // eReaderKeyBytes
|
|
101
|
+
[mdocGeneratedNonce, clientId, responseUri, verifierGeneratedNonce],
|
|
102
|
+
])));
|
|
103
|
+
return this;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Set the session transcript data to use for the device response as defined in ISO/IEC 18013-7 in Annex A (Web API), 2023 draft.
|
|
107
|
+
*
|
|
108
|
+
* This should match the session transcript as it will be calculated by the verifier.
|
|
109
|
+
*
|
|
110
|
+
* @param {Buffer} deviceEngagementBytes - The device engagement, encoded as a Tagged 24 cbor
|
|
111
|
+
* @param {Buffer} readerEngagementBytes - The reader engagement, encoded as a Tagged 24 cbor
|
|
112
|
+
* @param {Buffer} eReaderKeyBytes - The reader ephemeral public key as a COSE Key, encoded as a Tagged 24 cbor
|
|
113
|
+
* @returns {DeviceResponse}
|
|
114
|
+
*/
|
|
115
|
+
usingSessionTranscriptForWebAPI(deviceEngagementBytes, readerEngagementBytes, eReaderKeyBytes) {
|
|
116
|
+
this.usingSessionTranscriptBytes((0, cbor_1.cborEncode)(cbor_1.DataItem.fromData([
|
|
117
|
+
new cbor_1.DataItem({ buffer: deviceEngagementBytes }),
|
|
118
|
+
new cbor_1.DataItem({ buffer: eReaderKeyBytes }),
|
|
119
|
+
readerEngagementBytes,
|
|
120
|
+
])));
|
|
121
|
+
return this;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Add a name space to the device response.
|
|
125
|
+
*
|
|
126
|
+
* @param {string} nameSpace - The name space to add to the device response.
|
|
127
|
+
* @param {Record<string, any>} data - The data to add to the name space.
|
|
128
|
+
* @returns {DeviceResponse}
|
|
129
|
+
*/
|
|
130
|
+
addDeviceNameSpace(nameSpace, data) {
|
|
131
|
+
this.nameSpaces[nameSpace] = data;
|
|
132
|
+
return this;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Set the device's private key to be used for signing the device response.
|
|
136
|
+
*
|
|
137
|
+
* @param {jose.JWK | Uint8Array} devicePrivateKey - The device's private key either as a JWK or a COSEKey.
|
|
138
|
+
* @param {SupportedAlgs} alg - The algorithm to use for signing the device response.
|
|
139
|
+
* @returns {DeviceResponse}
|
|
140
|
+
*/
|
|
141
|
+
authenticateWithSignature(devicePrivateKey, alg) {
|
|
142
|
+
if (devicePrivateKey instanceof Uint8Array) {
|
|
143
|
+
this.devicePrivateKey = devicePrivateKey;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
this.devicePrivateKey = (0, cose_kit_1.COSEKeyFromJWK)(devicePrivateKey);
|
|
147
|
+
}
|
|
148
|
+
this.alg = alg;
|
|
149
|
+
this.useMac = false;
|
|
150
|
+
return this;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Set the reader shared key to be used for signing the device response with MAC.
|
|
154
|
+
*
|
|
155
|
+
* @param {jose.JWK | Uint8Array} devicePrivateKey - The device's private key either as a JWK or a COSEKey.
|
|
156
|
+
* @param {Uint8Array} ephemeralPublicKey - The public part of the ephemeral key generated by the MDOC.
|
|
157
|
+
* @param {SupportedAlgs} alg - The algorithm to use for signing the device response.
|
|
158
|
+
* @returns {DeviceResponse}
|
|
159
|
+
*/
|
|
160
|
+
authenticateWithMAC(devicePrivateKey, ephemeralPublicKey, alg) {
|
|
161
|
+
if (devicePrivateKey instanceof Uint8Array) {
|
|
162
|
+
this.devicePrivateKey = devicePrivateKey;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
this.devicePrivateKey = (0, cose_kit_1.COSEKeyFromJWK)(devicePrivateKey);
|
|
166
|
+
}
|
|
167
|
+
this.ephemeralPublicKey = ephemeralPublicKey;
|
|
168
|
+
this.macAlg = alg;
|
|
169
|
+
this.useMac = true;
|
|
170
|
+
return this;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Sign the device response and return the MDoc.
|
|
174
|
+
*
|
|
175
|
+
* @returns {Promise<MDoc>} - The device response as an MDoc.
|
|
176
|
+
*/
|
|
177
|
+
async sign() {
|
|
178
|
+
if (!this.pd)
|
|
179
|
+
throw new Error('Must provide a presentation definition with .usingPresentationDefinition()');
|
|
180
|
+
if (!this.sessionTranscriptBytes)
|
|
181
|
+
throw new Error('Must provide the session transcript with either .usingSessionTranscriptForOID4VP, .usingSessionTranscriptForWebAPI or .usingSessionTranscriptBytes');
|
|
182
|
+
const docs = await Promise.all(this.pd.input_descriptors.map((id) => this.handleInputDescriptor(id)));
|
|
183
|
+
return new MDoc_1.MDoc(docs);
|
|
184
|
+
}
|
|
185
|
+
async handleInputDescriptor(id) {
|
|
186
|
+
const document = (this.mdoc.documents || []).find((d) => d.docType === id.id);
|
|
187
|
+
if (!document) {
|
|
188
|
+
// TODO; probl need to create a DocumentError here, but let's just throw for now
|
|
189
|
+
throw new Error(`The mdoc does not have a document with DocType "${id.id}"`);
|
|
190
|
+
}
|
|
191
|
+
const nameSpaces = await this.prepareNamespaces(id, document);
|
|
192
|
+
return new DeviceSignedDocument_1.DeviceSignedDocument(document.docType, {
|
|
193
|
+
nameSpaces,
|
|
194
|
+
issuerAuth: document.issuerSigned.issuerAuth,
|
|
195
|
+
}, await this.getDeviceSigned(document.docType));
|
|
196
|
+
}
|
|
197
|
+
async getDeviceSigned(docType) {
|
|
198
|
+
const deviceAuthenticationBytes = (0, utils_1.calculateDeviceAutenticationBytes)(this.sessionTranscriptBytes, docType, this.nameSpaces);
|
|
199
|
+
const deviceSigned = {
|
|
200
|
+
nameSpaces: this.nameSpaces,
|
|
201
|
+
deviceAuth: this.useMac
|
|
202
|
+
? await this.getDeviceAuthMac(deviceAuthenticationBytes, this.sessionTranscriptBytes)
|
|
203
|
+
: await this.getDeviceAuthSign(deviceAuthenticationBytes),
|
|
204
|
+
};
|
|
205
|
+
return deviceSigned;
|
|
206
|
+
}
|
|
207
|
+
async getDeviceAuthMac(deviceAuthenticationBytes, sessionTranscriptBytes) {
|
|
208
|
+
const { kid } = (0, cose_kit_1.COSEKeyToJWK)(this.devicePrivateKey);
|
|
209
|
+
const ephemeralMacKey = await (0, utils_1.calculateEphemeralMacKey)(this.devicePrivateKey, this.ephemeralPublicKey, sessionTranscriptBytes);
|
|
210
|
+
const mac = await cose_kit_1.Mac0.create({ alg: this.macAlg }, { kid }, deviceAuthenticationBytes, ephemeralMacKey);
|
|
211
|
+
return { deviceMac: mac };
|
|
212
|
+
}
|
|
213
|
+
async getDeviceAuthSign(cborData) {
|
|
214
|
+
if (!this.devicePrivateKey)
|
|
215
|
+
throw new Error('Missing devicePrivateKey');
|
|
216
|
+
const key = await (0, cose_kit_1.importCOSEKey)(this.devicePrivateKey);
|
|
217
|
+
const { kid } = (0, cose_kit_1.COSEKeyToJWK)(this.devicePrivateKey);
|
|
218
|
+
const deviceSignature = await cose_kit_1.Sign1.sign({ alg: this.alg }, { kid }, buffer_1.Buffer.from(cborData), key);
|
|
219
|
+
return { deviceSignature };
|
|
220
|
+
}
|
|
221
|
+
async prepareNamespaces(id, document) {
|
|
222
|
+
const requestedFields = id.constraints.fields;
|
|
223
|
+
const nameSpaces = {};
|
|
224
|
+
for await (const field of requestedFields) {
|
|
225
|
+
const result = await this.prepareDigest(field.path, document);
|
|
226
|
+
if (!result) {
|
|
227
|
+
// TODO: Do we add an entry to DocumentErrors if not found?
|
|
228
|
+
console.log(`No matching field found for ${field.path}`);
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const { nameSpace, digest } = result;
|
|
232
|
+
if (!nameSpaces[nameSpace])
|
|
233
|
+
nameSpaces[nameSpace] = [];
|
|
234
|
+
nameSpaces[nameSpace].push(digest);
|
|
235
|
+
}
|
|
236
|
+
return nameSpaces;
|
|
237
|
+
}
|
|
238
|
+
async prepareDigest(paths, document) {
|
|
239
|
+
/**
|
|
240
|
+
* path looks like this: "$['org.iso.18013.5.1']['family_name']"
|
|
241
|
+
* the regex creates two groups with contents between "['" and "']"
|
|
242
|
+
* the second entry in each group contains the result without the "'[" or "']"
|
|
243
|
+
*/
|
|
244
|
+
for (const path of paths) {
|
|
245
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
246
|
+
const [[_1, nameSpace], [_2, elementIdentifier]] = [...path.matchAll(/\['(.*?)'\]/g)];
|
|
247
|
+
if (!nameSpace)
|
|
248
|
+
throw new Error(`Failed to parse namespace from path "${path}"`);
|
|
249
|
+
if (!elementIdentifier)
|
|
250
|
+
throw new Error(`Failed to parse elementIdentifier from path "${path}"`);
|
|
251
|
+
const nsAttrs = document.issuerSigned.nameSpaces[nameSpace] || [];
|
|
252
|
+
const digest = nsAttrs.find((d) => d.elementIdentifier === elementIdentifier);
|
|
253
|
+
if (elementIdentifier.startsWith('age_over_')) {
|
|
254
|
+
return this.handleAgeOverNN(elementIdentifier, nameSpace, nsAttrs);
|
|
255
|
+
}
|
|
256
|
+
if (digest) {
|
|
257
|
+
return {
|
|
258
|
+
nameSpace,
|
|
259
|
+
digest,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
handleAgeOverNN(request, nameSpace, attributes) {
|
|
266
|
+
const ageOverList = attributes
|
|
267
|
+
.map((a, i) => {
|
|
268
|
+
const { elementIdentifier: key, elementValue: value } = a;
|
|
269
|
+
return { key, value, index: i };
|
|
270
|
+
})
|
|
271
|
+
.filter((i) => i.key.startsWith('age_over_'))
|
|
272
|
+
.map((i) => ({
|
|
273
|
+
nn: parseInt(i.key.replace('age_over_', ''), 10),
|
|
274
|
+
...i,
|
|
275
|
+
}))
|
|
276
|
+
.sort((a, b) => a.nn - b.nn);
|
|
277
|
+
const reqNN = parseInt(request.replace('age_over_', ''), 10);
|
|
278
|
+
let item;
|
|
279
|
+
// Find nearest TRUE
|
|
280
|
+
item = ageOverList.filter((i) => i.value === true && i.nn >= reqNN)?.[0];
|
|
281
|
+
if (!item) {
|
|
282
|
+
// Find the nearest False
|
|
283
|
+
item = ageOverList.sort((a, b) => b.nn - a.nn).filter((i) => i.value === false && i.nn <= reqNN)?.[0];
|
|
284
|
+
}
|
|
285
|
+
if (!item) {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
return {
|
|
289
|
+
nameSpace,
|
|
290
|
+
digest: attributes[item.index],
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
exports.DeviceResponse = DeviceResponse;
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGV2aWNlUmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWRvYy9tb2RlbC9EZXZpY2VSZXNwb25zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx1Q0FBb0Y7QUFDcEYsbUNBQWdDO0FBRWhDLGlDQUE4QjtBQUc5QixpRUFBOEQ7QUFFOUQsc0NBQWtDO0FBQ2xDLG9DQUF1RjtBQUN2RixxQ0FBa0Q7QUFHbEQ7O0dBRUc7QUFDSCxNQUFhLGNBQWM7SUFZekI7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUF1QjtRQUN4QyxJQUFJLElBQUksWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksY0FBYyxDQUFDLElBQUEsY0FBSyxFQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELFlBQVksSUFBVTtRQXRCZCxXQUFNLEdBQUcsSUFBSSxDQUFDO1FBR2YsZUFBVSxHQUF3QyxFQUFFLENBQUM7UUFvQjFELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksMkJBQTJCLENBQUMsRUFBMEI7UUFDM0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZFQUE2RSxDQUFDLENBQUM7UUFDakcsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNsSSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztRQUNsRixDQUFDO1FBRUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGFBQWEsQ0FBQyxRQUFrQjtRQUNyQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBQSxpQkFBVSxFQUFDLGVBQVEsQ0FBQyxRQUFRLENBQUM7WUFDNUQsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLFFBQVE7U0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksMkJBQTJCLENBQUMsc0JBQThCO1FBQy9ELElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FDYiwySkFBMkosQ0FDNUosQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLCtCQUErQixDQUNwQyxrQkFBMEIsRUFDMUIsUUFBZ0IsRUFDaEIsV0FBbUIsRUFDbkIsc0JBQThCO1FBRTlCLElBQUksQ0FBQywyQkFBMkIsQ0FDOUIsSUFBQSxpQkFBVSxFQUNSLGVBQVEsQ0FBQyxRQUFRLENBQUM7WUFDaEIsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQztTQUNwRSxDQUFDLENBQ0gsQ0FDRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksK0JBQStCLENBQ3BDLHFCQUE2QixFQUM3QixxQkFBNkIsRUFDN0IsZUFBdUI7UUFFdkIsSUFBSSxDQUFDLDJCQUEyQixDQUM5QixJQUFBLGlCQUFVLEVBQ1IsZUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNoQixJQUFJLGVBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1lBQy9DLElBQUksZUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQ3pDLHFCQUFxQjtTQUN0QixDQUFDLENBQ0gsQ0FDRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksa0JBQWtCLENBQUMsU0FBaUIsRUFBRSxJQUF5QjtRQUNwRSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx5QkFBeUIsQ0FDOUIsZ0JBQXVDLEVBQ3ZDLEdBQWtCO1FBRWxCLElBQUksZ0JBQWdCLFlBQVksVUFBVSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUEseUJBQWMsRUFBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxtQkFBbUIsQ0FDeEIsZ0JBQXVDLEVBQ3ZDLGtCQUE4QixFQUM5QixHQUFxQjtRQUVyQixJQUFJLGdCQUFnQixZQUFZLFVBQVUsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFBLHlCQUFjLEVBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztRQUM1RyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsb0pBQW9KLENBQUMsQ0FBQztRQUV4TSxNQUFNLElBQUksR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsT0FBTyxJQUFJLFdBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRU8sS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQW1CO1FBQ3JELE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxnRkFBZ0Y7WUFDaEYsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUU5RCxPQUFPLElBQUksMkNBQW9CLENBQzdCLFFBQVEsQ0FBQyxPQUFPLEVBQ2hCO1lBQ0UsVUFBVTtZQUNWLFVBQVUsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVU7U0FDN0MsRUFDRCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUM3QyxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBZTtRQUMzQyxNQUFNLHlCQUF5QixHQUFHLElBQUEseUNBQWlDLEVBQ2pFLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsT0FBTyxFQUNQLElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7UUFFRixNQUFNLFlBQVksR0FBaUI7WUFDakMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDckIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztnQkFDckYsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixDQUFDO1NBQzVELENBQUM7UUFFRixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUM1Qix5QkFBcUMsRUFDckMsc0JBQTJCO1FBRTNCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFcEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLGdDQUF3QixFQUNwRCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxrQkFBa0IsRUFDdkIsc0JBQXNCLENBQ3ZCLENBQUM7UUFFRixNQUFNLEdBQUcsR0FBRyxNQUFNLGVBQUksQ0FBQyxNQUFNLENBQzNCLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDcEIsRUFBRSxHQUFHLEVBQUUsRUFDUCx5QkFBeUIsRUFDekIsZUFBZSxDQUNoQixDQUFDO1FBRUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQixDQUFDLFFBQW9CO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSx3QkFBYSxFQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFcEQsTUFBTSxlQUFlLEdBQUcsTUFBTSxnQkFBSyxDQUFDLElBQUksQ0FDdEMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUNqQixFQUFFLEdBQUcsRUFBRSxFQUNQLGVBQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3JCLEdBQUcsQ0FDSixDQUFDO1FBQ0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBbUIsRUFBRSxRQUE4QjtRQUNqRixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBMEIsRUFBRSxDQUFDO1FBQzdDLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWiwyREFBMkQ7Z0JBQzNELE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RCxTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQ3pCLEtBQWUsRUFDZixRQUE4QjtRQUU5Qjs7OztXQUlHO1FBQ0gsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6Qiw2REFBNkQ7WUFDN0QsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLElBQUksQ0FBQyxTQUFTO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLGlCQUFpQjtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBRWpHLE1BQU0sT0FBTyxHQUF1QixRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEYsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixLQUFLLGlCQUFpQixDQUFDLENBQUM7WUFFOUUsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNyRSxDQUFDO1lBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxPQUFPO29CQUNMLFNBQVM7b0JBQ1QsTUFBTTtpQkFDUCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxlQUFlLENBQ3JCLE9BQWUsRUFDZixTQUFpQixFQUNqQixVQUE4QjtRQUU5QixNQUFNLFdBQVcsR0FBRyxVQUFVO2FBQzNCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNaLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUM1QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDWCxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEQsR0FBRyxDQUFDO1NBQ0wsQ0FBQyxDQUFDO2FBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFL0IsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTdELElBQUksSUFBSSxDQUFDO1FBQ1Qsb0JBQW9CO1FBQ3BCLElBQUksR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YseUJBQXlCO1lBQ3pCLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTO1lBQ1QsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQy9CLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF4WEQsd0NBd1hDIn0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { DeviceSigned, DocType, IssuerSigned } from './types';
|
|
2
|
+
import { IssuerSignedDocument } from './IssuerSignedDocument';
|
|
3
|
+
/**
|
|
4
|
+
* Represents a device signed document.
|
|
5
|
+
*
|
|
6
|
+
* Note: You don't need to instantiate this class.
|
|
7
|
+
* This is the return type of the parser and it will be generated by the DeviceResponse builder.
|
|
8
|
+
*/
|
|
9
|
+
export declare class DeviceSignedDocument extends IssuerSignedDocument {
|
|
10
|
+
readonly deviceSigned: DeviceSigned;
|
|
11
|
+
constructor(docType: DocType, issuerSigned: IssuerSigned, deviceSigned: DeviceSigned);
|
|
12
|
+
prepare(): Map<string, any>;
|
|
13
|
+
/**
|
|
14
|
+
* Helper method to get the values in a namespace as a JS object.
|
|
15
|
+
*
|
|
16
|
+
* @param {string} namespace - The namespace to add.
|
|
17
|
+
* @returns {Record<string, any>} - The values in the namespace as an object
|
|
18
|
+
*/
|
|
19
|
+
getDeviceNameSpace(namespace: string): Record<string, any>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeviceSignedDocument = void 0;
|
|
4
|
+
const DataItem_1 = require("../../cbor/DataItem");
|
|
5
|
+
const IssuerSignedDocument_1 = require("./IssuerSignedDocument");
|
|
6
|
+
/**
|
|
7
|
+
* Represents a device signed document.
|
|
8
|
+
*
|
|
9
|
+
* Note: You don't need to instantiate this class.
|
|
10
|
+
* This is the return type of the parser and it will be generated by the DeviceResponse builder.
|
|
11
|
+
*/
|
|
12
|
+
class DeviceSignedDocument extends IssuerSignedDocument_1.IssuerSignedDocument {
|
|
13
|
+
constructor(docType, issuerSigned, deviceSigned) {
|
|
14
|
+
super(docType, issuerSigned);
|
|
15
|
+
this.deviceSigned = deviceSigned;
|
|
16
|
+
}
|
|
17
|
+
prepare() {
|
|
18
|
+
const doc = super.prepare();
|
|
19
|
+
const deviceSignature = this.deviceSigned.deviceAuth.deviceSignature?.getContentForEncoding();
|
|
20
|
+
const deviceMac = this.deviceSigned.deviceAuth.deviceMac?.getContentForEncoding();
|
|
21
|
+
// detach payload
|
|
22
|
+
if (deviceMac) {
|
|
23
|
+
deviceMac[2] = null;
|
|
24
|
+
}
|
|
25
|
+
if (deviceSignature) {
|
|
26
|
+
deviceSignature[2] = null;
|
|
27
|
+
}
|
|
28
|
+
doc.set('deviceSigned', {
|
|
29
|
+
...this.deviceSigned,
|
|
30
|
+
nameSpaces: DataItem_1.DataItem.fromData(this.deviceSigned.nameSpaces),
|
|
31
|
+
deviceAuth: {
|
|
32
|
+
...this.deviceSigned.deviceAuth,
|
|
33
|
+
...(deviceSignature ? { deviceSignature } : {}),
|
|
34
|
+
...(deviceMac ? { deviceMac } : {}),
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
return doc;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Helper method to get the values in a namespace as a JS object.
|
|
41
|
+
*
|
|
42
|
+
* @param {string} namespace - The namespace to add.
|
|
43
|
+
* @returns {Record<string, any>} - The values in the namespace as an object
|
|
44
|
+
*/
|
|
45
|
+
getDeviceNameSpace(namespace) {
|
|
46
|
+
return this.deviceSigned.nameSpaces[namespace];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.DeviceSignedDocument = DeviceSignedDocument;
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGV2aWNlU2lnbmVkRG9jdW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWRvYy9tb2RlbC9EZXZpY2VTaWduZWREb2N1bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrREFBK0M7QUFFL0MsaUVBQThEO0FBRTlEOzs7OztHQUtHO0FBQ0gsTUFBYSxvQkFBcUIsU0FBUSwyQ0FBb0I7SUFDNUQsWUFDRSxPQUFnQixFQUNoQixZQUEwQixFQUNWLFlBQTBCO1FBRTFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFGYixpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUc1QyxDQUFDO0lBRUQsT0FBTztRQUNMLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztRQUM5RixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztRQUNsRixpQkFBaUI7UUFDakIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO1FBRUQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUU7WUFDdEIsR0FBRyxJQUFJLENBQUMsWUFBWTtZQUNwQixVQUFVLEVBQUUsbUJBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDM0QsVUFBVSxFQUFFO2dCQUNWLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO2dCQUMvQixHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9DLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNwQztTQUNGLENBQUMsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsU0FBaUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUExQ0Qsb0RBMENDIn0=
|