@super-protocol/sdk-js 3.8.1 → 3.8.3
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/cjs/constants.d.ts +2 -2
- package/dist/cjs/constants.js +4 -3
- package/dist/cjs/crypto/utils.js +2 -2
- package/dist/cjs/crypto/utils.spec.js +26 -1
- package/dist/cjs/models/Offer.d.ts +4 -0
- package/dist/cjs/models/Offer.js +23 -1
- package/dist/cjs/models/TeeOffer.d.ts +1 -0
- package/dist/cjs/models/TeeOffer.js +20 -1
- package/dist/cjs/tee/TeeCertificateService.d.ts +3 -1
- package/dist/cjs/tee/TeeCertificateService.js +36 -36
- package/dist/cjs/tee/TeeSignatureVerifier.js +2 -2
- package/dist/cjs/tee/errors.d.ts +2 -0
- package/dist/cjs/tee/errors.js +5 -2
- package/dist/cjs/utils/rent-calculator/rent-calculator.d.ts +0 -1
- package/dist/cjs/utils/rent-calculator/rent-calculator.js +1 -7
- package/dist/mjs/constants.d.ts +2 -2
- package/dist/mjs/constants.js +3 -2
- package/dist/mjs/crypto/utils.js +2 -2
- package/dist/mjs/crypto/utils.spec.js +26 -1
- package/dist/mjs/models/Offer.d.ts +4 -0
- package/dist/mjs/models/Offer.js +23 -1
- package/dist/mjs/models/TeeOffer.d.ts +1 -0
- package/dist/mjs/models/TeeOffer.js +20 -1
- package/dist/mjs/tee/TeeCertificateService.d.ts +3 -1
- package/dist/mjs/tee/TeeCertificateService.js +37 -37
- package/dist/mjs/tee/TeeSignatureVerifier.js +3 -3
- package/dist/mjs/tee/errors.d.ts +2 -0
- package/dist/mjs/tee/errors.js +3 -1
- package/dist/mjs/utils/rent-calculator/rent-calculator.d.ts +0 -1
- package/dist/mjs/utils/rent-calculator/rent-calculator.js +1 -7
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SUPERPROTOCOL_CA } from '../constants.js';
|
|
2
2
|
import { ChallengeType, OID_CUSTOM_EXTENSION_CHALLENGE_COMMON_ID, OID_CUSTOM_EXTENSION_CHALLENGE_ID, OID_CUSTOM_EXTENSION_CHALLENGE_TYPE, OID_CUSTOM_EXTENSION_NVIDIA_INFO_GPU, } from '@super-protocol/pki-common';
|
|
3
3
|
import { TeeSignatureVerifier } from './TeeSignatureVerifier.js';
|
|
4
|
-
import { InvalidSignatureError } from './errors.js';
|
|
4
|
+
import { InvalidSignatureError, NotAllowedChallengeError } from './errors.js';
|
|
5
5
|
import { CertificatesHelper } from '../certificates/index.js';
|
|
6
6
|
import { NvtrustGPUList } from '../proto/Nvtrust.js';
|
|
7
7
|
export var ValidateTeeCertChainErrorCode;
|
|
@@ -29,48 +29,48 @@ export class TeeCertificateService {
|
|
|
29
29
|
// ROOT CA doesn't have challenge. but we trust it as it is in SUPERPROTOCOL_CA constant
|
|
30
30
|
const { certs } = CertificatesHelper.extractCAFromChain(certsPem);
|
|
31
31
|
const sortedCerts = CertificatesHelper.sortCertsFromLeafToRoot(certs);
|
|
32
|
-
const challenges = sortedCerts.map((cert) => CertificatesHelper.getExtensionValue(cert, OID_CUSTOM_EXTENSION_CHALLENGE_TYPE)?.toString('binary'));
|
|
33
|
-
if (challenges.some((challenge) => !challenge || challenge === ChallengeType.Untrusted)) {
|
|
34
|
-
return {
|
|
35
|
-
isValid: false,
|
|
36
|
-
errorCode: ValidateTeeCertChainErrorCode.NOT_ALLOWED_CHALLENGE,
|
|
37
|
-
errorMessage: `Cert chain has cert without or Untrusted challenge`,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
const leafCertChallengeType = challenges[0];
|
|
41
32
|
try {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
break;
|
|
46
|
-
case ChallengeType.TDX:
|
|
47
|
-
case ChallengeType.AMDSEV:
|
|
48
|
-
await TeeCertificateService.validateChallengeTdxAndSnp(certsPem);
|
|
49
|
-
break;
|
|
50
|
-
default:
|
|
51
|
-
return {
|
|
52
|
-
isValid: false,
|
|
53
|
-
errorCode: ValidateTeeCertChainErrorCode.NOT_ALLOWED_CHALLENGE,
|
|
54
|
-
errorMessage: `Challenge type ${leafCertChallengeType || `[none]`} is missing or not allowed!`,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
const gpusInfo = TeeCertificateService.getGPUInfoFromCert(certsPem);
|
|
58
|
-
const gpusInDebugMode = gpusInfo.filter((gpu) => gpu.dbgStat);
|
|
59
|
-
if (gpusInDebugMode.length) {
|
|
60
|
-
throw new Error(`The certificate contains information about GPU that is running in debug mode: ${JSON.stringify(gpusInDebugMode)}`);
|
|
61
|
-
}
|
|
33
|
+
await Promise.all(sortedCerts.map((cert) => TeeCertificateService.validateChallenge(cert)));
|
|
34
|
+
const leafCert = sortedCerts[0];
|
|
35
|
+
await TeeCertificateService.validateGpuChallenge(leafCert);
|
|
62
36
|
}
|
|
63
37
|
catch (err) {
|
|
64
38
|
return {
|
|
65
39
|
isValid: false,
|
|
66
|
-
errorCode:
|
|
40
|
+
errorCode: err instanceof NotAllowedChallengeError
|
|
41
|
+
? ValidateTeeCertChainErrorCode.NOT_ALLOWED_CHALLENGE
|
|
42
|
+
: ValidateTeeCertChainErrorCode.CHALLENGE_IS_INVALID,
|
|
67
43
|
errorMessage: `Challenge is not valid! (${err.message})`,
|
|
68
44
|
};
|
|
69
45
|
}
|
|
70
46
|
return { isValid: true };
|
|
71
47
|
}
|
|
72
|
-
static
|
|
73
|
-
const
|
|
48
|
+
static async validateChallenge(cert) {
|
|
49
|
+
const challengeType = CertificatesHelper.getExtensionValue(cert, OID_CUSTOM_EXTENSION_CHALLENGE_TYPE)?.toString('binary');
|
|
50
|
+
if (challengeType === ChallengeType.Untrusted) {
|
|
51
|
+
throw new NotAllowedChallengeError(`Cert chain has cert with Untrusted challenge`);
|
|
52
|
+
}
|
|
53
|
+
switch (challengeType) {
|
|
54
|
+
case ChallengeType.SGXDCAP:
|
|
55
|
+
TeeCertificateService.validateChallengeSgx(cert);
|
|
56
|
+
break;
|
|
57
|
+
case ChallengeType.TDX:
|
|
58
|
+
case ChallengeType.AMDSEV:
|
|
59
|
+
await TeeCertificateService.validateChallengeTdxAndSnp(cert);
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
throw new NotAllowedChallengeError(`Challenge type ${challengeType || `[none]`} is missing or not allowed!`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
static validateGpuChallenge(cert) {
|
|
66
|
+
const gpusInfo = TeeCertificateService.getGpuInfoFromCert(cert);
|
|
67
|
+
const gpusInDebugMode = gpusInfo.filter((gpu) => gpu.dbgStat);
|
|
68
|
+
if (gpusInDebugMode.length) {
|
|
69
|
+
throw new Error(`The certificate contains information about GPU that is running in debug mode: ${JSON.stringify(gpusInDebugMode)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
static validateChallengeSgx(cert) {
|
|
73
|
+
const mrSignerBinaryString = CertificatesHelper.getExtensionValue(cert, OID_CUSTOM_EXTENSION_CHALLENGE_COMMON_ID);
|
|
74
74
|
if (!mrSignerBinaryString) {
|
|
75
75
|
throw new Error(`SGX challenge signature is wrong!`);
|
|
76
76
|
}
|
|
@@ -81,8 +81,8 @@ export class TeeCertificateService {
|
|
|
81
81
|
throw new Error(`SGX challenge signature is wrong!`);
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
static async validateChallengeTdxAndSnp(
|
|
85
|
-
const mrEnclaveBinaryString = CertificatesHelper.getExtensionValue(
|
|
84
|
+
static async validateChallengeTdxAndSnp(cert) {
|
|
85
|
+
const mrEnclaveBinaryString = CertificatesHelper.getExtensionValue(cert, OID_CUSTOM_EXTENSION_CHALLENGE_ID);
|
|
86
86
|
if (!mrEnclaveBinaryString) {
|
|
87
87
|
throw new Error(`Challenge id is missing in certificate!`);
|
|
88
88
|
}
|
|
@@ -97,7 +97,7 @@ export class TeeCertificateService {
|
|
|
97
97
|
throw new Error(message);
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
-
static
|
|
100
|
+
static getGpuInfoFromCert(cert) {
|
|
101
101
|
let gpusInfo = { gpus: [] };
|
|
102
102
|
const gpusInfoRaw = CertificatesHelper.getExtensionValue(cert, OID_CUSTOM_EXTENSION_NVIDIA_INFO_GPU);
|
|
103
103
|
if (gpusInfoRaw) {
|
|
@@ -115,4 +115,4 @@ export class TeeCertificateService {
|
|
|
115
115
|
return gpusInfo.gpus;
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVlQ2VydGlmaWNhdGVTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlZS9UZWVDZXJ0aWZpY2F0ZVNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYix3Q0FBd0MsRUFDeEMsaUNBQWlDLEVBQ2pDLG1DQUFtQyxFQUNuQyxvQ0FBb0MsR0FDckMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFrQixjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRSxNQUFNLENBQU4sSUFBWSw2QkFJWDtBQUpELFdBQVksNkJBQTZCO0lBQ3ZDLGdGQUErQyxDQUFBO0lBQy9DLGdGQUErQyxDQUFBO0lBQy9DLDhFQUE2QyxDQUFBO0FBQy9DLENBQUMsRUFKVyw2QkFBNkIsS0FBN0IsNkJBQTZCLFFBSXhDO0FBT0QsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLFFBQWdCO1FBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0scUJBQXFCLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsUUFBZ0I7UUFD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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import axios from 'axios';
|
|
2
2
|
import forge from 'node-forge';
|
|
3
|
-
import { TEE_LOADER_TRUSTED_CERTIFICATE, TEE_LOADER_TRUSTED_MRSIGNER } from '../constants.js';
|
|
3
|
+
import { TEE_LOADER_TRUSTED_CERTIFICATE, TEE_LOADER_TRUSTED_MRSIGNER, TEE_PKI_TRUSTED_MRSIGNER, } from '../constants.js';
|
|
4
4
|
import { InvalidSignatureError } from '../index.js';
|
|
5
5
|
import { tryWithInterval } from '../utils/helpers/index.js';
|
|
6
6
|
export class TeeSignatureVerifier {
|
|
@@ -10,7 +10,7 @@ export class TeeSignatureVerifier {
|
|
|
10
10
|
* @throws Error If signature validation fails
|
|
11
11
|
*/
|
|
12
12
|
static validateSignatureSgx(mrSigner) {
|
|
13
|
-
if (
|
|
13
|
+
if (![TEE_PKI_TRUSTED_MRSIGNER, TEE_LOADER_TRUSTED_MRSIGNER].includes(mrSigner.toString('hex'))) {
|
|
14
14
|
throw new InvalidSignatureError('Quote has an invalid MR signer');
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -81,4 +81,4 @@ export class TeeSignatureVerifier {
|
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVlU2lnbmF0dXJlVmVyaWZpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVlL1RlZVNpZ25hdHVyZVZlcmlmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBd0IsTUFBTSxPQUFPLENBQUM7QUFDN0MsT0FBTyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBQy9CLE9BQU8sRUFDTCw4QkFBOEIsRUFDOUIsMkJBQTJCLEVBQzNCLHdCQUF3QixHQUN6QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPNUQsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFFBQW9CO1FBQzlDLElBQ0UsQ0FBQyxDQUFDLHdCQUF3QixFQUFFLDJCQUEyQixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDM0YsQ0FBQztZQUNELE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FDckMsU0FBcUIsRUFDckIsVUFBaUMsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsQ0FBQyxZQUFZLEVBQUU7UUFFN0YsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUMxRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFB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
|
package/dist/mjs/tee/errors.d.ts
CHANGED
package/dist/mjs/tee/errors.js
CHANGED
|
@@ -7,4 +7,6 @@ export class TeeQuoteValidatorError extends BaseError {
|
|
|
7
7
|
}
|
|
8
8
|
export class InvalidSignatureError extends BaseError {
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
export class NotAllowedChallengeError extends BaseError {
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlZS9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRS9DLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxTQUFTO0NBQUc7QUFFeEQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFNBQVM7Q0FBRztBQUVyRCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsU0FBUztDQUFHO0FBRXhELE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxTQUFTO0NBQUc7QUFFdkQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFNBQVM7Q0FBRyJ9
|
|
@@ -6,7 +6,6 @@ export declare class RentCalculator {
|
|
|
6
6
|
private optionsTotalFixedPrice;
|
|
7
7
|
private optionsTotalPricePerHour;
|
|
8
8
|
constructor(order: OrderRentInfo, rentConfig: RentConfig);
|
|
9
|
-
calculateOptionsDepositSpent(): bigint;
|
|
10
9
|
calculateThreshold(orderPrice: string): OrderThreshold;
|
|
11
10
|
isAwaitingPayment(orderPrice: string): boolean;
|
|
12
11
|
calculateAwaitingPaymentDate(orderPrice: string): Date | null;
|
|
@@ -24,12 +24,6 @@ export class RentCalculator {
|
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
-
calculateOptionsDepositSpent() {
|
|
28
|
-
const workingTimeMinutes = this.getWorkingTimeMinutes();
|
|
29
|
-
const workingTime = Math.max(workingTimeMinutes, this.minimalRentPeriod);
|
|
30
|
-
const optionsDepositSpent = this.optionsTotalFixedPrice + (this.optionsTotalPricePerHour * BigInt(workingTime)) / 60n;
|
|
31
|
-
return optionsDepositSpent;
|
|
32
|
-
}
|
|
33
27
|
calculateThreshold(orderPrice) {
|
|
34
28
|
const deposit = BigInt(this.order.deposit || 0);
|
|
35
29
|
const outputReserve = BigInt(this.order.outputReserve || 0);
|
|
@@ -113,4 +107,4 @@ export class RentCalculator {
|
|
|
113
107
|
return Math.floor(Math.abs(Date.now() - this.order.startDate * 1000) / (60 * 1000));
|
|
114
108
|
}
|
|
115
109
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVudC1jYWxjdWxhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3JlbnQtY2FsY3VsYXRvci9yZW50LWNhbGN1bGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pELE1BQU0sT0FBTyxjQUFjO0lBTU47SUFDQTtJQU5GLGlCQUFpQixDQUFTO0lBQ25DLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0MsWUFDbUIsS0FBb0IsRUFDcEIsVUFBc0I7UUFEdEIsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUNwQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRXZDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDaEUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUVwRixJQUFJLENBQUMsaUJBQWlCO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsa0JBQWtCLENBQUM7Z0JBQ2pGLElBQUksQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUM7UUFFOUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hFLE1BQU0sV0FBVyxHQUFH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
|