@super-protocol/addons-tee 2.0.0 → 2.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/bindings/amd-sev-snp-napi-rs/amd-sev-snp-napi-rs.linux-x64-gnu.node +0 -0
- package/bindings/amd-sev-snp-napi-rs/index.d.ts +51 -0
- package/bindings/amd-sev-snp-napi-rs/index.js +339 -0
- package/bindings/nvidia-native/build/Release/libnvat.so.1.1.0 +0 -0
- package/bindings/nvidia-native/build/Release/nvidia_native.node +0 -0
- package/bindings/sgx-native/build/Release/libmbedcrypto_gramine.so.15 +0 -0
- package/bindings/sgx-native/build/Release/libmbedx509_gramine.so.6 +0 -0
- package/bindings/sgx-native/build/Release/libsgx_dcap_quoteverify.so.1 +0 -0
- package/bindings/sgx-native/build/Release/libtdx_attest.so.1 +0 -0
- package/bindings/sgx-native/build/Release/sgx_native.node +0 -0
- package/bindings/usr/lib/node_modules/node-addon-api/node_api.Makefile +6 -0
- package/bindings/usr/lib/node_modules/node-addon-api/nothing.target.mk +159 -0
- package/bindings/utils/virtee/LICENSE +201 -0
- package/bindings/utils/virtee/libsev.so +0 -0
- package/bindings/utils/virtee/snpguest +0 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +29 -1
- package/dist/nvidia-native-module/nvidia-attestation.d.ts +146 -0
- package/dist/nvidia-native-module/nvidia-attestation.js +374 -0
- package/dist/nvidia-native-module/nvidia-debug-state-policy.rego +45 -0
- package/dist/nvidia-native-module/nvidia-detailed-policy.rego +205 -0
- package/dist/proto/AmdSevSnp.d.ts +194 -0
- package/dist/proto/AmdSevSnp.js +363 -0
- package/dist/sgx-native-module/consts.d.ts +24 -0
- package/dist/sgx-native-module/consts.js +38 -0
- package/dist/sgx-native-module/dcap-quote-verify.service.d.ts +12 -0
- package/dist/sgx-native-module/dcap-quote-verify.service.js +84 -0
- package/dist/sgx-native-module/enclave.service.d.ts +93 -0
- package/dist/sgx-native-module/enclave.service.js +211 -0
- package/dist/sgx-native-module/errors.d.ts +19 -0
- package/dist/sgx-native-module/errors.js +69 -0
- package/dist/sgx-native-module/helpers.d.ts +1 -0
- package/dist/sgx-native-module/helpers.js +50 -0
- package/dist/sgx-native-module/index.d.ts +9 -0
- package/dist/sgx-native-module/index.js +26 -0
- package/dist/sgx-native-module/pki.service.d.ts +50 -0
- package/dist/sgx-native-module/pki.service.js +74 -0
- package/dist/sgx-native-module/sev-snp-mrenclave.d.ts +59 -0
- package/dist/sgx-native-module/sev-snp-mrenclave.js +322 -0
- package/dist/sgx-native-module/sev-snp-schema.d.ts +22 -0
- package/dist/sgx-native-module/sev-snp-schema.js +24 -0
- package/dist/sgx-native-module/sev-snp.d.ts +127 -0
- package/dist/sgx-native-module/sev-snp.js +513 -0
- package/package.json +1 -1
|
@@ -0,0 +1,84 @@
|
|
|
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.DcapQuoteVerifyService = void 0;
|
|
7
|
+
const { SgxAttestationVerifier } = require("../../bindings/sgx-native/build/Release/sgx_native.node");
|
|
8
|
+
const consts_1 = require("./consts");
|
|
9
|
+
const errors_1 = require("./errors");
|
|
10
|
+
const p_queue_1 = __importDefault(require("p-queue"));
|
|
11
|
+
const fs_1 = require("fs");
|
|
12
|
+
class DcapQuoteVerifyService {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.quoteVerifier = new SgxAttestationVerifier();
|
|
15
|
+
}
|
|
16
|
+
async extractQuoteFromCert(pemOrDerCert) {
|
|
17
|
+
if (!pemOrDerCert?.length) {
|
|
18
|
+
throw new errors_1.AttestationDcapQuoteVerifyEnclaveError("empty certificate");
|
|
19
|
+
}
|
|
20
|
+
return this.quoteVerifier.extractQuoteFromCert(pemOrDerCert);
|
|
21
|
+
}
|
|
22
|
+
async validateQuoteVerifierEnclave(quote, checkSecurity) {
|
|
23
|
+
checkSecurity = checkSecurity ?? false;
|
|
24
|
+
if (!quote?.length) {
|
|
25
|
+
throw new errors_1.AttestationDcapQuoteVerifyEnclaveError("empty quote");
|
|
26
|
+
}
|
|
27
|
+
const verifyResult = this.quoteVerifier.verifyQuoteDcap(quote);
|
|
28
|
+
if (checkSecurity && verifyResult.smtEnabled === consts_1.PckFlag.PCK_FLAG_TRUE) {
|
|
29
|
+
throw new errors_1.QuoteSecurityValidationError(verifyResult);
|
|
30
|
+
}
|
|
31
|
+
if (verifyResult.verificationResult !== 0) {
|
|
32
|
+
throw new errors_1.QuoteValidationError(verifyResult.verificationResult);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async generateTDXQuote(userData) {
|
|
36
|
+
return this.quoteVerifier.generateTDXQuote(userData);
|
|
37
|
+
}
|
|
38
|
+
async validateMode() {
|
|
39
|
+
if (DcapQuoteVerifyService.isInGramineMode) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
await DcapQuoteVerifyService.executeLikeWithMutex.add(async () => {
|
|
44
|
+
await fs_1.promises.access("/dev/attestation/quote");
|
|
45
|
+
DcapQuoteVerifyService.isInGramineMode = true;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
throw new errors_1.QuoteGenerationError(`invalid running mode, is it run in gramine / gramine? - ${error}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async generateSGXQuote(userData) {
|
|
53
|
+
if (!Buffer.isBuffer(userData)) {
|
|
54
|
+
throw new Error("userData must be a Buffer");
|
|
55
|
+
}
|
|
56
|
+
if (userData.length === 0) {
|
|
57
|
+
throw new Error("userData cannot be empty");
|
|
58
|
+
}
|
|
59
|
+
await this.validateMode();
|
|
60
|
+
let result = Buffer.alloc(0);
|
|
61
|
+
await DcapQuoteVerifyService.executeLikeWithMutex.add(async () => {
|
|
62
|
+
try {
|
|
63
|
+
await fs_1.promises.writeFile("/dev/attestation/user_report_data", Buffer.concat([userData, Buffer.alloc(64)]).slice(0, 64));
|
|
64
|
+
result = await fs_1.promises.readFile("/dev/attestation/quote");
|
|
65
|
+
if (result.length === 0) {
|
|
66
|
+
throw new errors_1.QuoteGenerationError("Generated quote is empty");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (error instanceof Error) {
|
|
71
|
+
throw new errors_1.QuoteGenerationError(`Failed to generate quote: ${error.message}`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
throw new errors_1.QuoteGenerationError("Failed to generate quote: unknown error");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
return result;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.DcapQuoteVerifyService = DcapQuoteVerifyService;
|
|
82
|
+
DcapQuoteVerifyService.isInGramineMode = false;
|
|
83
|
+
DcapQuoteVerifyService.executeLikeWithMutex = new p_queue_1.default({ concurrency: 1 });
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGNhcC1xdW90ZS12ZXJpZnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZ3gtbmF0aXZlLW1vZHVsZS9kY2FwLXF1b3RlLXZlcmlmeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0FBQ3RHLHFDQUFnRTtBQUNoRSxxQ0FLa0I7QUFDbEIsc0RBQTRCO0FBQzVCLDJCQUE4QjtBQVE5QixNQUFhLHNCQUFzQjtJQUsvQjtRQUNJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsWUFBb0I7UUFDM0MsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksK0NBQXNDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxLQUFLLENBQUMsNEJBQTRCLENBQUMsS0FBYSxFQUFFLGFBQXVCO1FBQ3JFLGFBQWEsR0FBRyxhQUFhLElBQUksS0FBSyxDQUFDO1FBRXZDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLCtDQUFzQyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxJQUFJLGFBQWEsSUFBSSxZQUFZLENBQUMsVUFBVSxLQUFLLGdCQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckUsTUFBTSxJQUFJLHFDQUE0QixDQUFDLFlBQVksQ0FB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
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Readable } from "stream";
|
|
4
|
+
import { KeyType, KeyPolicy } from "./consts";
|
|
5
|
+
export type TeeDeviceInfoType = {
|
|
6
|
+
cpus: Array<{
|
|
7
|
+
vendorId: string;
|
|
8
|
+
cpuFamily: number;
|
|
9
|
+
model: number;
|
|
10
|
+
modelName: string;
|
|
11
|
+
physicalCores: number;
|
|
12
|
+
logicalCores: number;
|
|
13
|
+
baseFreq: number;
|
|
14
|
+
maxFreq: number;
|
|
15
|
+
}>;
|
|
16
|
+
memSize: number;
|
|
17
|
+
totalPhysicalCores: number;
|
|
18
|
+
totalLogicalCores: number;
|
|
19
|
+
};
|
|
20
|
+
export type TeeRunCpuBenchmarkType = {
|
|
21
|
+
cpuScore: number;
|
|
22
|
+
cpuBenchmark: string;
|
|
23
|
+
cpuCoresCount: number;
|
|
24
|
+
};
|
|
25
|
+
export type TeeRunMemoryBenchmarkType = {
|
|
26
|
+
memBandwidth: number;
|
|
27
|
+
memСonfirmedSize: number;
|
|
28
|
+
};
|
|
29
|
+
export type TeeGetKeyResult = {
|
|
30
|
+
key: Buffer;
|
|
31
|
+
request: Buffer;
|
|
32
|
+
};
|
|
33
|
+
export declare class EnclaveService {
|
|
34
|
+
private readonly tmpFolder;
|
|
35
|
+
private readonly sgx;
|
|
36
|
+
constructor(tmpFolder?: string);
|
|
37
|
+
/**
|
|
38
|
+
* Requests secret keys from cpu.
|
|
39
|
+
* @param type Value from enum @type KeyType
|
|
40
|
+
* @param policy Value from enum @type KeyPolicy
|
|
41
|
+
* @param previousRequest Request, for example received in a previous call to this method,
|
|
42
|
+
* can be undefined - this way a new request will be generated
|
|
43
|
+
* @returns Key and request, generated by method.
|
|
44
|
+
*/
|
|
45
|
+
getSecretKey(type: KeyType, policy: KeyPolicy, previousRequest?: Buffer): Promise<TeeGetKeyResult>;
|
|
46
|
+
/**
|
|
47
|
+
* Determines whether the request to obtain the key is outdated, for example, cpu_svn or isv_svn were updated
|
|
48
|
+
* @param previousRequest - Key Request
|
|
49
|
+
* @returns True if the request is outdated, false - the request is up to date
|
|
50
|
+
*/
|
|
51
|
+
isOutdatedRequest(previousRequest: Buffer): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Returns TEE device information.
|
|
54
|
+
* @returns
|
|
55
|
+
*/
|
|
56
|
+
getTeeDeviceInfo(): Promise<TeeDeviceInfoType>;
|
|
57
|
+
/**
|
|
58
|
+
* Returns TEE cpu benchmark.
|
|
59
|
+
* @param deviceInfoMemSize
|
|
60
|
+
* @returns
|
|
61
|
+
*/
|
|
62
|
+
getTeeDeviceCpuBenchmark(deviceInfoMemSize: number): Promise<TeeRunCpuBenchmarkType>;
|
|
63
|
+
/**
|
|
64
|
+
* Returns TEE memory benchmark.
|
|
65
|
+
* @param deviceInfoTotalPhysicalCores
|
|
66
|
+
* @returns
|
|
67
|
+
*/
|
|
68
|
+
getTeeDeviceMemoryBenchmark(deviceInfoTotalPhysicalCores: number): Promise<TeeRunMemoryBenchmarkType>;
|
|
69
|
+
/**
|
|
70
|
+
* Writes input stream to the protected file.
|
|
71
|
+
* @param inputStream
|
|
72
|
+
* @param outputStream
|
|
73
|
+
* @param filepath
|
|
74
|
+
* @param secretKey
|
|
75
|
+
*/
|
|
76
|
+
writeGramineProtectedFile(filepath: string, inputStream: Readable, secretKey: Buffer): Promise<{
|
|
77
|
+
writtenSize: number;
|
|
78
|
+
filesize: number;
|
|
79
|
+
filepath: string;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* Reads protected file and write to output stream.
|
|
83
|
+
* @param filepath
|
|
84
|
+
* @param inputStream
|
|
85
|
+
* @param outputStream
|
|
86
|
+
* @param secretKey
|
|
87
|
+
*/
|
|
88
|
+
readGramineProtectedFile(filepath: string, inputStream: Readable, secretKey: Buffer): Promise<{
|
|
89
|
+
fileStream: Readable;
|
|
90
|
+
filesize: number;
|
|
91
|
+
filepath: string;
|
|
92
|
+
}>;
|
|
93
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EnclaveService = void 0;
|
|
4
|
+
const { SgxLowLevel, GramineProtectedFS } = require("../../bindings/sgx-native/build/Release/sgx_native.node");
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const os_1 = require("os");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const stream_1 = require("stream");
|
|
10
|
+
// @TODO: Read it from nodejs module
|
|
11
|
+
const PF_SIZE = 4096;
|
|
12
|
+
const chunkedTransformer = (chunkSize = PF_SIZE) => {
|
|
13
|
+
const accumulateBuf = {
|
|
14
|
+
buf: Buffer.alloc(chunkSize),
|
|
15
|
+
bufSize: 0,
|
|
16
|
+
};
|
|
17
|
+
return new stream_1.Transform({
|
|
18
|
+
objectMode: false,
|
|
19
|
+
flush: (callback) => {
|
|
20
|
+
callback(null, accumulateBuf.buf.subarray(0, accumulateBuf.bufSize));
|
|
21
|
+
accumulateBuf.buf = Buffer.alloc(0);
|
|
22
|
+
accumulateBuf.bufSize = 0;
|
|
23
|
+
},
|
|
24
|
+
transform: function (chunk, encoding, callback) {
|
|
25
|
+
if (chunk.length + accumulateBuf.bufSize < chunkSize) {
|
|
26
|
+
const copied = chunk.copy(accumulateBuf.buf, accumulateBuf.bufSize);
|
|
27
|
+
accumulateBuf.bufSize += copied;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const mergedBuf = Buffer.concat([accumulateBuf.buf.subarray(0, accumulateBuf.bufSize), chunk]);
|
|
31
|
+
accumulateBuf.bufSize = 0;
|
|
32
|
+
this.push(mergedBuf);
|
|
33
|
+
}
|
|
34
|
+
callback(null, null);
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
class EnclaveService {
|
|
39
|
+
constructor(tmpFolder = (0, os_1.tmpdir)()) {
|
|
40
|
+
this.tmpFolder = tmpFolder;
|
|
41
|
+
this.sgx = new SgxLowLevel();
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Requests secret keys from cpu.
|
|
45
|
+
* @param type Value from enum @type KeyType
|
|
46
|
+
* @param policy Value from enum @type KeyPolicy
|
|
47
|
+
* @param previousRequest Request, for example received in a previous call to this method,
|
|
48
|
+
* can be undefined - this way a new request will be generated
|
|
49
|
+
* @returns Key and request, generated by method.
|
|
50
|
+
*/
|
|
51
|
+
async getSecretKey(type, policy, previousRequest) {
|
|
52
|
+
if (!previousRequest) {
|
|
53
|
+
previousRequest = Buffer.alloc(0);
|
|
54
|
+
}
|
|
55
|
+
return this.sgx.getKey(type, policy, previousRequest);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Determines whether the request to obtain the key is outdated, for example, cpu_svn or isv_svn were updated
|
|
59
|
+
* @param previousRequest - Key Request
|
|
60
|
+
* @returns True if the request is outdated, false - the request is up to date
|
|
61
|
+
*/
|
|
62
|
+
async isOutdatedRequest(previousRequest) {
|
|
63
|
+
return this.sgx.isOutdatedRequest(previousRequest);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Returns TEE device information.
|
|
67
|
+
* @returns
|
|
68
|
+
*/
|
|
69
|
+
async getTeeDeviceInfo() {
|
|
70
|
+
return this.sgx.getDeviceInfo();
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Returns TEE cpu benchmark.
|
|
74
|
+
* @param deviceInfoMemSize
|
|
75
|
+
* @returns
|
|
76
|
+
*/
|
|
77
|
+
async getTeeDeviceCpuBenchmark(deviceInfoMemSize) {
|
|
78
|
+
return this.sgx.runCpuBenchmark(deviceInfoMemSize);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Returns TEE memory benchmark.
|
|
82
|
+
* @param deviceInfoTotalPhysicalCores
|
|
83
|
+
* @returns
|
|
84
|
+
*/
|
|
85
|
+
async getTeeDeviceMemoryBenchmark(deviceInfoTotalPhysicalCores) {
|
|
86
|
+
return this.sgx.runMemoryBenchmark(deviceInfoTotalPhysicalCores);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Writes input stream to the protected file.
|
|
90
|
+
* @param inputStream
|
|
91
|
+
* @param outputStream
|
|
92
|
+
* @param filepath
|
|
93
|
+
* @param secretKey
|
|
94
|
+
*/
|
|
95
|
+
async writeGramineProtectedFile(filepath, inputStream, secretKey) {
|
|
96
|
+
const tmpFileName = (0, path_1.join)(this.tmpFolder, "tee-pf-" + (0, crypto_1.randomBytes)(16).toString("hex") + ".tmp");
|
|
97
|
+
const protectedFsKey = secretKey.length !== 16
|
|
98
|
+
? (0, crypto_1.createHash)("sha256", secretKey).update(secretKey).digest().slice(0, 16)
|
|
99
|
+
: secretKey;
|
|
100
|
+
let output = null;
|
|
101
|
+
try {
|
|
102
|
+
output = new GramineProtectedFS(tmpFileName, filepath, protectedFsKey, true);
|
|
103
|
+
let totalSize = 0;
|
|
104
|
+
let pfChunkSize = PF_SIZE;
|
|
105
|
+
if (process.env["GRAMINE_PROTECTED_FILES_STREAM_CACHE_SIZE"]) {
|
|
106
|
+
pfChunkSize = parseInt(process.env["GRAMINE_PROTECTED_FILES_STREAM_CACHE_SIZE"]);
|
|
107
|
+
}
|
|
108
|
+
let batchChunkIndex = 0;
|
|
109
|
+
const everyTenFlush = 10;
|
|
110
|
+
for await (const chunk of inputStream.pipe(chunkedTransformer(pfChunkSize))) {
|
|
111
|
+
if (!chunk.length) {
|
|
112
|
+
// @TODO: It's may be normal, research
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const writtenSize = await output.write(totalSize, chunk);
|
|
116
|
+
if (writtenSize !== chunk.length) {
|
|
117
|
+
throw new Error(`Fail to write ${chunk.length} to protected file ${filepath}:${tmpFileName}, written only ${writtenSize} bytes`);
|
|
118
|
+
}
|
|
119
|
+
totalSize += writtenSize;
|
|
120
|
+
if (batchChunkIndex && batchChunkIndex++ % everyTenFlush) {
|
|
121
|
+
await output.flush();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
await output.close();
|
|
125
|
+
return {
|
|
126
|
+
filepath: tmpFileName,
|
|
127
|
+
filesize: (await fs_1.promises.stat(tmpFileName)).size,
|
|
128
|
+
writtenSize: totalSize,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
if (output) {
|
|
133
|
+
await output.close();
|
|
134
|
+
await fs_1.promises.rm(tmpFileName, {
|
|
135
|
+
recursive: true,
|
|
136
|
+
force: true,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Reads protected file and write to output stream.
|
|
144
|
+
* @param filepath
|
|
145
|
+
* @param inputStream
|
|
146
|
+
* @param outputStream
|
|
147
|
+
* @param secretKey
|
|
148
|
+
*/
|
|
149
|
+
async readGramineProtectedFile(filepath, inputStream, secretKey) {
|
|
150
|
+
const tmpFileName = (0, path_1.join)(this.tmpFolder, "tee-pf-" + (0, crypto_1.randomBytes)(16).toString("hex") + ".tmp");
|
|
151
|
+
const protectedFsKey = secretKey.length !== 16
|
|
152
|
+
? (0, crypto_1.createHash)("sha256", secretKey).update(secretKey).digest().slice(0, 16)
|
|
153
|
+
: secretKey;
|
|
154
|
+
let input = null;
|
|
155
|
+
try {
|
|
156
|
+
const tmpFileStream = (0, fs_1.createWriteStream)(tmpFileName);
|
|
157
|
+
await stream_1.promises.pipeline(inputStream, tmpFileStream);
|
|
158
|
+
input = new GramineProtectedFS(tmpFileName, filepath, protectedFsKey, false);
|
|
159
|
+
const originalFileSize = input.size();
|
|
160
|
+
const readChunkSize = PF_SIZE * 8;
|
|
161
|
+
let isFileEnd = false;
|
|
162
|
+
let cursor = 0;
|
|
163
|
+
let remainedBuffer = Buffer.alloc(0);
|
|
164
|
+
const decryptedStream = new stream_1.Readable({
|
|
165
|
+
read: async function (requestSize) {
|
|
166
|
+
if (isFileEnd && !remainedBuffer.length) {
|
|
167
|
+
if (input) {
|
|
168
|
+
await input.close();
|
|
169
|
+
}
|
|
170
|
+
return this.push(null);
|
|
171
|
+
}
|
|
172
|
+
let readBuffer = remainedBuffer;
|
|
173
|
+
let remainedReadSize = requestSize - readBuffer.length;
|
|
174
|
+
while (!isFileEnd && remainedReadSize > 0) {
|
|
175
|
+
const chunk = await input.read(cursor, readChunkSize);
|
|
176
|
+
if (!chunk?.length) {
|
|
177
|
+
isFileEnd = true;
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
readBuffer = Buffer.concat([readBuffer, chunk]);
|
|
181
|
+
cursor += chunk.length;
|
|
182
|
+
remainedReadSize -= chunk.length;
|
|
183
|
+
if (chunk.length < readChunkSize) {
|
|
184
|
+
isFileEnd = true;
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
remainedBuffer = readBuffer.slice(requestSize);
|
|
189
|
+
this.push(readBuffer.slice(0, requestSize));
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
return {
|
|
193
|
+
filepath: tmpFileName,
|
|
194
|
+
fileStream: decryptedStream,
|
|
195
|
+
filesize: originalFileSize,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
await fs_1.promises.rm(tmpFileName, {
|
|
200
|
+
recursive: true,
|
|
201
|
+
force: true,
|
|
202
|
+
});
|
|
203
|
+
if (input) {
|
|
204
|
+
await input.close();
|
|
205
|
+
}
|
|
206
|
+
throw error;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.EnclaveService = EnclaveService;
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jbGF2ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NneC1uYXRpdmUtbW9kdWxlL2VuY2xhdmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsT0FBTyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7QUFDL0csbUNBQWlEO0FBQ2pELDJCQUF1RTtBQUN2RSwyQkFBNEI7QUFDNUIsK0JBQTRCO0FBQzVCLG1DQUF1RDtBQUd2RCxvQ0FBb0M7QUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBbURyQixNQUFNLGtCQUFrQixHQUFHLENBQUMsU0FBUyxHQUFHLE9BQU8sRUFBYSxFQUFFO0lBQzFELE1BQU0sYUFBYSxHQUFHO1FBQ2xCLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUM1QixPQUFPLEVBQUUsQ0FBQztLQUNiLENBQUM7SUFFRixPQUFPLElBQUksa0JBQVMsQ0FBQztRQUNqQixVQUFVLEVBQUUsS0FBSztRQUVqQixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNoQixRQUFRLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNyRSxhQUFhLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsYUFBYSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUNELFNBQVMsRUFBRSxVQUFVLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUTtZQUMxQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQztnQkFDbkQsTUFBTSxNQUFNLEdBQUcsS0FBSyxD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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { QuoteVerificationResultType } from "./consts";
|
|
2
|
+
export declare class AttestationDcapQuoteVerifyEnclaveError extends Error {
|
|
3
|
+
constructor(msg?: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class QuoteValidationError extends AttestationDcapQuoteVerifyEnclaveError {
|
|
6
|
+
readonly verifyResult: number;
|
|
7
|
+
criticalError: boolean;
|
|
8
|
+
constructor(verifyResult: number);
|
|
9
|
+
}
|
|
10
|
+
export declare class QuoteSecurityValidationError extends AttestationDcapQuoteVerifyEnclaveError {
|
|
11
|
+
readonly verifyResult: QuoteVerificationResultType;
|
|
12
|
+
constructor(verifyResult: QuoteVerificationResultType);
|
|
13
|
+
}
|
|
14
|
+
export declare class PkiServiceError extends Error {
|
|
15
|
+
constructor(msg?: string);
|
|
16
|
+
}
|
|
17
|
+
export declare class QuoteGenerationError extends Error {
|
|
18
|
+
constructor(msg?: string);
|
|
19
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QuoteGenerationError = exports.PkiServiceError = exports.QuoteSecurityValidationError = exports.QuoteValidationError = exports.AttestationDcapQuoteVerifyEnclaveError = void 0;
|
|
4
|
+
const consts_1 = require("./consts");
|
|
5
|
+
class AttestationDcapQuoteVerifyEnclaveError extends Error {
|
|
6
|
+
constructor(msg) {
|
|
7
|
+
super(msg);
|
|
8
|
+
this.name = AttestationDcapQuoteVerifyEnclaveError.name;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.AttestationDcapQuoteVerifyEnclaveError = AttestationDcapQuoteVerifyEnclaveError;
|
|
12
|
+
class QuoteValidationError extends AttestationDcapQuoteVerifyEnclaveError {
|
|
13
|
+
constructor(verifyResult) {
|
|
14
|
+
super();
|
|
15
|
+
this.verifyResult = verifyResult;
|
|
16
|
+
this.criticalError = false;
|
|
17
|
+
this.verifyResult = verifyResult;
|
|
18
|
+
this.criticalError = false;
|
|
19
|
+
switch (verifyResult) {
|
|
20
|
+
case 0xa001:
|
|
21
|
+
this.message = `The SGX platform firmware and SW are at the latest security patching level but there are
|
|
22
|
+
platform hardware configurations may expose the enclave to vulnerabilities.`;
|
|
23
|
+
break;
|
|
24
|
+
case 0xa002:
|
|
25
|
+
case 0xa003:
|
|
26
|
+
case 0xa004:
|
|
27
|
+
this.message = `The SGX platform firmware and SW are not at the latest security patching level. The
|
|
28
|
+
platform needs to be patched with firmware and/or software patches.`;
|
|
29
|
+
break;
|
|
30
|
+
case 0xa007:
|
|
31
|
+
case 0xa008:
|
|
32
|
+
this.message = `The SGX platform firmware and SW are at the latest security patching level but there
|
|
33
|
+
are certain vulnerabilities that can only be mitigated with software mitigations implemented by the enclave.`;
|
|
34
|
+
break;
|
|
35
|
+
default:
|
|
36
|
+
this.criticalError = true;
|
|
37
|
+
this.message = `Quote verification failed. Verification result: 0x${Number(verifyResult).toString(16)}`;
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.QuoteValidationError = QuoteValidationError;
|
|
43
|
+
class QuoteSecurityValidationError extends AttestationDcapQuoteVerifyEnclaveError {
|
|
44
|
+
constructor(verifyResult) {
|
|
45
|
+
super();
|
|
46
|
+
this.verifyResult = verifyResult;
|
|
47
|
+
this.verifyResult = verifyResult;
|
|
48
|
+
this.message = "Invalid CPU settings are being used.";
|
|
49
|
+
if (verifyResult.smtEnabled === consts_1.PckFlag.PCK_FLAG_TRUE) {
|
|
50
|
+
this.message = " HyperThreading (SMT) is enabled. Please disable it in BIOS.";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.QuoteSecurityValidationError = QuoteSecurityValidationError;
|
|
55
|
+
class PkiServiceError extends Error {
|
|
56
|
+
constructor(msg) {
|
|
57
|
+
super(msg);
|
|
58
|
+
this.name = PkiServiceError.name;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
exports.PkiServiceError = PkiServiceError;
|
|
62
|
+
class QuoteGenerationError extends Error {
|
|
63
|
+
constructor(msg) {
|
|
64
|
+
super(msg);
|
|
65
|
+
this.name = QuoteGenerationError.name;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.QuoteGenerationError = QuoteGenerationError;
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NneC1uYXRpdmUtbW9kdWxlL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBZ0U7QUFFaEUsTUFBYSxzQ0FBdUMsU0FBUSxLQUFLO0lBQzdELFlBQVksR0FBWTtRQUNwQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLHNDQUFzQyxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDO0NBQ0o7QUFMRCx3RkFLQztBQUVELE1BQWEsb0JBQXFCLFNBQVEsc0NBQXNDO0lBRTVFLFlBQTRCLFlBQW9CO1FBQzVDLEtBQUssRUFBRSxDQUFDO1FBRGdCLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBRHpDLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBR3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBRTNCLFFBQVEsWUFBWSxFQUFFLENBQUM7WUFDbkIsS0FBSyxNQUFNO2dCQUNQLElBQUksQ0FBQyxPQUFPLEdBQUc7NEZBQzZELENBQUM7Z0JBQzdFLE1BQU07WUFDVixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxNQUFNO2dCQUNQLElBQUksQ0FBQyxPQUFPLEdBQUc7b0ZBQ3FELENBQUM7Z0JBQ3JFLE1BQU07WUFDVixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssTUFBTTtnQkFDUCxJQUFJLENBQUMsT0FBTyxHQUFHOzZIQUM4RixDQUFDO2dCQUM5RyxNQUFNO1lBQ1Y7Z0JBQ0ksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcscURBQXFELE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDeEcsTUFBTTtRQUNkLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUE3QkQsb0RBNkJDO0FBRUQsTUFBYSw0QkFBNkIsU0FBUSxzQ0FBc0M7SUFDcEYsWUFBNEIsWUFBeUM7UUFDakUsS0FBSyxFQUFFLENBQUM7UUFEZ0IsaUJBQVksR0FBWixZQUFZLENBQTZCO1FBRWpFLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsc0NBQXNDLENBQUM7UUFDdEQsSUFBSSxZQUFZLENBQUMsVUFBVSxLQUFLLGdCQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyw4REFBOEQsQ0FBQztRQUNsRixDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBVEQsb0VBU0M7QUFFRCxNQUFhLGVBQWdCLFNBQVEsS0FBSztJQUN0QyxZQUFZLEdBQVk7UUFDcEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO0lBQ3JDLENBQUM7Q0FDSjtBQUxELDBDQUtDO0FBRUQsTUFBYSxvQkFBcUIsU0FBUSxLQUFLO0lBQzNDLFlBQVksR0FBWTtRQUNwQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQztJQUMxQyxDQUFDO0NBQ0o7QUFMRCxvREFLQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function gramineCompatibleRmDir(dirPath: string): Promise<void>;
|
|
@@ -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.gramineCompatibleRmDir = void 0;
|
|
27
|
+
const fs_1 = require("fs");
|
|
28
|
+
const path = __importStar(require("path"));
|
|
29
|
+
async function gramineCompatibleRmDir(dirPath) {
|
|
30
|
+
try {
|
|
31
|
+
await fs_1.promises.access(dirPath, fs_1.constants.F_OK);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const files = await fs_1.promises.readdir(dirPath);
|
|
37
|
+
for (const file of files) {
|
|
38
|
+
const filePath = path.join(dirPath, file);
|
|
39
|
+
const stat = await fs_1.promises.lstat(filePath);
|
|
40
|
+
if (stat.isDirectory()) {
|
|
41
|
+
await gramineCompatibleRmDir(filePath);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
await fs_1.promises.unlink(filePath);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
await fs_1.promises.rmdir(dirPath);
|
|
48
|
+
}
|
|
49
|
+
exports.gramineCompatibleRmDir = gramineCompatibleRmDir;
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZ3gtbmF0aXZlLW1vZHVsZS9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkJBQStDO0FBQy9DLDJDQUE2QjtBQUV0QixLQUFLLFVBQVUsc0JBQXNCLENBQUMsT0FBZTtJQUN4RCxJQUFJLENBQUM7UUFDRCxNQUFNLGFBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ0wsT0FBTztJQUNYLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLGFBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFeEMsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxNQUFNLGFBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztZQUNyQixNQUFNLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxhQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxhQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFwQkQsd0RBb0JDIn0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./consts";
|
|
2
|
+
export * from "./errors";
|
|
3
|
+
export * from "./enclave.service";
|
|
4
|
+
export * from "./dcap-quote-verify.service";
|
|
5
|
+
export * from "./pki.service";
|
|
6
|
+
export * from "./sev-snp";
|
|
7
|
+
export * from "./sev-snp-mrenclave";
|
|
8
|
+
export * from "./sev-snp-schema";
|
|
9
|
+
export * from "../proto/AmdSevSnp";
|
|
@@ -0,0 +1,26 @@
|
|
|
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("./consts"), exports);
|
|
18
|
+
__exportStar(require("./errors"), exports);
|
|
19
|
+
__exportStar(require("./enclave.service"), exports);
|
|
20
|
+
__exportStar(require("./dcap-quote-verify.service"), exports);
|
|
21
|
+
__exportStar(require("./pki.service"), exports);
|
|
22
|
+
__exportStar(require("./sev-snp"), exports);
|
|
23
|
+
__exportStar(require("./sev-snp-mrenclave"), exports);
|
|
24
|
+
__exportStar(require("./sev-snp-schema"), exports);
|
|
25
|
+
__exportStar(require("../proto/AmdSevSnp"), exports);
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2d4LW5hdGl2ZS1tb2R1bGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUN6QiwyQ0FBeUI7QUFDekIsb0RBQWtDO0FBQ2xDLDhEQUE0QztBQUM1QyxnREFBOEI7QUFDOUIsNENBQTBCO0FBQzFCLHNEQUFvQztBQUNwQyxtREFBaUM7QUFDakMscURBQW1DIn0=
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export type TlsCertResult = {
|
|
3
|
+
key: Buffer;
|
|
4
|
+
cert: Buffer;
|
|
5
|
+
};
|
|
6
|
+
export declare enum CertificateKeyType {
|
|
7
|
+
RSA = "RSA",
|
|
8
|
+
ECP = "ECP"
|
|
9
|
+
}
|
|
10
|
+
export declare enum CertificateFormat {
|
|
11
|
+
PEM = "PEM",
|
|
12
|
+
DER = "DER"
|
|
13
|
+
}
|
|
14
|
+
export declare enum ECPCurve {
|
|
15
|
+
SECP192R1 = "SECP192R1" /*!< Domain parameters for the 192-bit curve defined by FIPS 186-4 and SEC1. */,
|
|
16
|
+
SECP224R1 = "SECP224R1" /*!< Domain parameters for the 224-bit curve defined by FIPS 186-4 and SEC1. */,
|
|
17
|
+
SECP256R1 = "SECP256R1" /*!< Domain parameters for the 256-bit curve defined by FIPS 186-4 and SEC1. */,
|
|
18
|
+
SECP384R1 = "SECP384R1" /*!< Domain parameters for the 384-bit curve defined by FIPS 186-4 and SEC1. */,
|
|
19
|
+
SECP521R1 = "SECP521R1" /*!< Domain parameters for the 521-bit curve defined by FIPS 186-4 and SEC1. */,
|
|
20
|
+
BP256R1 = "BP256R1" /*!< Domain parameters for 256-bit Brainpool curve. */,
|
|
21
|
+
BP384R1 = "BP384R1" /*!< Domain parameters for 384-bit Brainpool curve. */,
|
|
22
|
+
BP512R1 = "BP512R1" /*!< Domain parameters for 512-bit Brainpool curve. */,
|
|
23
|
+
SECP192K1 = "SECP192K1" /*!< Domain parameters for 192-bit "Koblitz" curve. */,
|
|
24
|
+
SECP224K1 = "SECP224K1" /*!< Domain parameters for 224-bit "Koblitz" curve. */,
|
|
25
|
+
SECP256K1 = "SECP256K1" /*!< Domain parameters for 256-bit "Koblitz" curve. */
|
|
26
|
+
}
|
|
27
|
+
export type TLSCertParams = {
|
|
28
|
+
format?: CertificateFormat;
|
|
29
|
+
subject?: {
|
|
30
|
+
commonName?: string;
|
|
31
|
+
countryName?: string;
|
|
32
|
+
state?: string;
|
|
33
|
+
localityName?: string;
|
|
34
|
+
organizationName?: string;
|
|
35
|
+
organizationUnit?: string;
|
|
36
|
+
};
|
|
37
|
+
keyType?: CertificateKeyType;
|
|
38
|
+
withQuote?: boolean;
|
|
39
|
+
rsaKeyBits?: number;
|
|
40
|
+
ecpCurve?: ECPCurve;
|
|
41
|
+
serialNumber?: string;
|
|
42
|
+
days?: number;
|
|
43
|
+
dnsNames?: string[];
|
|
44
|
+
ips?: string[];
|
|
45
|
+
};
|
|
46
|
+
export declare class PkiService {
|
|
47
|
+
private readonly cryptoPrimitives;
|
|
48
|
+
constructor();
|
|
49
|
+
generateTlsCertificate(params?: TLSCertParams): Promise<TlsCertResult>;
|
|
50
|
+
}
|