@super-protocol/pki-attestation-engine 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/certificateGenerator.d.ts +34 -0
- package/dist/certificateGenerator.js +271 -0
- package/dist/challengeProvider/challengeNvidiaCCHelper.d.ts +10 -0
- package/dist/challengeProvider/challengeNvidiaCCHelper.js +62 -0
- package/dist/challengeProvider/challengeProvider.d.ts +6 -0
- package/dist/challengeProvider/challengeProvider.js +3 -0
- package/dist/challengeProvider/challengeProviderCertificate.d.ts +15 -0
- package/dist/challengeProvider/challengeProviderCertificate.js +82 -0
- package/dist/challengeProvider/challengeProviderSevSnp.d.ts +8 -0
- package/dist/challengeProvider/challengeProviderSevSnp.js +49 -0
- package/dist/challengeProvider/challengeProviderSgx.d.ts +8 -0
- package/dist/challengeProvider/challengeProviderSgx.js +47 -0
- package/dist/challengeProvider/challengeProviderTdx.d.ts +8 -0
- package/dist/challengeProvider/challengeProviderTdx.js +50 -0
- package/dist/challengeProvider/challengeProviderToken.d.ts +9 -0
- package/dist/challengeProvider/challengeProviderToken.js +22 -0
- package/dist/challengeProvider/challengeProviderUntrusted.d.ts +9 -0
- package/dist/challengeProvider/challengeProviderUntrusted.js +22 -0
- package/dist/challengeProvider/index.d.ts +8 -0
- package/dist/challengeProvider/index.js +25 -0
- package/dist/challengeValidator/challengeValidator.d.ts +18 -0
- package/dist/challengeValidator/challengeValidator.js +3 -0
- package/dist/challengeValidator/challengeValidatorCertificate.d.ts +9 -0
- package/dist/challengeValidator/challengeValidatorCertificate.js +55 -0
- package/dist/challengeValidator/challengeValidatorNvidia.d.ts +10 -0
- package/dist/challengeValidator/challengeValidatorNvidia.js +81 -0
- package/dist/challengeValidator/challengeValidatorSevSnp.d.ts +13 -0
- package/dist/challengeValidator/challengeValidatorSevSnp.js +137 -0
- package/dist/challengeValidator/challengeValidatorSgx.d.ts +8 -0
- package/dist/challengeValidator/challengeValidatorSgx.js +54 -0
- package/dist/challengeValidator/challengeValidatorTdx.d.ts +8 -0
- package/dist/challengeValidator/challengeValidatorTdx.js +52 -0
- package/dist/challengeValidator/challengeValidatorToken.d.ts +8 -0
- package/dist/challengeValidator/challengeValidatorToken.js +38 -0
- package/dist/challengeValidator/index.d.ts +8 -0
- package/dist/challengeValidator/index.js +32 -0
- package/dist/challengeValidator/schemas.d.ts +13 -0
- package/dist/challengeValidator/schemas.js +21 -0
- package/dist/challengeValidator/validatorConfig.d.ts +13 -0
- package/dist/challengeValidator/validatorConfig.js +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +20 -0
- package/dist/validator/challengeValidator.d.ts +18 -0
- package/dist/validator/challengeValidator.js +3 -0
- package/dist/validator/challengeValidatorCertificate.d.ts +8 -0
- package/dist/validator/challengeValidatorCertificate.js +70 -0
- package/dist/validator/challengeValidatorNvidia.d.ts +10 -0
- package/dist/validator/challengeValidatorNvidia.js +81 -0
- package/dist/validator/challengeValidatorSevSnp.d.ts +14 -0
- package/dist/validator/challengeValidatorSevSnp.js +137 -0
- package/dist/validator/challengeValidatorSgx.d.ts +8 -0
- package/dist/validator/challengeValidatorSgx.js +69 -0
- package/dist/validator/challengeValidatorTdx.d.ts +8 -0
- package/dist/validator/challengeValidatorTdx.js +67 -0
- package/dist/validator/challengeValidatorToken.d.ts +9 -0
- package/dist/validator/challengeValidatorToken.js +38 -0
- package/dist/validator/schemas.d.ts +13 -0
- package/dist/validator/schemas.js +21 -0
- package/dist/validator/validatorConfig.d.ts +13 -0
- package/dist/validator/validatorConfig.js +3 -0
- package/package.json +30 -0
|
@@ -0,0 +1,50 @@
|
|
|
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.ChallengeProviderTdx = void 0;
|
|
27
|
+
const challengeNvidiaCCHelper_1 = require("./challengeNvidiaCCHelper");
|
|
28
|
+
const pki_common_1 = require("@super-protocol/pki-common");
|
|
29
|
+
class ChallengeProviderTdx {
|
|
30
|
+
logger;
|
|
31
|
+
constructor(logger) {
|
|
32
|
+
this.logger = logger;
|
|
33
|
+
}
|
|
34
|
+
async generateChallenge(userData, networkID) {
|
|
35
|
+
// This module depends on native library that cannot be compiled for all architectures / operating systems.
|
|
36
|
+
// That is why we load it dynamically and use only when it's really needed.
|
|
37
|
+
const { SgxNative } = await Promise.resolve().then(() => __importStar(require('@super-protocol/addons-tee')));
|
|
38
|
+
const { challengeData, nvidiaTokens } = await challengeNvidiaCCHelper_1.ChallengeNvidiaCCHelper.getTokenAndCombinedChallengeData(userData, this.logger);
|
|
39
|
+
const dcapVerifyService = new SgxNative.DcapQuoteVerifyService();
|
|
40
|
+
const quoteData = await dcapVerifyService.generateTDXQuote(challengeData);
|
|
41
|
+
return {
|
|
42
|
+
type: pki_common_1.ChallengeType.TDX,
|
|
43
|
+
quoteBase64: quoteData.toString('base64'),
|
|
44
|
+
nvidiaTokens,
|
|
45
|
+
networkID,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.ChallengeProviderTdx = ChallengeProviderTdx;
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlUHJvdmlkZXJUZHguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhbGxlbmdlUHJvdmlkZXIvY2hhbGxlbmdlUHJvdmlkZXJUZHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1RUFBb0U7QUFFcEUsMkRBQTJFO0FBRTNFLE1BQWEsb0JBQW9CO0lBQ0Q7SUFBNUIsWUFBNEIsTUFBWTtRQUFaLFdBQU0sR0FBTixNQUFNLENBQU07SUFBRyxDQUFDO0lBRTVDLEtBQUssQ0FBQyxpQkFBaUIsQ0FDbkIsUUFBZ0IsRUFDaEIsU0FBa0I7UUFFbEIsMkdBQTJHO1FBQzNHLDJFQUEyRTtRQUMzRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsd0RBQWEsNEJBQTRCLEdBQUMsQ0FBQztRQUVqRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxHQUNqQyxNQUFNLGlEQUF1QixDQUFDLGdDQUFnQyxDQUMxRCxRQUFRLEVBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FDZCxDQUFDO1FBRU4sTUFBTSxpQkFBaUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRWpFLE1BQU0sU0FBUyxHQUNYLE1BQU0saUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUQsT0FBTztZQUNILElBQUksRUFBRSwwQkFBYSxDQUFDLEdBQUc7WUFDdkIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ3pDLFlBQVk7WUFDWixTQUFTO1NBQ1osQ0FBQztJQUNOLENBQUM7Q0FDSjtBQTVCRCxvREE0QkMifQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ChallengeProvider } from './challengeProvider';
|
|
3
|
+
import { Challenge, Log } from '@super-protocol/pki-common';
|
|
4
|
+
export declare class ChallengeProviderToken implements ChallengeProvider {
|
|
5
|
+
private readonly token;
|
|
6
|
+
readonly logger?: Log | undefined;
|
|
7
|
+
constructor(token: string, logger?: Log | undefined);
|
|
8
|
+
generateChallenge(userData: Buffer, networkID?: string): Promise<Challenge>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChallengeProviderToken = void 0;
|
|
4
|
+
const pki_common_1 = require("@super-protocol/pki-common");
|
|
5
|
+
class ChallengeProviderToken {
|
|
6
|
+
token;
|
|
7
|
+
logger;
|
|
8
|
+
constructor(token, logger) {
|
|
9
|
+
this.token = token;
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
async generateChallenge(userData, networkID) {
|
|
13
|
+
return {
|
|
14
|
+
type: pki_common_1.ChallengeType.Token,
|
|
15
|
+
userDataBase64: userData.toString('base64'),
|
|
16
|
+
token: this.token,
|
|
17
|
+
networkID,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ChallengeProviderToken = ChallengeProviderToken;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlUHJvdmlkZXJUb2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaGFsbGVuZ2VQcm92aWRlci9jaGFsbGVuZ2VQcm92aWRlclRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJEQUEyRTtBQUUzRSxNQUFhLHNCQUFzQjtJQUVWO0lBQ0Q7SUFGcEIsWUFDcUIsS0FBYSxFQUNkLE1BQVk7UUFEWCxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBTTtJQUM3QixDQUFDO0lBQ0osS0FBSyxDQUFDLGlCQUFpQixDQUNuQixRQUFnQixFQUNoQixTQUFrQjtRQUVsQixPQUFPO1lBQ0gsSUFBSSxFQUFFLDBCQUFhLENBQUMsS0FBSztZQUN6QixjQUFjLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFNBQVM7U0FDWixDQUFDO0lBQ04sQ0FBQztDQUNKO0FBaEJELHdEQWdCQyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ChallengeProvider } from './challengeProvider';
|
|
3
|
+
import { Challenge, Log } from '@super-protocol/pki-common';
|
|
4
|
+
export declare class ChallengeProviderUntrusted implements ChallengeProvider {
|
|
5
|
+
private readonly deviceId;
|
|
6
|
+
readonly logger?: Log | undefined;
|
|
7
|
+
constructor(deviceId: Buffer, logger?: Log | undefined);
|
|
8
|
+
generateChallenge(userData: Buffer, networkID?: string): Promise<Challenge>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChallengeProviderUntrusted = void 0;
|
|
4
|
+
const pki_common_1 = require("@super-protocol/pki-common");
|
|
5
|
+
class ChallengeProviderUntrusted {
|
|
6
|
+
deviceId;
|
|
7
|
+
logger;
|
|
8
|
+
constructor(deviceId, logger) {
|
|
9
|
+
this.deviceId = deviceId;
|
|
10
|
+
this.logger = logger;
|
|
11
|
+
}
|
|
12
|
+
async generateChallenge(userData, networkID) {
|
|
13
|
+
return {
|
|
14
|
+
type: pki_common_1.ChallengeType.Untrusted,
|
|
15
|
+
userDataBase64: userData.toString('base64'),
|
|
16
|
+
idBase64: this.deviceId.toString('base64'),
|
|
17
|
+
networkID,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.ChallengeProviderUntrusted = ChallengeProviderUntrusted;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlUHJvdmlkZXJVbnRydXN0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhbGxlbmdlUHJvdmlkZXIvY2hhbGxlbmdlUHJvdmlkZXJVbnRydXN0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkRBQTJFO0FBRTNFLE1BQWEsMEJBQTBCO0lBRWQ7SUFDRDtJQUZwQixZQUNxQixRQUFnQixFQUNqQixNQUFZO1FBRFgsYUFBUSxHQUFSLFFBQVEsQ0FBUTtRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFNO0lBQzdCLENBQUM7SUFFSixLQUFLLENBQUMsaUJBQWlCLENBQ25CLFFBQWdCLEVBQ2hCLFNBQWtCO1FBRWxCLE9BQU87WUFDSCxJQUFJLEVBQUUsMEJBQWEsQ0FBQyxTQUFTO1lBQzdCLGNBQWMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQzFDLFNBQVM7U0FDWixDQUFDO0lBQ04sQ0FBQztDQUNKO0FBakJELGdFQWlCQyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './challengeProvider';
|
|
2
|
+
export * from './challengeProviderSgx';
|
|
3
|
+
export * from './challengeProviderTdx';
|
|
4
|
+
export * from './challengeProviderUntrusted';
|
|
5
|
+
export * from './challengeProviderSevSnp';
|
|
6
|
+
export * from './challengeNvidiaCCHelper';
|
|
7
|
+
export * from './challengeProviderCertificate';
|
|
8
|
+
export * from './challengeProviderToken';
|
|
@@ -0,0 +1,25 @@
|
|
|
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("./challengeProvider"), exports);
|
|
18
|
+
__exportStar(require("./challengeProviderSgx"), exports);
|
|
19
|
+
__exportStar(require("./challengeProviderTdx"), exports);
|
|
20
|
+
__exportStar(require("./challengeProviderUntrusted"), exports);
|
|
21
|
+
__exportStar(require("./challengeProviderSevSnp"), exports);
|
|
22
|
+
__exportStar(require("./challengeNvidiaCCHelper"), exports);
|
|
23
|
+
__exportStar(require("./challengeProviderCertificate"), exports);
|
|
24
|
+
__exportStar(require("./challengeProviderToken"), exports);
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhbGxlbmdlUHJvdmlkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUFvQztBQUNwQyx5REFBdUM7QUFDdkMseURBQXVDO0FBQ3ZDLCtEQUE2QztBQUM3Qyw0REFBMEM7QUFDMUMsNERBQTBDO0FBQzFDLGlFQUErQztBQUMvQywyREFBeUMifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Challenge } from '@super-protocol/pki-common';
|
|
3
|
+
export interface SuccessChallengeResult {
|
|
4
|
+
success: true;
|
|
5
|
+
validatedUserData: Buffer;
|
|
6
|
+
validatedId: Buffer;
|
|
7
|
+
validatedCommonId?: Buffer;
|
|
8
|
+
validatedSolutionHash?: Buffer;
|
|
9
|
+
}
|
|
10
|
+
export interface UnsuccessfulChallengeResult {
|
|
11
|
+
success: false;
|
|
12
|
+
error: string;
|
|
13
|
+
}
|
|
14
|
+
export type ChallengeResult = SuccessChallengeResult | UnsuccessfulChallengeResult;
|
|
15
|
+
export interface ChallengeValidator {
|
|
16
|
+
validate(challenge: Challenge, publicKeyPem?: string): Promise<ChallengeResult>;
|
|
17
|
+
initialize?: () => Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlVmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NoYWxsZW5nZVZhbGlkYXRvci9jaGFsbGVuZ2VWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Challenge } from '@super-protocol/pki-common';
|
|
2
|
+
import { ChallengeResult, ChallengeValidator } from './challengeValidator';
|
|
3
|
+
import { Log } from '@super-protocol/pki-common';
|
|
4
|
+
export declare class ChallengeValidatorCertificate implements ChallengeValidator {
|
|
5
|
+
private readonly log;
|
|
6
|
+
constructor(log: Log);
|
|
7
|
+
validate(challenge: Challenge, publicKeyPem: string): Promise<ChallengeResult>;
|
|
8
|
+
private verifyUserData;
|
|
9
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
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.ChallengeValidatorCertificate = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const pki_common_1 = require("@super-protocol/pki-common");
|
|
9
|
+
const sdk_js_1 = require("@super-protocol/sdk-js");
|
|
10
|
+
class ChallengeValidatorCertificate {
|
|
11
|
+
log;
|
|
12
|
+
constructor(log) {
|
|
13
|
+
this.log = log;
|
|
14
|
+
}
|
|
15
|
+
async validate(challenge, publicKeyPem) {
|
|
16
|
+
switch (challenge.type) {
|
|
17
|
+
case pki_common_1.ChallengeType.Certificate:
|
|
18
|
+
try {
|
|
19
|
+
await sdk_js_1.TeeCertificateService.validateTeeCertChainOrFail(challenge.orderCertificate + challenge.orderCABundle);
|
|
20
|
+
this.verifyUserData(publicKeyPem, challenge.userDataSignatureBase64, challenge.orderCertificate);
|
|
21
|
+
return {
|
|
22
|
+
success: true,
|
|
23
|
+
validatedUserData: (0, pki_common_1.getPublicKeyPemHash)(publicKeyPem),
|
|
24
|
+
validatedId: sdk_js_1.CertificatesHelper.getExtensionValue(challenge.orderCertificate, pki_common_1.OID_CUSTOM_EXTENSION_CHALLENGE_ID) ?? Buffer.alloc(0),
|
|
25
|
+
validatedCommonId: sdk_js_1.CertificatesHelper.getExtensionValue(challenge.orderCertificate, pki_common_1.OID_CUSTOM_EXTENSION_CHALLENGE_COMMON_ID),
|
|
26
|
+
validatedSolutionHash: sdk_js_1.CertificatesHelper.getExtensionValue(challenge.orderCertificate, sdk_js_1.constants.OID_CUSTOM_EXTENSION_USER_DATA),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
return {
|
|
31
|
+
success: false,
|
|
32
|
+
error: e.message,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
throw new Error('Method not implemented.');
|
|
37
|
+
}
|
|
38
|
+
async verifyUserData(publicKeyPem, signatureBase64, certificatePem) {
|
|
39
|
+
const cert = await sdk_js_1.CertificateGenerator.checkAndParseCert(certificatePem);
|
|
40
|
+
const certPublicKeyPem = await sdk_js_1.CryptoKeysTransformer.cryptoKeyToSpkiPem(cert.publicKey);
|
|
41
|
+
const certPublicKeyKeyObj = crypto_1.default.createPublicKey(certPublicKeyPem);
|
|
42
|
+
const publicKeyHash = (0, pki_common_1.getPublicKeyPemHash)(publicKeyPem);
|
|
43
|
+
const isValid = await sdk_js_1.Crypto.verify({
|
|
44
|
+
data: publicKeyHash,
|
|
45
|
+
signature: signatureBase64,
|
|
46
|
+
publicKey: certPublicKeyKeyObj,
|
|
47
|
+
signatureFormat: 'base64',
|
|
48
|
+
});
|
|
49
|
+
if (!isValid) {
|
|
50
|
+
throw Error('Signature verification failed');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.ChallengeValidatorCertificate = ChallengeValidatorCertificate;
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlVmFsaWRhdG9yQ2VydGlmaWNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhbGxlbmdlVmFsaWRhdG9yL2NoYWxsZW5nZVZhbGlkYXRvckNlcnRpZmljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QiwyREFNb0M7QUFFcEMsbURBT2dDO0FBR2hDLE1BQWEsNkJBQTZCO0lBQ1Q7SUFBN0IsWUFBNkIsR0FBUTtRQUFSLFFBQUcsR0FBSCxHQUFHLENBQUs7SUFBRyxDQUFDO0lBRXpDLEtBQUssQ0FBQyxRQUFRLENBQ1YsU0FBb0IsRUFDcEIsWUFBb0I7UUFFcEIsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsS0FBSywwQkFBYSxDQUFDLFdBQVc7Z0JBQzFCLElBQUksQ0FBQztvQkFDRCxNQUFNLDhCQUFxQixDQUFDLDBCQUEwQixDQUNsRCxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FDdkQsQ0FBQztvQkFDRixJQUFJLENBQUMsY0FBYyxDQUNmLFlBQVksRUFDWixTQUFTLENBQUMsdUJBQXVCLEVBQ2pDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FDN0IsQ0FBQztvQkFDRixPQUFPO3dCQUNILE9BQU8sRUFBRSxJQUFJO3dCQUNiLGlCQUFpQixFQUFFLElBQUEsZ0NBQW1CLEVBQUMsWUFBWSxDQUFDO3dCQUNwRCxXQUFXLEVBQ1AsMkJBQWtCLENBQUMsaUJBQWlCLENBQ2hDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFDMUIsOENBQWlDLENBQ3BDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3hCLGlCQUFpQixFQUFFLDJCQUFrQixDQUFDLGlCQUFpQixDQUNuRCxTQUFTLENBQUMsZ0JBQWdCLEVBQzFCLHFEQUF3QyxDQUMzQzt3QkFDRCxxQkFBcUIsRUFDakIsMkJBQWtCLENBQUMsaUJBQWlCLENBQ2hDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFDMUIsa0JBQVMsQ0FBQyw4QkFBOEIsQ0FDM0M7cUJBQ1IsQ0FBQztnQkFDTixDQUFDO2dCQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7b0JBQ2QsT0FBTzt3QkFDSCxPQUFPLEVBQUUsS0FBSzt3QkFDZCxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU87cUJBQ25CLENBQUM7Z0JBQ04sQ0FBQztRQUNULENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLEtBQUssQ0FBQyxjQUFjLENBQ3hCLFlBQW9CLEVBQ3BCLGVBQXVCLEVBQ3ZCLGNBQXNCO1FBRXRCLE1BQU0sSUFBSSxHQUNOLE1BQU0sNkJBQW9CLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLDhCQUFxQixDQUFDLGtCQUFrQixDQUNuRSxJQUFJLENBQUMsU0FBUyxDQUNqQixDQUFDO1FBQ0YsTUFBTSxtQkFBbUIsR0FBRyxnQkFBTSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sYUFBYSxHQUFHLElBQUEsZ0NBQW1CLEVBQUMsWUFBWSxDQUFDLENBQUM7UUFFeEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxlQUFNLENBQUMsTUFBTSxDQUFDO1lBQ2hDLElBQUksRUFBRSxhQUFhO1lBQ25CLFNBQVMsRUFBRSxlQUFlO1lBQzFCLFNBQVMsRUFBRSxtQkFBbUI7WUFDOUIsZUFBZSxFQUFFLFFBQVE7U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ1gsTUFBTSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBdEVELHNFQXNFQyJ9
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { NvtrustWrapperConfig } from './validatorConfig';
|
|
3
|
+
import { Challenge, NetworkType } from '@super-protocol/pki-common';
|
|
4
|
+
import { Log } from '@super-protocol/pki-common';
|
|
5
|
+
export declare class ChallengeValidatorNvidia {
|
|
6
|
+
private readonly log;
|
|
7
|
+
private readonly config?;
|
|
8
|
+
constructor(log: Log, config?: NvtrustWrapperConfig | undefined);
|
|
9
|
+
validate(challenge: Challenge, userData: Buffer, networkType?: NetworkType): Promise<void>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChallengeValidatorNvidia = void 0;
|
|
4
|
+
const sp_nvtrust_wrapper_1 = require("@super-protocol/sp-nvtrust-wrapper");
|
|
5
|
+
const pki_common_1 = require("@super-protocol/pki-common");
|
|
6
|
+
const challengeProvider_1 = require("../challengeProvider");
|
|
7
|
+
class ChallengeValidatorNvidia {
|
|
8
|
+
log;
|
|
9
|
+
config;
|
|
10
|
+
constructor(log, config) {
|
|
11
|
+
this.log = log;
|
|
12
|
+
this.config = config;
|
|
13
|
+
}
|
|
14
|
+
async validate(challenge, userData, networkType) {
|
|
15
|
+
this.log.debug(`NVIDIA validation networkType: ${networkType}`);
|
|
16
|
+
if (!(0, pki_common_1.hasChallengeNvidiaToken)(challenge)) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const tokenHash = challengeProvider_1.ChallengeNvidiaCCHelper.getTokenHash(challenge.nvidiaTokens);
|
|
20
|
+
if (userData.length < 64) {
|
|
21
|
+
throw new Error('userData must be at least 64 bytes');
|
|
22
|
+
}
|
|
23
|
+
const expectedHash = userData.slice(32, 64);
|
|
24
|
+
const tokenHashHex = tokenHash.toString('hex');
|
|
25
|
+
const expectedHashHex = expectedHash.toString('hex');
|
|
26
|
+
this.log.debug(`NVIDIA tokenHash: ${tokenHashHex}, expectedHash: ${expectedHashHex}`);
|
|
27
|
+
if (tokenHashHex !== expectedHashHex) {
|
|
28
|
+
throw new Error('Nvidia hash included in the challenge does not match the hash of the nvidia token specified in the request');
|
|
29
|
+
}
|
|
30
|
+
const nvtrusWrapper = new sp_nvtrust_wrapper_1.NvtrustWrapper(this.config?.tmp ?? '/sp/nvtrust-tmp', this.config?.timeout ?? 60000);
|
|
31
|
+
let nvidiaTokenValidationResult = {
|
|
32
|
+
success: false,
|
|
33
|
+
};
|
|
34
|
+
try {
|
|
35
|
+
nvidiaTokenValidationResult = await nvtrusWrapper.validateToken({
|
|
36
|
+
device: sp_nvtrust_wrapper_1.NvidiaDeviceType.GPU,
|
|
37
|
+
policy: sp_nvtrust_wrapper_1.defaultGPUpolicy,
|
|
38
|
+
token: { jwt: challenge.nvidiaTokens.gpuToken },
|
|
39
|
+
});
|
|
40
|
+
if (nvidiaTokenValidationResult.success !== true) {
|
|
41
|
+
throw new Error('Failed to verify Nvidia GPU token: validateToken returned success=false');
|
|
42
|
+
}
|
|
43
|
+
if (networkType === 'trusted') {
|
|
44
|
+
const gpusInfo = sp_nvtrust_wrapper_1.NvtrustWrapper.extractGPUInfoFromToken({
|
|
45
|
+
jwt: challenge.nvidiaTokens.gpuToken,
|
|
46
|
+
});
|
|
47
|
+
const debugGpuNumbers = gpusInfo.gpus
|
|
48
|
+
.map((gpu, index) => ({ gpu, gpuNumber: index + 1 }))
|
|
49
|
+
.filter(({ gpu }) => gpu.dbgStat === true)
|
|
50
|
+
.map(({ gpuNumber }) => gpuNumber);
|
|
51
|
+
const hasDebugEnabledGpu = debugGpuNumbers.length > 0;
|
|
52
|
+
if (hasDebugEnabledGpu) {
|
|
53
|
+
const debugGpuNumbersText = debugGpuNumbers.join(', ');
|
|
54
|
+
throw new Error(`Trusted network does not allow NVIDIA GPUs with dbgStat=true. Debug enabled on GPU(s): ${debugGpuNumbersText}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (error instanceof sp_nvtrust_wrapper_1.NvtrustWrapperCallError) {
|
|
60
|
+
this.log.error(`NvtrustWrapperCallError: ${error.message}`);
|
|
61
|
+
if (error.traceback?.trim()) {
|
|
62
|
+
this.log.debug(`Traceback:\n${error.traceback}`);
|
|
63
|
+
}
|
|
64
|
+
const logEntries = Object.entries(error.logs ?? {});
|
|
65
|
+
if (logEntries.length > 0) {
|
|
66
|
+
this.log.debug('Logs from nvtrust wrapper:');
|
|
67
|
+
for (const [fileName, logContent] of logEntries) {
|
|
68
|
+
this.log.debug(`--- ${fileName} ---`);
|
|
69
|
+
this.log.debug(String(logContent));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.log.error(`Error during NVIDIA token validation: ${error}`);
|
|
75
|
+
}
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.ChallengeValidatorNvidia = ChallengeValidatorNvidia;
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlVmFsaWRhdG9yTnZpZGlhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NoYWxsZW5nZVZhbGlkYXRvci9jaGFsbGVuZ2VWYWxpZGF0b3JOdmlkaWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkVBTTRDO0FBRTVDLDJEQUlvQztBQUNwQyw0REFBK0Q7QUFHL0QsTUFBYSx3QkFBd0I7SUFFWjtJQUNBO0lBRnJCLFlBQ3FCLEdBQVEsRUFDUixNQUE2QjtRQUQ3QixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ1IsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7SUFDL0MsQ0FBQztJQUVKLEtBQUssQ0FBQyxRQUFRLENBQ1YsU0FBb0IsRUFDcEIsUUFBZ0IsRUFDaEIsV0FBeUI7UUFFekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsa0NBQWtDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLElBQUEsb0NBQXVCLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPO1FBQ1gsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLDJDQUF1QixDQUFDLFlBQVksQ0FDbEQsU0FBUyxDQUFDLFlBQVksQ0FDekIsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDMUQsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDVixxQkFBcUIs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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Challenge, Log } from '@super-protocol/pki-common';
|
|
2
|
+
import { ChallengeResult, ChallengeValidator } from './challengeValidator';
|
|
3
|
+
import { SevValidationConfig } from './validatorConfig';
|
|
4
|
+
export declare class ChallengeValidatorSevSnp implements ChallengeValidator {
|
|
5
|
+
private readonly log;
|
|
6
|
+
private measureInstance;
|
|
7
|
+
private readonly sevTmp;
|
|
8
|
+
private static instance;
|
|
9
|
+
private readonly securityPolicy;
|
|
10
|
+
static getInstance(log: Log, config?: SevValidationConfig): ChallengeValidatorSevSnp;
|
|
11
|
+
private constructor();
|
|
12
|
+
validate(challenge: Challenge): Promise<ChallengeResult>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
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.SgxNative.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.SgxNative.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 report;
|
|
81
|
+
try {
|
|
82
|
+
report = addons_tee_1.SgxNative.SevSNP.deserializeSNPReport(Buffer.from(challenge.serializedReportBase64, 'base64'));
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
this.log.error(`deserializeSNPReport returned error: ${e}`);
|
|
86
|
+
throw e;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
await addons_tee_1.SgxNative.SevSNP.verifyReport(report, {
|
|
90
|
+
timeoutMs: 60000,
|
|
91
|
+
tmpDirTemplate: `${this.sevTmp}/verify-`,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
this.log.error(`verifyReport returned error: ${e}`);
|
|
96
|
+
throw e;
|
|
97
|
+
}
|
|
98
|
+
if (!report.snpReport?.rawReport) {
|
|
99
|
+
throw new Error('Missing snpReport or rawReport');
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
if (this.securityPolicy) {
|
|
103
|
+
await addons_tee_1.SgxNative.SevSNP.verifyPolicy(Buffer.from(report.snpReport?.rawReport), this.securityPolicy);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
this.log.error(`verifyPolicy returned error: ${e}`);
|
|
108
|
+
throw e;
|
|
109
|
+
}
|
|
110
|
+
const userData = await addons_tee_1.SgxNative.SevSNP.getReportData(Buffer.from(report.snpReport.rawReport));
|
|
111
|
+
let mrenclave;
|
|
112
|
+
try {
|
|
113
|
+
mrenclave =
|
|
114
|
+
await this.measureInstance.getSingleCoreMrEnclave(report.snpReport);
|
|
115
|
+
}
|
|
116
|
+
catch (e) {
|
|
117
|
+
this.log.error(`getSingleCoreMrEnclave returned error: ${e}`);
|
|
118
|
+
throw e;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
success: true,
|
|
122
|
+
validatedUserData: Buffer.from(userData.slice(0, 64)),
|
|
123
|
+
validatedId: mrenclave,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
catch (e) {
|
|
127
|
+
return {
|
|
128
|
+
success: false,
|
|
129
|
+
error: e.message,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
throw new Error('Method not implemented.');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
exports.ChallengeValidatorSevSnp = ChallengeValidatorSevSnp;
|
|
137
|
+
//# 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 ChallengeValidatorSgx implements ChallengeValidator {
|
|
4
|
+
private readonly log;
|
|
5
|
+
private verifierService;
|
|
6
|
+
constructor(log: Log);
|
|
7
|
+
validate(challenge: Challenge): Promise<ChallengeResult>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChallengeValidatorSgx = void 0;
|
|
4
|
+
const pki_common_1 = require("@super-protocol/pki-common");
|
|
5
|
+
const addons_tee_1 = require("@super-protocol/addons-tee");
|
|
6
|
+
const sdk_js_1 = require("@super-protocol/sdk-js");
|
|
7
|
+
class ChallengeValidatorSgx {
|
|
8
|
+
log;
|
|
9
|
+
verifierService = new addons_tee_1.SgxNative.DcapQuoteVerifyService();
|
|
10
|
+
constructor(log) {
|
|
11
|
+
this.log = log;
|
|
12
|
+
}
|
|
13
|
+
async validate(challenge) {
|
|
14
|
+
switch (challenge.type) {
|
|
15
|
+
case pki_common_1.ChallengeType.SGXDCAP:
|
|
16
|
+
const quote = Buffer.from(challenge.quoteBase64, 'base64');
|
|
17
|
+
try {
|
|
18
|
+
try {
|
|
19
|
+
await this.verifierService.validateQuoteVerifierEnclave(quote);
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
this.log.debug(`validateQuoteVerifierEnclave returned error: ${e}`);
|
|
23
|
+
if (!e.hasOwnProperty('criticalError') ||
|
|
24
|
+
e.criticalError) {
|
|
25
|
+
throw e;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const parser = new sdk_js_1.TeeSgxParser();
|
|
29
|
+
const parsedQuote = parser.parseQuote(quote);
|
|
30
|
+
this.log.debug(`Parsed quote: ${JSON.stringify(parsedQuote)}`);
|
|
31
|
+
const parsedReport = parser.parseReport(parsedQuote.report);
|
|
32
|
+
const userData = parsedReport.userData;
|
|
33
|
+
this.log.debug(`Parsed report: ${JSON.stringify(parsedReport)}`);
|
|
34
|
+
const mrenclave = parsedReport.mrEnclave;
|
|
35
|
+
const mrsigner = parsedReport.mrSigner;
|
|
36
|
+
return {
|
|
37
|
+
success: true,
|
|
38
|
+
validatedUserData: Buffer.from(userData.slice(0, 32)),
|
|
39
|
+
validatedId: Buffer.from(mrenclave),
|
|
40
|
+
validatedCommonId: Buffer.from(mrsigner),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
return {
|
|
45
|
+
success: false,
|
|
46
|
+
error: e.message,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
throw new Error('Method not implemented.');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.ChallengeValidatorSgx = ChallengeValidatorSgx;
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbGxlbmdlVmFsaWRhdG9yU2d4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NoYWxsZW5nZVZhbGlkYXRvci9jaGFsbGVuZ2VWYWxpZGF0b3JTZ3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQTJFO0FBRTNFLDJEQUF1RDtBQUN2RCxtREFBc0Q7QUFFdEQsTUFBYSxxQkFBcUI7SUFHRDtJQUZyQixlQUFlLEdBQUcsSUFBSSxzQkFBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFFakUsWUFBNkIsR0FBUTtRQUFSLFFBQUcsR0FBSCxHQUFHLENBQUs7SUFBRyxDQUFDO0lBRXpDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBb0I7UUFDL0IsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsS0FBSywwQkFBYSxDQUFDLE9BQU87Z0JBQ3RCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxDQUFDO29CQUNELElBQUksQ0FBQzt3QkFDRCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsNEJBQTRCLENBQ25ELEtBQUssQ0FDUixDQUFDO29CQUNOLENBQUM7b0JBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FDVixnREFBZ0QsQ0FBQyxFQUFFLENBQ3RELENBQUM7d0JBQ0YsSUFDSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDOzRCQUNsQyxDQUFDLENBQUMsYUFBYSxFQUNqQixDQUFDOzRCQUNDLE1BQU0sQ0FBQyxDQUFDO3dCQUNaLENBQUM7b0JBQ0wsQ0FBQztvQkFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLHFCQUFZLEVBQUUsQ0FBQztvQkFDbEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ1YsaUJBQWlCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FDakQsQ0FBQztvQkFDRixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQztvQkFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQ1Ysa0JBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FDbkQsQ0FBQztvQkFDRixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO29CQUN6QyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDO29CQUN2QyxPQUFPO3dCQUNILE9BQU8sRUFBRSxJQUFJO3dCQUNiLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7d0JBQ3JELFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQzt3QkFDbkMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7cUJBQzNDLENBQUM7Z0JBQ04sQ0FBQztnQkFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO29CQUNkLE9BQU87d0JBQ0gsT0FBTyxFQUFFLEtBQUs7d0JBQ2QsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPO3FCQUNuQixDQUFDO2dCQUNOLENBQUM7UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDSjtBQXBERCxzREFvREMifQ==
|
|
@@ -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
|
+
}
|