@super-protocol/pki-attestation-engine 0.0.0-nvidia-local-verifier

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.
Files changed (53) hide show
  1. package/dist/attestationType.d.ts +4 -0
  2. package/dist/attestationType.js +61 -0
  3. package/dist/azure.d.ts +40 -0
  4. package/dist/azure.js +128 -0
  5. package/dist/certificateGenerator.d.ts +34 -0
  6. package/dist/certificateGenerator.js +347 -0
  7. package/dist/challengeProvider/challengeNvidiaCCHelper.d.ts +33 -0
  8. package/dist/challengeProvider/challengeNvidiaCCHelper.js +254 -0
  9. package/dist/challengeProvider/challengeProvider.d.ts +6 -0
  10. package/dist/challengeProvider/challengeProvider.js +3 -0
  11. package/dist/challengeProvider/challengeProviderAzure.d.ts +11 -0
  12. package/dist/challengeProvider/challengeProviderAzure.js +60 -0
  13. package/dist/challengeProvider/challengeProviderCertificate.d.ts +15 -0
  14. package/dist/challengeProvider/challengeProviderCertificate.js +82 -0
  15. package/dist/challengeProvider/challengeProviderSevSnp.d.ts +10 -0
  16. package/dist/challengeProvider/challengeProviderSevSnp.js +55 -0
  17. package/dist/challengeProvider/challengeProviderTdx.d.ts +11 -0
  18. package/dist/challengeProvider/challengeProviderTdx.js +60 -0
  19. package/dist/challengeProvider/challengeProviderToken.d.ts +9 -0
  20. package/dist/challengeProvider/challengeProviderToken.js +22 -0
  21. package/dist/challengeProvider/challengeProviderUntrusted.d.ts +9 -0
  22. package/dist/challengeProvider/challengeProviderUntrusted.js +22 -0
  23. package/dist/challengeProvider/index.d.ts +8 -0
  24. package/dist/challengeProvider/index.js +25 -0
  25. package/dist/challengeValidator/challengeValidator.d.ts +18 -0
  26. package/dist/challengeValidator/challengeValidator.js +3 -0
  27. package/dist/challengeValidator/challengeValidatorAzure.d.ts +29 -0
  28. package/dist/challengeValidator/challengeValidatorAzure.js +67 -0
  29. package/dist/challengeValidator/challengeValidatorCertificate.d.ts +9 -0
  30. package/dist/challengeValidator/challengeValidatorCertificate.js +55 -0
  31. package/dist/challengeValidator/challengeValidatorNvidia.d.ts +10 -0
  32. package/dist/challengeValidator/challengeValidatorNvidia.js +246 -0
  33. package/dist/challengeValidator/challengeValidatorSevSnp.d.ts +13 -0
  34. package/dist/challengeValidator/challengeValidatorSevSnp.js +142 -0
  35. package/dist/challengeValidator/challengeValidatorTdx.d.ts +8 -0
  36. package/dist/challengeValidator/challengeValidatorTdx.js +58 -0
  37. package/dist/challengeValidator/challengeValidatorToken.d.ts +8 -0
  38. package/dist/challengeValidator/challengeValidatorToken.js +38 -0
  39. package/dist/challengeValidator/index.d.ts +9 -0
  40. package/dist/challengeValidator/index.js +37 -0
  41. package/dist/challengeValidator/schemas.d.ts +13 -0
  42. package/dist/challengeValidator/schemas.js +21 -0
  43. package/dist/challengeValidator/validatorConfig.d.ts +28 -0
  44. package/dist/challengeValidator/validatorConfig.js +3 -0
  45. package/dist/challengeValidator/wasmVerificationPolicy.d.ts +60 -0
  46. package/dist/challengeValidator/wasmVerificationPolicy.js +123 -0
  47. package/dist/index.d.ts +7 -0
  48. package/dist/index.js +24 -0
  49. package/dist/mrEnclaveSignature.d.ts +9 -0
  50. package/dist/mrEnclaveSignature.js +32 -0
  51. package/dist/swarmCertValidation.d.ts +6 -0
  52. package/dist/swarmCertValidation.js +52 -0
  53. package/package.json +32 -0
@@ -0,0 +1,142 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.ChallengeValidatorSevSnp = void 0;
27
+ const path = __importStar(require("path"));
28
+ const addons_tee_1 = require("@super-protocol/addons-tee");
29
+ const pki_common_1 = require("@super-protocol/pki-common");
30
+ const sdk_js_1 = require("@super-protocol/sdk-js");
31
+ const schemas_1 = require("./schemas");
32
+ class ChallengeValidatorSevSnp {
33
+ log;
34
+ measureInstance;
35
+ sevTmp;
36
+ static instance;
37
+ securityPolicy;
38
+ static getInstance(log, config) {
39
+ if (!ChallengeValidatorSevSnp.instance) {
40
+ ChallengeValidatorSevSnp.instance = new ChallengeValidatorSevSnp(log, config);
41
+ }
42
+ return ChallengeValidatorSevSnp.instance;
43
+ }
44
+ constructor(log, config) {
45
+ this.log = log;
46
+ this.log.debug(`SEV config: ${JSON.stringify(config)}`);
47
+ this.sevTmp = config?.sevTmp ?? '/tmp';
48
+ const cacheFolder = config?.cacheFolder ??
49
+ path.join(this.sevTmp, 'snp-mrenclave-cache');
50
+ let storageAccess;
51
+ if (config?.storageAccess) {
52
+ const { isValid } = (0, sdk_js_1.validateBySchema)(config.storageAccess, schemas_1.accessCredentialsSchema);
53
+ if (!isValid) {
54
+ throw new Error(`sev storageAccess is not valid!})`);
55
+ }
56
+ storageAccess = config.storageAccess;
57
+ }
58
+ if (config?.securityPolicy) {
59
+ try {
60
+ this.securityPolicy = addons_tee_1.TeeNative.SevSNP.parsePolicySet(config.securityPolicy);
61
+ }
62
+ catch (error) {
63
+ this.log.error(`Failed to parse SEV-SNP security policy: ${error}`);
64
+ throw new Error(`Invalid SEV-SNP security policy configuration: ${error}`);
65
+ }
66
+ }
67
+ this.measureInstance = new addons_tee_1.TeeNative.SNPMrEnclaveCalculator({
68
+ cacheFolder,
69
+ vmRepo: config?.vmRepo,
70
+ vmRepoOwner: config?.vmRepoOwner,
71
+ releaseAsset: config?.releaseAsset,
72
+ storageAccess,
73
+ rmPrevCache: false,
74
+ });
75
+ }
76
+ async validate(challenge) {
77
+ switch (challenge.type) {
78
+ case pki_common_1.ChallengeType.SEVSNP:
79
+ try {
80
+ let evidence;
81
+ try {
82
+ evidence = addons_tee_1.TeeNative.deserializeTeeEvidence(Buffer.from(challenge.evidenceBase64, 'base64'));
83
+ }
84
+ catch (e) {
85
+ this.log.error(`deserializeTeeEvidence returned error: ${e}`);
86
+ throw e;
87
+ }
88
+ const report = evidence.amdSevSnpQemu;
89
+ if (!report) {
90
+ throw new Error(`Missing SNP QEMU evidence for challenge type ${challenge.type}`);
91
+ }
92
+ try {
93
+ await addons_tee_1.TeeNative.SevSNP.verifyReport(report, {
94
+ timeoutMs: 60000,
95
+ tmpDirTemplate: `${this.sevTmp}/verify-`,
96
+ });
97
+ }
98
+ catch (e) {
99
+ this.log.error(`verifyReport returned error: ${e}`);
100
+ throw e;
101
+ }
102
+ const snpReport = report.snpReport;
103
+ if (!snpReport?.rawReport) {
104
+ throw new Error('Missing snpReport or rawReport');
105
+ }
106
+ try {
107
+ if (this.securityPolicy) {
108
+ await addons_tee_1.TeeNative.SevSNP.verifyPolicy(Buffer.from(snpReport.rawReport), this.securityPolicy);
109
+ }
110
+ }
111
+ catch (e) {
112
+ this.log.error(`verifyPolicy returned error: ${e}`);
113
+ throw e;
114
+ }
115
+ const userData = await addons_tee_1.TeeNative.SevSNP.getReportData(Buffer.from(snpReport.rawReport));
116
+ let mrenclave;
117
+ try {
118
+ mrenclave =
119
+ await this.measureInstance.getSingleCoreMrEnclave(snpReport);
120
+ }
121
+ catch (e) {
122
+ this.log.error(`getSingleCoreMrEnclave returned error: ${e}`);
123
+ throw e;
124
+ }
125
+ return {
126
+ success: true,
127
+ validatedUserData: Buffer.from(userData.slice(0, 64)),
128
+ validatedId: mrenclave,
129
+ };
130
+ }
131
+ catch (e) {
132
+ return {
133
+ success: false,
134
+ error: e.message,
135
+ };
136
+ }
137
+ }
138
+ throw new Error('Method not implemented.');
139
+ }
140
+ }
141
+ exports.ChallengeValidatorSevSnp = ChallengeValidatorSevSnp;
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlVmFsaWRhdG9yU2V2U25wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NoYWxsZW5nZVZhbGlkYXRvci9jaGFsbGVuZ2VWYWxpZGF0b3JTZXZTbnAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsMkRBQXVEO0FBQ3ZELDJEQUEyRTtBQUczRSxtREFBeUU7QUFDekUsdUNBQW9EO0FBRXBELE1BQWEsd0JBQXdCO0lBcUJaO0lBcEJiLGVBQWUsQ0FBbUM7SUFDekMsTUFBTSxDQUFTO0lBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQTJCO0lBQ2pDLGNBQWMsQ0FBa0M7SUFFMUQsTUFBTSxDQUFDLFdBQVcsQ0FDckIsR0FBUSxFQUNSLE1BQTRCO1FBRTVCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyx3QkFBd0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSx3QkFBd0IsQ0FDNUQsR0FBRyxFQUNILE1BQU0sQ0FDVCxDQUFDO1FBQ04sQ0FBQztRQUVELE9BQU8sd0JBQXdCLENBQUMsUUFBUSxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUNxQixHQUFRLEVBQ3pCLE1BQTRCO1FBRFgsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUd6QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUM7UUFDdkMsTUFBTSxXQUFXLEdBQ2IsTUFBTSxFQUFFLFdBQVc7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFFbEQsSUFBSSxhQUF3QyxDQUFDO1FBQzdDLElBQUksTUFBTSxFQUFFLGFB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
@@ -0,0 +1,8 @@
1
+ import { Challenge, Log } from '@super-protocol/pki-common';
2
+ import { ChallengeResult, ChallengeValidator } from './challengeValidator';
3
+ export declare class ChallengeValidatorTdx implements ChallengeValidator {
4
+ private readonly log;
5
+ private verifierService;
6
+ constructor(log: Log);
7
+ validate(challenge: Challenge): Promise<ChallengeResult>;
8
+ }
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChallengeValidatorTdx = void 0;
4
+ const pki_common_1 = require("@super-protocol/pki-common");
5
+ const addons_tee_1 = require("@super-protocol/addons-tee");
6
+ class ChallengeValidatorTdx {
7
+ log;
8
+ verifierService = new addons_tee_1.TeeNative.DcapQuoteVerifyService();
9
+ constructor(log) {
10
+ this.log = log;
11
+ }
12
+ async validate(challenge) {
13
+ switch (challenge.type) {
14
+ case pki_common_1.ChallengeType.TDX:
15
+ case pki_common_1.ChallengeType.TDXGOOGLE:
16
+ try {
17
+ const evidence = addons_tee_1.TeeNative.deserializeTeeEvidence(Buffer.from(challenge.evidenceBase64, 'base64'));
18
+ const tdxEvidence = challenge.type === pki_common_1.ChallengeType.TDXGOOGLE
19
+ ? evidence.intelTdxGcp
20
+ : evidence.intelTdxQemu;
21
+ if (!tdxEvidence) {
22
+ throw new Error(`Missing TDX evidence for challenge type ${challenge.type}`);
23
+ }
24
+ const quote = Buffer.from(tdxEvidence.quote);
25
+ try {
26
+ await this.verifierService.validateQuoteVerifierEnclave(quote);
27
+ }
28
+ catch (e) {
29
+ this.log.debug(`validateQuoteVerifierEnclave returned error: ${e}`);
30
+ if (!e.hasOwnProperty('criticalError') ||
31
+ e.criticalError) {
32
+ throw e;
33
+ }
34
+ }
35
+ const parsedQuote = await this.verifierService.parseTDXQuote(quote);
36
+ this.log.debug(`Parsed quote: ${JSON.stringify(parsedQuote)}`);
37
+ await this.verifierService.validateRtmrEventLogIntegrity(tdxEvidence.eventLog, parsedQuote.rtmr0);
38
+ const userData = parsedQuote.reportData;
39
+ this.log.debug(`Parsed quote: ${JSON.stringify(parsedQuote)}`);
40
+ const mrenclave = await this.verifierService.getTDXMrEclave(parsedQuote, tdxEvidence.eventLog);
41
+ return {
42
+ success: true,
43
+ validatedUserData: userData.subarray(0, 64),
44
+ validatedId: mrenclave,
45
+ };
46
+ }
47
+ catch (e) {
48
+ return {
49
+ success: false,
50
+ error: e.message,
51
+ };
52
+ }
53
+ }
54
+ throw new Error('Method not implemented.');
55
+ }
56
+ }
57
+ exports.ChallengeValidatorTdx = ChallengeValidatorTdx;
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlVmFsaWRhdG9yVGR4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NoYWxsZW5nZVZhbGlkYXRvci9jaGFsbGVuZ2VWYWxpZGF0b3JUZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQTJFO0FBRTNFLDJEQUF1RDtBQUV2RCxNQUFhLHFCQUFxQjtJQUdEO0lBRnJCLGVBQWUsR0FBRyxJQUFJLHNCQUFTLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUVqRSxZQUE2QixHQUFRO1FBQVIsUUFBRyxHQUFILEdBQUcsQ0FBSztJQUFHLENBQUM7SUFFekMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFvQjtRQUMvQixRQUFRLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixLQUFLLDBCQUFhLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLEtBQUssMEJBQWEsQ0FBQyxTQUFTO2dCQUN4QixJQUFJLENBQUM7b0JBQ0QsTUFBTSxRQUFRLEdBQUcsc0JBQVMsQ0FBQyxzQkFBc0IsQ0FDN0MsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUNsRCxDQUFDO29CQUNGLE1BQU0sV0FBVyxHQUNiLFNBQVMsQ0FBQyxJQUFJLEtBQUssMEJBQWEsQ0FBQyxTQUFTO3dCQUN0QyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVc7d0JBQ3RCLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO29CQUNoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FDWCwyQ0FBMkMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUM5RCxDQUFDO29CQUNOLENBQUM7b0JBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzdDLElBQUksQ0FBQzt3QkFDRCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQ25ELEtBQUssQ0FDUixDQUFDO29CQUNOLENBQUM7b0JBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDVixnREFBZ0QsQ0FBQyxFQUFFLENBQ3RELENBQUM7d0JBQ0YsSUFDSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDOzRCQUNsQyxDQUFDLENBQUMsYUFBYSxFQUNqQixDQUFDOzRCQUNDLE1BQU0sQ0FBQyxDQUFDO3dCQUNaLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxNQUFNLFdBQVcsR0FDYixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDVixpQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUNqRCxDQUFDO29CQUNGLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FDcEQsV0FBVyxDQUFDLFFBQVEsRUFDcEIsV0FBVyxDQUFDLEtBQUssQ0FDcEIsQ0FBQztvQkFDRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO29CQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDVixpQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUNqRCxDQUFDO29CQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQ3ZELFdBQVcsRUFDWCxXQUFXLENBQUMsUUFBUSxDQUN2QixDQUFDO29CQUVGLE9BQU87d0JBQ0gsT0FBTyxFQUFFLElBQUk7d0JBQ2IsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUMzQyxXQUFXLEVBQUUsU0FBUztxQkFDekIsQ0FBQztnQkFDTixDQUFDO2dCQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7b0JBQ2QsT0FBTzt3QkFDSCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU87cUJBQ25CLENBQUM7Z0JBQ04sQ0FBQztRQUNULENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNKO0FBdkVELHNEQXVFQyJ9
@@ -0,0 +1,8 @@
1
+ import { Challenge, Log } from '@super-protocol/pki-common';
2
+ import { ChallengeResult, ChallengeValidator } from './challengeValidator';
3
+ export declare class ChallengeValidatorToken implements ChallengeValidator {
4
+ private readonly token;
5
+ private readonly log;
6
+ constructor(token: string, log: Log);
7
+ validate(challenge: Challenge): Promise<ChallengeResult>;
8
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChallengeValidatorToken = void 0;
4
+ const pki_common_1 = require("@super-protocol/pki-common");
5
+ class ChallengeValidatorToken {
6
+ token;
7
+ log;
8
+ constructor(token, log) {
9
+ this.token = token;
10
+ this.log = log;
11
+ }
12
+ async validate(challenge) {
13
+ switch (challenge.type) {
14
+ case pki_common_1.ChallengeType.Token:
15
+ try {
16
+ if (challenge.token !== this.token) {
17
+ throw new Error('Invalid token');
18
+ }
19
+ this.log.info(`token challenge validated successfully`);
20
+ return {
21
+ success: true,
22
+ validatedUserData: Buffer.from(challenge.userDataBase64, 'base64'),
23
+ validatedId: Buffer.alloc(0), // empty as we don't have id in token challenge
24
+ };
25
+ }
26
+ catch (e) {
27
+ this.log.error(`challengeValidatorToken returned error: ${e}`);
28
+ return {
29
+ success: false,
30
+ error: e.message,
31
+ };
32
+ }
33
+ }
34
+ throw new Error('Method not implemented.');
35
+ }
36
+ }
37
+ exports.ChallengeValidatorToken = ChallengeValidatorToken;
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlVmFsaWRhdG9yVG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhbGxlbmdlVmFsaWRhdG9yL2NoYWxsZW5nZVZhbGlkYXRvclRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUEyRTtBQUczRSxNQUFhLHVCQUF1QjtJQUVYO0lBQ0E7SUFGckIsWUFDcUIsS0FBYSxFQUNiLEdBQVE7UUFEUixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsUUFBRyxHQUFILEdBQUcsQ0FBSztJQUMxQixDQUFDO0lBRUosS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFvQjtRQUMvQixRQUFRLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQixLQUFLLDBCQUFhLENBQUMsS0FBSztnQkFDcEIsSUFBSSxDQUFDO29CQUNELElBQUksU0FBUyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3JDLENBQUM7b0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztvQkFFeEQsT0FBTzt3QkFDSCxPQUFPLEVBQUUsSUFBSTt3QkFDYixpQkFBaUIsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUMxQixTQUFTLENBQUMsY0FBYyxFQUN4QixRQUFRLENBQ1g7d0JBQ0QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsK0NBQStDO3FCQUNoRixDQUFDO2dCQUNOLENBQUM7Z0JBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztvQkFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDViwyQ0FBMkMsQ0FBQyxFQUFFLENBQ2pELENBQUM7b0JBQ0YsT0FBTzt3QkFDSCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU87cUJBQ25CLENBQUM7Z0JBQ04sQ0FBQztRQUNULENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNKO0FBbkNELDBEQW1DQyJ9
@@ -0,0 +1,9 @@
1
+ export * from './challengeValidator';
2
+ export * from './validatorConfig';
3
+ export { ChallengeValidatorAzure, type ChallengeValidatorAzureOptions, } from './challengeValidatorAzure';
4
+ export { buildAzureVerifyOptions, checkAzureVerificationResult, checkTeeVerificationResult, isAzureEvidenceType, type AttestationWasmAzure, } from './wasmVerificationPolicy';
5
+ export { ChallengeValidatorCertificate } from './challengeValidatorCertificate';
6
+ export { ChallengeValidatorNvidia } from './challengeValidatorNvidia';
7
+ export { ChallengeValidatorTdx } from './challengeValidatorTdx';
8
+ export { ChallengeValidatorSevSnp } from './challengeValidatorSevSnp';
9
+ export { ChallengeValidatorToken } from './challengeValidatorToken';
@@ -0,0 +1,37 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ChallengeValidatorToken = exports.ChallengeValidatorSevSnp = exports.ChallengeValidatorTdx = exports.ChallengeValidatorNvidia = exports.ChallengeValidatorCertificate = exports.isAzureEvidenceType = exports.checkTeeVerificationResult = exports.checkAzureVerificationResult = exports.buildAzureVerifyOptions = exports.ChallengeValidatorAzure = void 0;
18
+ __exportStar(require("./challengeValidator"), exports);
19
+ __exportStar(require("./validatorConfig"), exports);
20
+ var challengeValidatorAzure_1 = require("./challengeValidatorAzure");
21
+ Object.defineProperty(exports, "ChallengeValidatorAzure", { enumerable: true, get: function () { return challengeValidatorAzure_1.ChallengeValidatorAzure; } });
22
+ var wasmVerificationPolicy_1 = require("./wasmVerificationPolicy");
23
+ Object.defineProperty(exports, "buildAzureVerifyOptions", { enumerable: true, get: function () { return wasmVerificationPolicy_1.buildAzureVerifyOptions; } });
24
+ Object.defineProperty(exports, "checkAzureVerificationResult", { enumerable: true, get: function () { return wasmVerificationPolicy_1.checkAzureVerificationResult; } });
25
+ Object.defineProperty(exports, "checkTeeVerificationResult", { enumerable: true, get: function () { return wasmVerificationPolicy_1.checkTeeVerificationResult; } });
26
+ Object.defineProperty(exports, "isAzureEvidenceType", { enumerable: true, get: function () { return wasmVerificationPolicy_1.isAzureEvidenceType; } });
27
+ var challengeValidatorCertificate_1 = require("./challengeValidatorCertificate");
28
+ Object.defineProperty(exports, "ChallengeValidatorCertificate", { enumerable: true, get: function () { return challengeValidatorCertificate_1.ChallengeValidatorCertificate; } });
29
+ var challengeValidatorNvidia_1 = require("./challengeValidatorNvidia");
30
+ Object.defineProperty(exports, "ChallengeValidatorNvidia", { enumerable: true, get: function () { return challengeValidatorNvidia_1.ChallengeValidatorNvidia; } });
31
+ var challengeValidatorTdx_1 = require("./challengeValidatorTdx");
32
+ Object.defineProperty(exports, "ChallengeValidatorTdx", { enumerable: true, get: function () { return challengeValidatorTdx_1.ChallengeValidatorTdx; } });
33
+ var challengeValidatorSevSnp_1 = require("./challengeValidatorSevSnp");
34
+ Object.defineProperty(exports, "ChallengeValidatorSevSnp", { enumerable: true, get: function () { return challengeValidatorSevSnp_1.ChallengeValidatorSevSnp; } });
35
+ var challengeValidatorToken_1 = require("./challengeValidatorToken");
36
+ Object.defineProperty(exports, "ChallengeValidatorToken", { enumerable: true, get: function () { return challengeValidatorToken_1.ChallengeValidatorToken; } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhbGxlbmdlVmFsaWRhdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXFDO0FBQ3JDLG9EQUFrQztBQUNsQyxxRUFHbUM7QUFGL0Isa0lBQUEsdUJBQXVCLE9BQUE7QUFHM0IsbUVBTWtDO0FBTDlCLGlJQUFBLHVCQUF1QixPQUFBO0FBQ3ZCLHNJQUFBLDRCQUE0QixPQUFBO0FBQzVCLG9JQUFBLDBCQUEwQixPQUFBO0FBQzFCLDZIQUFBLG1CQUFtQixPQUFBO0FBR3ZCLGlGQUFnRjtBQUF2RSw4SUFBQSw2QkFBNkIsT0FBQTtBQUN0Qyx1RUFBc0U7QUFBN0Qsb0lBQUEsd0JBQXdCLE9BQUE7QUFDakMsaUVBQWdFO0FBQXZELDhIQUFBLHFCQUFxQixPQUFBO0FBQzlCLHVFQUFzRTtBQUE3RCxvSUFBQSx3QkFBd0IsT0FBQTtBQUNqQyxxRUFBb0U7QUFBM0Qsa0lBQUEsdUJBQXVCLE9BQUEifQ==
@@ -0,0 +1,13 @@
1
+ export declare const accessCredentialsSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
2
+ storageType: import("@sinclair/typebox").TLiteral<"STORJ">;
3
+ credentials: import("@sinclair/typebox").TObject<{
4
+ token: import("@sinclair/typebox").TString;
5
+ }>;
6
+ }>, import("@sinclair/typebox").TObject<{
7
+ storageType: import("@sinclair/typebox").TLiteral<"S3">;
8
+ credentials: import("@sinclair/typebox").TObject<{
9
+ accessKeyId: import("@sinclair/typebox").TString;
10
+ secretKey: import("@sinclair/typebox").TString;
11
+ endpoint: import("@sinclair/typebox").TString;
12
+ }>;
13
+ }>]>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.accessCredentialsSchema = void 0;
4
+ const typebox_1 = require("@sinclair/typebox");
5
+ exports.accessCredentialsSchema = typebox_1.Type.Union([
6
+ typebox_1.Type.Object({
7
+ storageType: typebox_1.Type.Literal('STORJ'),
8
+ credentials: typebox_1.Type.Object({
9
+ token: typebox_1.Type.String(),
10
+ }),
11
+ }),
12
+ typebox_1.Type.Object({
13
+ storageType: typebox_1.Type.Literal('S3'),
14
+ credentials: typebox_1.Type.Object({
15
+ accessKeyId: typebox_1.Type.String(),
16
+ secretKey: typebox_1.Type.String(),
17
+ endpoint: typebox_1.Type.String(),
18
+ }),
19
+ }),
20
+ ]);
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGFsbGVuZ2VWYWxpZGF0b3Ivc2NoZW1hcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBeUM7QUFFNUIsUUFBQSx1QkFBdUIsR0FBRyxjQUFJLENBQUMsS0FBSyxDQUFDO0lBQzlDLGNBQUksQ0FBQyxNQUFNLENBQUM7UUFDUixXQUFXLEVBQUUsY0FBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDbEMsV0FBVyxFQUFFLGNBQUksQ0FBQyxNQUFNLENBQUM7WUFDckIsS0FBSyxFQUFFLGNBQUksQ0FBQyxNQUFNLEVBQUU7U0FDdkIsQ0FBQztLQUNMLENBQUM7SUFDRixjQUFJLENBQUMsTUFBTSxDQUFDO1FBQ1IsV0FBVyxFQUFFLGNBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQy9CLFdBQVcsRUFBRSxjQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxjQUFJLENBQUMsTUFBTSxFQUFFO1lBQzFCLFNBQVMsRUFBRSxjQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3hCLFFBQVEsRUFBRSxjQUFJLENBQUMsTUFBTSxFQUFFO1NBQzFCLENBQUM7S0FDTCxDQUFDO0NBQ0wsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,28 @@
1
+ export interface SevValidationConfig {
2
+ sevTmp?: string;
3
+ cacheFolder?: string;
4
+ vmRepoOwner?: string;
5
+ vmRepo?: string;
6
+ releaseAsset?: string;
7
+ storageAccess?: Record<string, unknown>;
8
+ securityPolicy?: Record<string, unknown>;
9
+ }
10
+ export type NvidiaVerifierMode = 'remote' | 'local';
11
+ export interface NvtrustWrapperConfig {
12
+ tmp?: string;
13
+ timeout?: number;
14
+ /**
15
+ * remote asks NVIDIA NRAS. local verifies evidence on this authority.
16
+ * Absent means remote.
17
+ */
18
+ verifier?: NvidiaVerifierMode;
19
+ /** Override for a local RIM cache. Empty uses the SDK production URL. */
20
+ rimUrl?: string;
21
+ /** Override for a local OCSP cache. Empty uses the SDK production URL. */
22
+ ocspUrl?: string;
23
+ }
24
+ export interface AzureValidationConfig {
25
+ /** Microsoft Azure Attestation instance, https://sharedeus.eus.attest.azure.net by default. */
26
+ maaEndpoint?: string;
27
+ maaTimeoutMs?: number;
28
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NoYWxsZW5nZVZhbGlkYXRvci92YWxpZGF0b3JDb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,60 @@
1
+ /// <reference types="node" />
2
+ import { TeeEvidenceType } from '@super-protocol/attestation-common';
3
+ import { Log, NetworkType } from '@super-protocol/pki-common';
4
+ import { AzureValidationConfig } from './validatorConfig';
5
+ type TcbSeverity = 'Ok' | 'Warning' | 'Critical';
6
+ export interface AttestationWasmAzure {
7
+ verifyTeeEvidence(serialized: Uint8Array, options: ReturnType<typeof buildAzureVerifyOptions>): Promise<{
8
+ evidenceType: TeeEvidenceType;
9
+ }>;
10
+ describeTdxTcbStatus(status: string): {
11
+ severity: TcbSeverity;
12
+ } | undefined;
13
+ }
14
+ type TcbDescriber = Pick<AttestationWasmAzure, 'describeTdxTcbStatus'>;
15
+ interface PolicyOptions {
16
+ /**
17
+ * A debug VM offers no confidentiality, so it is accepted only when the
18
+ * network is explicitly untrusted. Plain TDX needs no such check: its
19
+ * TDATTRIBUTES, which hold the DEBUG bit, are part of mrEnclave.
20
+ */
21
+ networkType?: NetworkType;
22
+ log?: Log;
23
+ }
24
+ export declare const isAzureEvidenceType: (evidenceType: TeeEvidenceType) => boolean;
25
+ export declare const buildAzureVerifyOptions: (config?: AzureValidationConfig) => {
26
+ tdx: {
27
+ getCollateral: boolean;
28
+ };
29
+ azure: {
30
+ maa: true;
31
+ maaEndpoint: string | undefined;
32
+ timeoutMs: number | undefined;
33
+ };
34
+ };
35
+ /**
36
+ * Applies the TEE policy to an attestation-wasm verification result: the
37
+ * hardware report integrity, an acceptable TDX TCB, an unrevoked certificate
38
+ * chain, no debug SEV-SNP VM unless the network is explicitly untrusted and,
39
+ * for Azure, a positive Microsoft Azure Attestation verdict.
40
+ *
41
+ * @throws If the result violates the policy.
42
+ */
43
+ export declare const checkTeeVerificationResult: (verification: {
44
+ evidenceType: TeeEvidenceType;
45
+ }, attestation: TcbDescriber, options: PolicyOptions) => void;
46
+ /**
47
+ * Applies the Azure CVM policy (see {@link checkTeeVerificationResult}).
48
+ * Debug is checked explicitly: the Azure mrEnclave covers the vTPM PCRs, not
49
+ * the TD attributes or the SEV-SNP policy of the paravisor. Returns the Azure
50
+ * mrEnclave and the 64-byte report data.
51
+ *
52
+ * @throws If the result violates the policy.
53
+ */
54
+ export declare const checkAzureVerificationResult: (verification: {
55
+ evidenceType: TeeEvidenceType;
56
+ }, attestation: TcbDescriber, options: PolicyOptions) => {
57
+ mrEnclave: Buffer;
58
+ reportData: Buffer;
59
+ };
60
+ export {};
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkAzureVerificationResult = exports.checkTeeVerificationResult = exports.buildAzureVerifyOptions = exports.isAzureEvidenceType = void 0;
4
+ const attestation_common_1 = require("@super-protocol/attestation-common");
5
+ const REPORT_DATA_BYTES = 64;
6
+ const isAzureEvidenceType = (evidenceType) => evidenceType === attestation_common_1.TeeEvidenceType.TEE_EVIDENCE_TYPE_INTEL_TDX_AZURE ||
7
+ evidenceType === attestation_common_1.TeeEvidenceType.TEE_EVIDENCE_TYPE_AMD_SEV_SNP_AZURE;
8
+ exports.isAzureEvidenceType = isAzureEvidenceType;
9
+ const buildAzureVerifyOptions = (config) => ({
10
+ tdx: { getCollateral: true },
11
+ azure: {
12
+ maa: true,
13
+ maaEndpoint: config?.maaEndpoint,
14
+ timeoutMs: config?.maaTimeoutMs,
15
+ },
16
+ });
17
+ exports.buildAzureVerifyOptions = buildAzureVerifyOptions;
18
+ const checkTcbStatus = (attestation, component, status, log) => {
19
+ const severity = attestation.describeTdxTcbStatus(status)?.severity;
20
+ if (severity === 'Ok') {
21
+ return;
22
+ }
23
+ if (severity === 'Warning') {
24
+ log?.warn(`${component} TCB status is not up to date: ${status}`);
25
+ return;
26
+ }
27
+ throw new Error(`${component} TCB status is not acceptable: ${status}`);
28
+ };
29
+ const checkTdxResult = (result, attestation, log) => {
30
+ if (!result.quoteIntegrity) {
31
+ throw new Error('TD quote integrity check failed');
32
+ }
33
+ if (!result.tdxTcbStatus) {
34
+ throw new Error('TD quote TCB status is missing');
35
+ }
36
+ checkTcbStatus(attestation, 'TDX', result.tdxTcbStatus, log);
37
+ if (result.qeTcbStatus) {
38
+ checkTcbStatus(attestation, 'QE', result.qeTcbStatus, log);
39
+ }
40
+ if (result.certChainRevocationStatusOk === false) {
41
+ throw new Error('TD quote certificate chain is revoked');
42
+ }
43
+ };
44
+ const checkSevSnpResult = (result) => {
45
+ if (!result.attestationReportIntegrity) {
46
+ throw new Error('SEV-SNP report integrity check failed');
47
+ }
48
+ if (result.certChainRevocationStatusOk === false) {
49
+ throw new Error('SEV-SNP certificate chain is revoked');
50
+ }
51
+ };
52
+ const checkDebug = (debug, options) => {
53
+ if (debug && options.networkType !== 'untrusted') {
54
+ throw new Error(`Debug VM is not allowed for networkType=${options.networkType ?? 'undefined'}`);
55
+ }
56
+ };
57
+ /**
58
+ * Applies the TEE policy to an attestation-wasm verification result: the
59
+ * hardware report integrity, an acceptable TDX TCB, an unrevoked certificate
60
+ * chain, no debug SEV-SNP VM unless the network is explicitly untrusted and,
61
+ * for Azure, a positive Microsoft Azure Attestation verdict.
62
+ *
63
+ * @throws If the result violates the policy.
64
+ */
65
+ const checkTeeVerificationResult = (verification, attestation, options) => {
66
+ const tee = verification;
67
+ switch (tee.evidenceType) {
68
+ case attestation_common_1.TeeEvidenceType.TEE_EVIDENCE_TYPE_INTEL_TDX_QEMU:
69
+ case attestation_common_1.TeeEvidenceType.TEE_EVIDENCE_TYPE_INTEL_TDX_GCP:
70
+ checkTdxResult(tee.result, attestation, options.log);
71
+ return;
72
+ case attestation_common_1.TeeEvidenceType.TEE_EVIDENCE_TYPE_AMD_SEV_SNP_QEMU:
73
+ checkSevSnpResult(tee.result);
74
+ checkDebug(tee.result.securityFields.debugAllowed, options);
75
+ return;
76
+ case attestation_common_1.TeeEvidenceType.TEE_EVIDENCE_TYPE_INTEL_TDX_AZURE:
77
+ case attestation_common_1.TeeEvidenceType.TEE_EVIDENCE_TYPE_AMD_SEV_SNP_AZURE:
78
+ (0, exports.checkAzureVerificationResult)(tee, attestation, options);
79
+ return;
80
+ default:
81
+ throw new Error(`Unsupported TEE evidence type ${verification.evidenceType}`);
82
+ }
83
+ };
84
+ exports.checkTeeVerificationResult = checkTeeVerificationResult;
85
+ /**
86
+ * Applies the Azure CVM policy (see {@link checkTeeVerificationResult}).
87
+ * Debug is checked explicitly: the Azure mrEnclave covers the vTPM PCRs, not
88
+ * the TD attributes or the SEV-SNP policy of the paravisor. Returns the Azure
89
+ * mrEnclave and the 64-byte report data.
90
+ *
91
+ * @throws If the result violates the policy.
92
+ */
93
+ const checkAzureVerificationResult = (verification, attestation, options) => {
94
+ const azureVerification = verification;
95
+ let debug;
96
+ if (azureVerification.evidenceType ===
97
+ attestation_common_1.TeeEvidenceType.TEE_EVIDENCE_TYPE_INTEL_TDX_AZURE) {
98
+ const { result } = azureVerification;
99
+ checkTdxResult(result, attestation, options.log);
100
+ debug = result.azure.tdDebug;
101
+ }
102
+ else if (azureVerification.evidenceType ===
103
+ attestation_common_1.TeeEvidenceType.TEE_EVIDENCE_TYPE_AMD_SEV_SNP_AZURE) {
104
+ const { result } = azureVerification;
105
+ checkSevSnpResult(result);
106
+ debug = result.azure.debugAllowed || result.securityFields.debugAllowed;
107
+ }
108
+ else {
109
+ throw new Error(`Evidence type ${verification.evidenceType} is not an Azure confidential VM evidence`);
110
+ }
111
+ const { azure } = azureVerification.result;
112
+ if (!azure.maa?.azureCompliant) {
113
+ throw new Error('Microsoft Azure Attestation did not confirm a genuine Azure confidential VM');
114
+ }
115
+ checkDebug(debug, options);
116
+ const reportData = Buffer.from(azureVerification.reportData);
117
+ if (reportData.length !== REPORT_DATA_BYTES) {
118
+ throw new Error(`Unexpected report data length: ${reportData.length}`);
119
+ }
120
+ return { mrEnclave: Buffer.from(azure.mrEnclave), reportData };
121
+ };
122
+ exports.checkAzureVerificationResult = checkAzureVerificationResult;
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbVZlcmlmaWNhdGlvblBvbGljeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGFsbGVuZ2VWYWxpZGF0b3Ivd2FzbVZlcmlmaWNhdGlvblBvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyRUFBcUU7QUFZckUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFrRXRCLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxZQUE2QixFQUFXLEVBQUUsQ0FDMUUsWUFBWSxLQUFLLG9DQUFlLENBQUMsaUNBQWlDO0lBQ2xFLFlBQVksS0FBSyxvQ0FBZSxDQUFDLG1DQUFtQyxDQUFDO0FBRjVELFFBQUEsbUJBQW1CLHVCQUV5QztBQUVsRSxNQUFNLHVCQUF1QixHQUFHLENBQUMsTUFBOEIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RSxHQUFHLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO0lBQzVCLEtBQUssRUFBRTtRQUNILEdBQUcsRUFBRSxJQUFhO1FBQ2xCLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVztRQUNoQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVk7S0FDbEM7Q0FDSixDQUFDLENBQUM7QUFQVSxRQUFBLHVCQUF1QiwyQkFPakM7QUFFSCxNQUFNLGNBQWMsR0FBRyxDQUNuQixXQUF5QixFQUN6QixTQUFpQixFQUNqQixNQUFjLEVBQ2QsR0FBUyxFQUNMLEVBQUU7SUFDTixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3BFLElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BCLE9BQU87SUFDWCxDQUFDO0lBQ0QsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDekIsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLFNBQVMsa0NBQWtDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEUsT0FBTztJQUNYLENB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
@@ -0,0 +1,7 @@
1
+ export * from './certificateGenerator';
2
+ export * from './challengeProvider';
3
+ export * from './challengeValidator';
4
+ export * from './swarmCertValidation';
5
+ export * from './attestationType';
6
+ export * from './azure';
7
+ export * from './mrEnclaveSignature';
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./certificateGenerator"), exports);
18
+ __exportStar(require("./challengeProvider"), exports);
19
+ __exportStar(require("./challengeValidator"), exports);
20
+ __exportStar(require("./swarmCertValidation"), exports);
21
+ __exportStar(require("./attestationType"), exports);
22
+ __exportStar(require("./azure"), exports);
23
+ __exportStar(require("./mrEnclaveSignature"), exports);
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlEQUF1QztBQUN2QyxzREFBb0M7QUFDcEMsdURBQXFDO0FBQ3JDLHdEQUFzQztBQUN0QyxvREFBa0M7QUFDbEMsMENBQXdCO0FBQ3hCLHVEQUFxQyJ9
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" />
2
+ import { ChallengeType } from '@super-protocol/pki-common';
3
+ /**
4
+ * Verifies that the mrEnclave of a TEE challenge is signed by Super Protocol
5
+ * and present in the trusted registry.
6
+ *
7
+ * @throws If the challenge type has no registry or the signature is missing or invalid.
8
+ */
9
+ export declare const verifyChallengeMrEnclaveSignature: (mrEnclave: Buffer, challengeType: ChallengeType) => Promise<void>;