@super-protocol/sdk-js 3.16.6 → 3.17.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/dist/cjs/RIGenerator.d.ts +3 -3
- package/dist/cjs/RIGenerator.js +7 -6
- package/dist/cjs/TIIGenerator.d.ts +3 -4
- package/dist/cjs/TIIGenerator.js +34 -7
- package/dist/cjs/TeeInputGeneratorBase.d.ts +3 -3
- package/dist/cjs/TeeInputGeneratorBase.js +5 -5
- package/dist/cjs/certificates/serializer.d.ts +5 -3
- package/dist/cjs/certificates/serializer.js +26 -11
- package/dist/cjs/certificates/types.d.ts +1 -1
- package/dist/cjs/connectors/BaseConnector.d.ts +3 -3
- package/dist/cjs/connectors/BaseConnector.js +1 -1
- package/dist/cjs/connectors/BlockchainConnector.js +3 -3
- package/dist/cjs/connectors/BlockchainEventsListener.d.ts +2 -2
- package/dist/cjs/connectors/BlockchainEventsListener.js +3 -2
- package/dist/cjs/constants.d.ts +1 -3
- package/dist/cjs/constants.js +3 -7
- package/dist/cjs/contracts/abi.d.ts +1067 -1137
- package/dist/cjs/contracts/abi.js +1408 -1500
- package/dist/cjs/crypto/Crypto.d.ts +10 -13
- package/dist/cjs/crypto/Crypto.js +14 -17
- package/dist/cjs/crypto/nodejs/AES.d.ts +1 -1
- package/dist/cjs/crypto/nodejs/AES.js +2 -2
- package/dist/cjs/crypto/nodejs/ARIA.d.ts +1 -1
- package/dist/cjs/crypto/nodejs/ARIA.js +2 -2
- package/dist/cjs/errors/index.d.ts +1 -0
- package/dist/cjs/errors/index.js +4 -2
- package/dist/cjs/errors/insufficient-funds.error.d.ts +19 -0
- package/dist/cjs/errors/insufficient-funds.error.js +57 -0
- package/dist/cjs/index.d.ts +3 -6
- package/dist/cjs/index.js +6 -9
- package/dist/cjs/models/Offer.d.ts +16 -1
- package/dist/cjs/models/Offer.js +59 -9
- package/dist/cjs/models/Order.d.ts +1 -1
- package/dist/cjs/models/Order.js +11 -15
- package/dist/cjs/models/Provider.d.ts +0 -1
- package/dist/cjs/models/Provider.js +1 -7
- package/dist/cjs/models/TCB.d.ts +1 -28
- package/dist/cjs/models/TCB.js +1 -61
- package/dist/cjs/models/TeeOffer.d.ts +3 -18
- package/dist/cjs/models/TeeOffer.js +20 -106
- package/dist/cjs/providers/storage/S3StorageProvider.js +5 -5
- package/dist/cjs/providers/storage/StorageKeyValueAdapter.d.ts +1 -1
- package/dist/cjs/providers/storage/StorageKeyValueAdapter.js +7 -7
- package/dist/cjs/providers/storage/fs-storage-provider.js +35 -15
- package/dist/cjs/providers/storage/parseStorageCredentials.d.ts +1 -2
- package/dist/cjs/staticModels/Consensus.d.ts +5 -16
- package/dist/cjs/staticModels/Consensus.js +17 -86
- package/dist/cjs/staticModels/Offers.d.ts +4 -1
- package/dist/cjs/staticModels/Offers.js +9 -8
- package/dist/cjs/staticModels/OffersCommon.d.ts +3 -1
- package/dist/cjs/staticModels/OffersCommon.js +6 -2
- package/dist/cjs/staticModels/Orders.js +12 -11
- package/dist/cjs/staticModels/ProviderRewards.js +2 -2
- package/dist/cjs/staticModels/StaticModel.js +5 -5
- package/dist/cjs/staticModels/SuperproToken.d.ts +7 -7
- package/dist/cjs/staticModels/SuperproToken.js +3 -3
- package/dist/cjs/staticModels/TeeOffers.d.ts +1 -7
- package/dist/cjs/staticModels/TeeOffers.js +11 -20
- package/dist/cjs/store.d.ts +0 -1
- package/dist/cjs/store.js +1 -2
- package/dist/cjs/tee/TeeBlockVerifier.d.ts +1 -2
- package/dist/cjs/tee/TeeBlockVerifier.js +17 -24
- package/dist/cjs/tee/TeeCertificateService.d.ts +1 -1
- package/dist/cjs/tee/TeeCertificateService.js +6 -10
- package/dist/cjs/tee/statuses.d.ts +0 -7
- package/dist/cjs/tee/statuses.js +2 -10
- package/dist/cjs/types/Consensus.d.ts +10 -31
- package/dist/cjs/types/Consensus.js +2 -10
- package/dist/cjs/types/Offer.d.ts +5 -0
- package/dist/cjs/types/Order.d.ts +26 -21
- package/dist/cjs/types/Order.js +24 -17
- package/dist/cjs/types/index.d.ts +0 -1
- package/dist/cjs/types/index.js +1 -2
- package/dist/cjs/utils/CryptoKeysTransformer.js +5 -5
- package/dist/cjs/utils/TxManager.js +21 -5
- package/dist/cjs/utils/helper.d.ts +2 -8
- package/dist/cjs/utils/helper.js +6 -75
- package/dist/cjs/utils/helpers/OrderArgsHelper.d.ts +2 -2
- package/dist/cjs/utils/helpers/OrderArgsHelper.js +5 -5
- package/dist/cjs/utils/helpers/index.d.ts +1 -0
- package/dist/cjs/utils/helpers/index.js +2 -1
- package/dist/cjs/utils/helpers/streamToBuffer.d.ts +4 -0
- package/dist/cjs/utils/helpers/streamToBuffer.js +13 -0
- package/dist/cjs/utils/order/process-order.js +3 -4
- package/dist/cjs/utils/order/types.d.ts +0 -1
- package/dist/cjs/utils/order/versify.js +1 -7
- package/dist/cjs/utils/rent-calculator/rent-calculator.js +2 -3
- package/dist/cjs/utils/rent-calculator/types.d.ts +0 -1
- package/dist/cjs/utils/tcb.d.ts +2 -0
- package/dist/cjs/utils/tcb.js +13 -0
- package/dist/cjs/utils/types.d.ts +0 -5
- package/dist/mjs/RIGenerator.d.ts +3 -3
- package/dist/mjs/RIGenerator.js +8 -7
- package/dist/mjs/TIIGenerator.d.ts +3 -4
- package/dist/mjs/TIIGenerator.js +34 -7
- package/dist/mjs/TeeInputGeneratorBase.d.ts +3 -3
- package/dist/mjs/TeeInputGeneratorBase.js +5 -5
- package/dist/mjs/certificates/serializer.d.ts +5 -3
- package/dist/mjs/certificates/serializer.js +26 -11
- package/dist/mjs/certificates/types.d.ts +1 -1
- package/dist/mjs/connectors/BaseConnector.d.ts +3 -3
- package/dist/mjs/connectors/BaseConnector.js +1 -1
- package/dist/mjs/connectors/BlockchainConnector.js +3 -3
- package/dist/mjs/connectors/BlockchainEventsListener.d.ts +2 -2
- package/dist/mjs/connectors/BlockchainEventsListener.js +3 -2
- package/dist/mjs/constants.d.ts +1 -3
- package/dist/mjs/constants.js +2 -6
- package/dist/mjs/contracts/abi.d.ts +1067 -1137
- package/dist/mjs/contracts/abi.js +1406 -1498
- package/dist/mjs/crypto/Crypto.d.ts +10 -13
- package/dist/mjs/crypto/Crypto.js +14 -17
- package/dist/mjs/crypto/nodejs/AES.d.ts +1 -1
- package/dist/mjs/crypto/nodejs/AES.js +2 -2
- package/dist/mjs/crypto/nodejs/ARIA.d.ts +1 -1
- package/dist/mjs/crypto/nodejs/ARIA.js +2 -2
- package/dist/mjs/errors/index.d.ts +1 -0
- package/dist/mjs/errors/index.js +2 -1
- package/dist/mjs/errors/insufficient-funds.error.d.ts +19 -0
- package/dist/mjs/errors/insufficient-funds.error.js +53 -0
- package/dist/mjs/index.d.ts +3 -6
- package/dist/mjs/index.js +4 -7
- package/dist/mjs/models/Offer.d.ts +16 -1
- package/dist/mjs/models/Offer.js +53 -3
- package/dist/mjs/models/Order.d.ts +1 -1
- package/dist/mjs/models/Order.js +11 -15
- package/dist/mjs/models/Provider.d.ts +0 -1
- package/dist/mjs/models/Provider.js +1 -7
- package/dist/mjs/models/TCB.d.ts +1 -28
- package/dist/mjs/models/TCB.js +2 -62
- package/dist/mjs/models/TeeOffer.d.ts +3 -18
- package/dist/mjs/models/TeeOffer.js +13 -99
- package/dist/mjs/providers/storage/S3StorageProvider.js +5 -5
- package/dist/mjs/providers/storage/StorageKeyValueAdapter.d.ts +1 -1
- package/dist/mjs/providers/storage/StorageKeyValueAdapter.js +7 -7
- package/dist/mjs/providers/storage/fs-storage-provider.js +35 -15
- package/dist/mjs/providers/storage/parseStorageCredentials.d.ts +1 -2
- package/dist/mjs/staticModels/Consensus.d.ts +5 -16
- package/dist/mjs/staticModels/Consensus.js +18 -87
- package/dist/mjs/staticModels/Offers.d.ts +4 -1
- package/dist/mjs/staticModels/Offers.js +9 -8
- package/dist/mjs/staticModels/OffersCommon.d.ts +3 -1
- package/dist/mjs/staticModels/OffersCommon.js +6 -2
- package/dist/mjs/staticModels/Orders.js +12 -11
- package/dist/mjs/staticModels/ProviderRewards.js +3 -3
- package/dist/mjs/staticModels/StaticModel.js +5 -5
- package/dist/mjs/staticModels/SuperproToken.d.ts +7 -7
- package/dist/mjs/staticModels/SuperproToken.js +3 -3
- package/dist/mjs/staticModels/TeeOffers.d.ts +1 -7
- package/dist/mjs/staticModels/TeeOffers.js +12 -21
- package/dist/mjs/store.d.ts +0 -1
- package/dist/mjs/store.js +2 -3
- package/dist/mjs/tee/TeeBlockVerifier.d.ts +1 -2
- package/dist/mjs/tee/TeeBlockVerifier.js +17 -24
- package/dist/mjs/tee/TeeCertificateService.d.ts +1 -1
- package/dist/mjs/tee/TeeCertificateService.js +7 -11
- package/dist/mjs/tee/statuses.d.ts +0 -7
- package/dist/mjs/tee/statuses.js +1 -9
- package/dist/mjs/types/Consensus.d.ts +10 -31
- package/dist/mjs/types/Consensus.js +1 -9
- package/dist/mjs/types/Offer.d.ts +5 -0
- package/dist/mjs/types/Order.d.ts +26 -21
- package/dist/mjs/types/Order.js +21 -17
- package/dist/mjs/types/index.d.ts +0 -1
- package/dist/mjs/types/index.js +1 -2
- package/dist/mjs/utils/CryptoKeysTransformer.js +5 -5
- package/dist/mjs/utils/TxManager.js +21 -5
- package/dist/mjs/utils/helper.d.ts +2 -8
- package/dist/mjs/utils/helper.js +5 -68
- package/dist/mjs/utils/helpers/OrderArgsHelper.d.ts +2 -2
- package/dist/mjs/utils/helpers/OrderArgsHelper.js +5 -5
- package/dist/mjs/utils/helpers/index.d.ts +1 -0
- package/dist/mjs/utils/helpers/index.js +2 -1
- package/dist/mjs/utils/helpers/streamToBuffer.d.ts +4 -0
- package/dist/mjs/utils/helpers/streamToBuffer.js +9 -0
- package/dist/mjs/utils/order/process-order.js +3 -4
- package/dist/mjs/utils/order/types.d.ts +0 -1
- package/dist/mjs/utils/order/versify.js +1 -7
- package/dist/mjs/utils/rent-calculator/rent-calculator.js +2 -3
- package/dist/mjs/utils/rent-calculator/types.d.ts +0 -1
- package/dist/mjs/utils/tcb.d.ts +2 -0
- package/dist/mjs/utils/tcb.js +9 -0
- package/dist/mjs/utils/types.d.ts +0 -5
- package/package.json +8 -9
- package/dist/cjs/contracts/Campaign.d.ts +0 -1198
- package/dist/cjs/contracts/Campaign.js +0 -1554
- package/dist/cjs/contracts/CampaignTxPart.d.ts +0 -454
- package/dist/cjs/contracts/CampaignTxPart.js +0 -592
- package/dist/cjs/contracts/adminCertificateHelperAbi.d.ts +0 -316
- package/dist/cjs/contracts/adminCertificateHelperAbi.js +0 -410
- package/dist/cjs/proto/TeeDeviceInfo.d.ts +0 -292
- package/dist/cjs/proto/TeeDeviceInfo.js +0 -491
- package/dist/cjs/staticModels/AdminCertificateHelper.d.ts +0 -24
- package/dist/cjs/staticModels/AdminCertificateHelper.js +0 -99
- package/dist/cjs/staticModels/Campaign.d.ts +0 -63
- package/dist/cjs/staticModels/Campaign.js +0 -318
- package/dist/cjs/staticModels/CampaignTxPart.d.ts +0 -19
- package/dist/cjs/staticModels/CampaignTxPart.js +0 -58
- package/dist/cjs/tee/QuoteValidator.d.ts +0 -46
- package/dist/cjs/tee/QuoteValidator.js +0 -456
- package/dist/cjs/tee/TcbSerializer.d.ts +0 -20
- package/dist/cjs/tee/TcbSerializer.js +0 -27
- package/dist/cjs/types/Campaign.d.ts +0 -55
- package/dist/cjs/types/Campaign.js +0 -17
- package/dist/cjs/utils/admin-service.d.ts +0 -13
- package/dist/cjs/utils/admin-service.js +0 -73
- package/dist/mjs/contracts/Campaign.d.ts +0 -1198
- package/dist/mjs/contracts/Campaign.js +0 -1551
- package/dist/mjs/contracts/CampaignTxPart.d.ts +0 -454
- package/dist/mjs/contracts/CampaignTxPart.js +0 -589
- package/dist/mjs/contracts/adminCertificateHelperAbi.d.ts +0 -316
- package/dist/mjs/contracts/adminCertificateHelperAbi.js +0 -407
- package/dist/mjs/proto/TeeDeviceInfo.d.ts +0 -292
- package/dist/mjs/proto/TeeDeviceInfo.js +0 -485
- package/dist/mjs/staticModels/AdminCertificateHelper.d.ts +0 -24
- package/dist/mjs/staticModels/AdminCertificateHelper.js +0 -92
- package/dist/mjs/staticModels/Campaign.d.ts +0 -63
- package/dist/mjs/staticModels/Campaign.js +0 -313
- package/dist/mjs/staticModels/CampaignTxPart.d.ts +0 -19
- package/dist/mjs/staticModels/CampaignTxPart.js +0 -51
- package/dist/mjs/tee/QuoteValidator.d.ts +0 -46
- package/dist/mjs/tee/QuoteValidator.js +0 -449
- package/dist/mjs/tee/TcbSerializer.d.ts +0 -20
- package/dist/mjs/tee/TcbSerializer.js +0 -23
- package/dist/mjs/types/Campaign.d.ts +0 -55
- package/dist/mjs/types/Campaign.js +0 -14
- package/dist/mjs/utils/admin-service.d.ts +0 -13
- package/dist/mjs/utils/admin-service.js +0 -66
|
@@ -1,456 +0,0 @@
|
|
|
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.QuoteValidator = void 0;
|
|
7
|
-
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const elliptic_1 = __importDefault(require("elliptic"));
|
|
9
|
-
const node_forge_1 = __importDefault(require("node-forge"));
|
|
10
|
-
const x509_1 = require("@fidm/x509");
|
|
11
|
-
const js_encoding_utils_1 = require("js-encoding-utils");
|
|
12
|
-
const pkijs_1 = require("pkijs");
|
|
13
|
-
const asn1js_1 = require("asn1js");
|
|
14
|
-
const lodash_1 = __importDefault(require("lodash"));
|
|
15
|
-
const QuoteParser_js_1 = require("./QuoteParser.js");
|
|
16
|
-
const types_js_1 = require("./types.js");
|
|
17
|
-
const logger_js_1 = __importDefault(require("../logger.js"));
|
|
18
|
-
const errors_js_1 = require("./errors.js");
|
|
19
|
-
const statuses_js_1 = require("./statuses.js");
|
|
20
|
-
const dto_js_1 = require("@super-protocol/dto-js");
|
|
21
|
-
const index_js_1 = __importDefault(require("../crypto/index.js"));
|
|
22
|
-
const TeeSignatureVerifier_js_1 = require("./TeeSignatureVerifier.js");
|
|
23
|
-
const pki_common_1 = require("@super-protocol/pki-common");
|
|
24
|
-
const { ec } = elliptic_1.default;
|
|
25
|
-
const { util, asn1 } = node_forge_1.default;
|
|
26
|
-
const INTEL_BASE_SGX_URL = 'https://api.trustedservices.intel.com';
|
|
27
|
-
const INTEL_SGX_ROOT_CA_URL = 'https://certificates.trustedservices.intel.com/IntelSGXRootCA.der';
|
|
28
|
-
const SGX_OID = '1.2.840.113741.1.13.1';
|
|
29
|
-
const FMSPC_OID = `${SGX_OID}.4`;
|
|
30
|
-
const PCEID_OID = `${SGX_OID}.3`;
|
|
31
|
-
const TCB_OID = `${SGX_OID}.2`;
|
|
32
|
-
const PCESVN_OID = `${TCB_OID}.17`;
|
|
33
|
-
const INTEL_ROOT_PUB_KEY = new Uint8Array([
|
|
34
|
-
4, 11, 169, 196, 192, 192, 200, 97, 147, 163, 254, 35, 214, 176, 44, 218, 16, 168, 187, 212, 232,
|
|
35
|
-
142, 72, 180, 69, 133, 97, 163, 110, 112, 85, 37, 245, 103, 145, 142, 46, 220, 136, 228, 13, 134,
|
|
36
|
-
11, 208, 204, 78, 226, 106, 172, 201, 136, 229, 5, 169, 83, 85, 140, 69, 63, 107, 9, 4, 174, 115,
|
|
37
|
-
148,
|
|
38
|
-
]);
|
|
39
|
-
class QuoteValidator {
|
|
40
|
-
isDefault;
|
|
41
|
-
baseUrl;
|
|
42
|
-
teeSgxParser;
|
|
43
|
-
teeTdxParser;
|
|
44
|
-
logger;
|
|
45
|
-
constructor(baseUrl) {
|
|
46
|
-
this.isDefault = baseUrl === INTEL_BASE_SGX_URL;
|
|
47
|
-
this.baseUrl = `${baseUrl}/sgx/certification/v4`;
|
|
48
|
-
this.teeSgxParser = new QuoteParser_js_1.TeeSgxParser();
|
|
49
|
-
this.teeTdxParser = new QuoteParser_js_1.TeeTdxParser();
|
|
50
|
-
this.logger = logger_js_1.default.child({ className: QuoteValidator.name });
|
|
51
|
-
}
|
|
52
|
-
static getSignature(mrEnclave, challengeType, options) {
|
|
53
|
-
return TeeSignatureVerifier_js_1.TeeSignatureVerifier.getSignature(mrEnclave, challengeType, options);
|
|
54
|
-
}
|
|
55
|
-
static async checkSignature(quote, options = { getMrEnclaveSignature: TeeSignatureVerifier_js_1.TeeSignatureVerifier.getSignature }) {
|
|
56
|
-
const { type: quoteType } = QuoteParser_js_1.TeeSgxParser.determineQuoteType(quote);
|
|
57
|
-
switch (quoteType) {
|
|
58
|
-
case types_js_1.QuoteType.SGX: {
|
|
59
|
-
const parser = new QuoteParser_js_1.TeeSgxParser();
|
|
60
|
-
const parsedQuote = parser.parseQuote(quote);
|
|
61
|
-
const report = parser.parseReport(parsedQuote.report);
|
|
62
|
-
TeeSignatureVerifier_js_1.TeeSignatureVerifier.validateSignatureSgx(report.mrSigner);
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
case types_js_1.QuoteType.TDX: {
|
|
66
|
-
const mrEnclave = QuoteParser_js_1.TeeParser.getMrEnclave(quote);
|
|
67
|
-
await TeeSignatureVerifier_js_1.TeeSignatureVerifier.validateSignature(mrEnclave, pki_common_1.ChallengeType.TDX, options);
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
splitChain(chain) {
|
|
73
|
-
const begin = '-----BEGIN CERTIFICATE-----';
|
|
74
|
-
const end = '-----END CERTIFICATE-----';
|
|
75
|
-
return chain
|
|
76
|
-
.split(begin)
|
|
77
|
-
.filter(Boolean)
|
|
78
|
-
.map((cert) => begin.concat(cert.slice(0, cert.indexOf(end)), end));
|
|
79
|
-
}
|
|
80
|
-
findSequenceByOID(hexValue, targetOID) {
|
|
81
|
-
const buffer = util.hexToBytes(hexValue);
|
|
82
|
-
const asn1Data = asn1.fromDer(buffer);
|
|
83
|
-
return this.searchForSequence(asn1Data, targetOID);
|
|
84
|
-
}
|
|
85
|
-
searchForSequence(asn1Data, targetOID) {
|
|
86
|
-
if (asn1Data.type === asn1.Type.SEQUENCE) {
|
|
87
|
-
for (const child of asn1Data.value) {
|
|
88
|
-
if (child.type === asn1.Type.OID) {
|
|
89
|
-
const oid = asn1.derToOid(child.value);
|
|
90
|
-
if (oid === targetOID) {
|
|
91
|
-
return asn1Data;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
if (Array.isArray(asn1Data.value)) {
|
|
97
|
-
for (const child of asn1Data.value) {
|
|
98
|
-
const result = this.searchForSequence(child, targetOID);
|
|
99
|
-
if (result) {
|
|
100
|
-
return result;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
verifyDataBySignature(data, signature, key) {
|
|
107
|
-
const ellipticEc = new ec('p256');
|
|
108
|
-
return ellipticEc.verify(data, {
|
|
109
|
-
r: signature.subarray(0, 32),
|
|
110
|
-
s: signature.subarray(32),
|
|
111
|
-
}, ellipticEc.keyFromPublic(key, 'hex'));
|
|
112
|
-
}
|
|
113
|
-
checkValidDate(from, to) {
|
|
114
|
-
const now = Date.now();
|
|
115
|
-
return from < now && now < to;
|
|
116
|
-
}
|
|
117
|
-
checkChainForIssuers(pckCert, platformCert, rootCert) {
|
|
118
|
-
return (lodash_1.default.isEqual(pckCert.issuer, platformCert.subject) &&
|
|
119
|
-
lodash_1.default.isEqual(platformCert.issuer, rootCert.subject));
|
|
120
|
-
}
|
|
121
|
-
getCrl(crlData) {
|
|
122
|
-
const crlDer = crlData.startsWith('-----')
|
|
123
|
-
? js_encoding_utils_1.formatter.pemToBin(crlData)
|
|
124
|
-
: Buffer.from(crlData, 'hex');
|
|
125
|
-
const crlAsn = (0, asn1js_1.fromBER)(crlDer);
|
|
126
|
-
return new pkijs_1.CertificateRevocationList({ schema: crlAsn.result });
|
|
127
|
-
}
|
|
128
|
-
checkCertificatesInCrl(crl, certIds) {
|
|
129
|
-
if (!crl.thisUpdate || !crl.nextUpdate) {
|
|
130
|
-
throw new errors_js_1.TeeQuoteValidatorError('Certificate revocation list has no update date field');
|
|
131
|
-
}
|
|
132
|
-
if (!this.checkValidDate(crl.thisUpdate.value.valueOf(), crl.nextUpdate.value.valueOf())) {
|
|
133
|
-
throw new errors_js_1.TeeQuoteValidatorError('Certificate revocation list has invalid update date');
|
|
134
|
-
}
|
|
135
|
-
if (crl.revokedCertificates) {
|
|
136
|
-
const isAnyRevoked = crl.revokedCertificates.find((revoked) => certIds.includes(Buffer.from(revoked.userCertificate.valueBlock.valueHexView).toString('hex')));
|
|
137
|
-
if (isAnyRevoked) {
|
|
138
|
-
throw new errors_js_1.TeeQuoteValidatorError('Certificate in revokation list');
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
async getCertificates(quote) {
|
|
143
|
-
const platformCrlResult = await axios_1.default.get(`${this.baseUrl}/pckcrl?ca=platform&encoding=pem`);
|
|
144
|
-
const platformChain = decodeURIComponent(platformCrlResult.headers['sgx-pck-crl-issuer-chain']);
|
|
145
|
-
const [platformFetchedPem, rootFetchedPem] = this.splitChain(platformChain); // [platform, root]
|
|
146
|
-
const platformFetchedCert = x509_1.Certificate.fromPEM(Buffer.from(platformFetchedPem));
|
|
147
|
-
const rootFetchedCert = x509_1.Certificate.fromPEM(Buffer.from(rootFetchedPem));
|
|
148
|
-
if (!this.checkValidDate(platformFetchedCert.validFrom.valueOf(), platformFetchedCert.validTo.valueOf())) {
|
|
149
|
-
throw new errors_js_1.TeeQuoteValidatorError('Platform certificate validation date is not valid');
|
|
150
|
-
}
|
|
151
|
-
if (!this.checkValidDate(rootFetchedCert.validFrom.valueOf(), rootFetchedCert.validTo.valueOf())) {
|
|
152
|
-
throw new errors_js_1.TeeQuoteValidatorError('Root certificate validation date is not valid');
|
|
153
|
-
}
|
|
154
|
-
if (!lodash_1.default.isEqual(rootFetchedCert.issuer, rootFetchedCert.subject)) {
|
|
155
|
-
throw new errors_js_1.TeeQuoteValidatorError('Root certificate is not self-signed');
|
|
156
|
-
}
|
|
157
|
-
if (Buffer.compare(rootFetchedCert.publicKey.keyRaw, INTEL_ROOT_PUB_KEY) !== 0) {
|
|
158
|
-
throw new errors_js_1.TeeQuoteValidatorError('Wrong Intel root certificate public key');
|
|
159
|
-
}
|
|
160
|
-
const pckCert = x509_1.Certificate.fromPEM(Buffer.from(quote.certificates.device.pem));
|
|
161
|
-
const certType = quote.qeCertificationDataType;
|
|
162
|
-
if (!this.checkValidDate(pckCert.validFrom.valueOf(), pckCert.validTo.valueOf())) {
|
|
163
|
-
throw new errors_js_1.TeeQuoteValidatorError('PCK certificate validation date is not valid');
|
|
164
|
-
}
|
|
165
|
-
if (certType !== 5) {
|
|
166
|
-
throw new errors_js_1.TeeQuoteValidatorError(`Unsupported certification data type: ${certType}`);
|
|
167
|
-
}
|
|
168
|
-
if (rootFetchedPem !== quote.certificates.root.pem) {
|
|
169
|
-
throw new errors_js_1.TeeQuoteValidatorError("Invalid SGX root certificate in quote's certificate chain");
|
|
170
|
-
}
|
|
171
|
-
if (!this.checkChainForIssuers(pckCert, platformFetchedCert, rootFetchedCert)) {
|
|
172
|
-
throw new errors_js_1.TeeQuoteValidatorError('Invalid issuers in certificates chain');
|
|
173
|
-
}
|
|
174
|
-
const certIds = [
|
|
175
|
-
rootFetchedCert.serialNumber,
|
|
176
|
-
platformFetchedCert.serialNumber,
|
|
177
|
-
pckCert.serialNumber,
|
|
178
|
-
];
|
|
179
|
-
const caCrlUrl = this.isDefault
|
|
180
|
-
? INTEL_SGX_ROOT_CA_URL
|
|
181
|
-
: `${this.baseUrl}/crl?uri=${INTEL_SGX_ROOT_CA_URL}`;
|
|
182
|
-
const intelCrlDer = await axios_1.default.get(caCrlUrl, {
|
|
183
|
-
responseType: 'arraybuffer',
|
|
184
|
-
});
|
|
185
|
-
const intelCrlAsn = (0, asn1js_1.fromBER)(Buffer.from(intelCrlDer.data));
|
|
186
|
-
this.checkCertificatesInCrl(new pkijs_1.CertificateRevocationList({ schema: intelCrlAsn.result }), certIds);
|
|
187
|
-
const platformCrl = this.getCrl(platformCrlResult.data);
|
|
188
|
-
this.checkCertificatesInCrl(platformCrl, certIds);
|
|
189
|
-
return { pckCert, rootCertPem: rootFetchedPem };
|
|
190
|
-
}
|
|
191
|
-
async verifyQeReportSignature(quote, pckPublicKey) {
|
|
192
|
-
const signature = Buffer.from(quote.qeReportSignature);
|
|
193
|
-
const reportHash = await this.getSha256Hash(Buffer.from(quote.qeReport));
|
|
194
|
-
return this.verifyDataBySignature(reportHash, signature, pckPublicKey);
|
|
195
|
-
}
|
|
196
|
-
async verifyQeReportData(quote, report) {
|
|
197
|
-
const qeAuthData = quote.qeAuthenticationData;
|
|
198
|
-
const attestationKey = quote.ecdsaAttestationKey;
|
|
199
|
-
const qeReportDataHash = report.dataHash;
|
|
200
|
-
const calculatedHash = await this.getSha256Hash(Buffer.concat([attestationKey, qeAuthData]));
|
|
201
|
-
const result = Buffer.compare(qeReportDataHash, calculatedHash);
|
|
202
|
-
return result === 0;
|
|
203
|
-
}
|
|
204
|
-
async verifyEnclaveReportSignature(quote) {
|
|
205
|
-
const key = Buffer.from(quote.ecdsaAttestationKey);
|
|
206
|
-
const headerBuffer = Buffer.from(quote.rawHeader);
|
|
207
|
-
const reportBuffer = quote.quoteType === types_js_1.QuoteType.SGX
|
|
208
|
-
? Buffer.from(quote.report)
|
|
209
|
-
: Buffer.from(quote.tdQuoteBody);
|
|
210
|
-
const expected = quote.quoteType === types_js_1.QuoteType.SGX
|
|
211
|
-
? Buffer.from(quote.isvEnclaveReportSignature)
|
|
212
|
-
: Buffer.from(quote.quoteSignature);
|
|
213
|
-
const calculatedHash = await this.getSha256Hash(Buffer.concat([headerBuffer, reportBuffer]));
|
|
214
|
-
const ellipticEc = new ec('p256');
|
|
215
|
-
return ellipticEc.verify(calculatedHash, {
|
|
216
|
-
r: expected.subarray(0, 32),
|
|
217
|
-
s: expected.subarray(32),
|
|
218
|
-
}, Buffer.concat([Buffer.from([4]), key]));
|
|
219
|
-
}
|
|
220
|
-
async validateQuoteStructure(quote, report, pckPublicKey) {
|
|
221
|
-
if (!(await this.verifyQeReportSignature(quote, pckPublicKey))) {
|
|
222
|
-
throw new errors_js_1.TeeQuoteValidatorError('Wrong QE report signature');
|
|
223
|
-
}
|
|
224
|
-
if (!(await this.verifyQeReportData(quote, report))) {
|
|
225
|
-
throw new errors_js_1.TeeQuoteValidatorError('Wrong QE report data');
|
|
226
|
-
}
|
|
227
|
-
if (!(await this.verifyEnclaveReportSignature(quote))) {
|
|
228
|
-
throw new errors_js_1.TeeQuoteValidatorError('Wrong enclave report signature');
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
getSgxExtensionData(pckCert) {
|
|
232
|
-
const sgxExtensionData = pckCert.extensions.find((item) => item.oid === SGX_OID);
|
|
233
|
-
if (!sgxExtensionData) {
|
|
234
|
-
throw new errors_js_1.TeeQuoteValidatorError('SGX data not found in PCK certificate');
|
|
235
|
-
}
|
|
236
|
-
return sgxExtensionData;
|
|
237
|
-
}
|
|
238
|
-
getDataFromExtension(sgxExtensionData, targetOid, targetType) {
|
|
239
|
-
const rawData = this.findSequenceByOID(sgxExtensionData.value.toString('hex'), targetOid);
|
|
240
|
-
if (!rawData) {
|
|
241
|
-
throw new errors_js_1.TeeQuoteValidatorError(`OID ${targetOid} not found in PCK certificate's SGX data`);
|
|
242
|
-
}
|
|
243
|
-
const data = rawData.value.filter((asnElement) => asnElement.type === targetType);
|
|
244
|
-
if (!data.length) {
|
|
245
|
-
throw new errors_js_1.TeeQuoteValidatorError(`Data on OID ${targetOid} of type ${targetType} not found`);
|
|
246
|
-
}
|
|
247
|
-
const result = util.bytesToHex(data[0].value);
|
|
248
|
-
return targetType === asn1.Type.OCTETSTRING ? result : parseInt(result, 16).toString();
|
|
249
|
-
}
|
|
250
|
-
async getTcbInfo(fmspc, rootCertPem, quoteType) {
|
|
251
|
-
let tcbUrl = `${this.baseUrl}/tcb?fmspc=${fmspc}`;
|
|
252
|
-
if (quoteType === types_js_1.QuoteType.TDX) {
|
|
253
|
-
tcbUrl = tcbUrl.replace('sgx/certification', 'tdx/certification');
|
|
254
|
-
}
|
|
255
|
-
const tcbData = await axios_1.default.get(tcbUrl);
|
|
256
|
-
const tcbInfoHeader = 'tcb-info-issuer-chain';
|
|
257
|
-
const tcbInfoChain = this.splitChain(decodeURIComponent(tcbData.headers[tcbInfoHeader])); // [tcb, root]
|
|
258
|
-
if (tcbInfoChain[1] !== rootCertPem) {
|
|
259
|
-
throw new errors_js_1.TeeQuoteValidatorError('Invalid SGX root certificate in TCB chain');
|
|
260
|
-
}
|
|
261
|
-
const tcbCert = x509_1.Certificate.fromPEM(Buffer.from(tcbInfoChain[0]));
|
|
262
|
-
const key = tcbCert.publicKey.keyRaw;
|
|
263
|
-
const signature = Buffer.from(tcbData.data.signature, 'hex');
|
|
264
|
-
const calculatedhash = await this.getSha256Hash(Buffer.from(JSON.stringify(tcbData.data.tcbInfo)));
|
|
265
|
-
const result = this.verifyDataBySignature(calculatedhash, signature, key);
|
|
266
|
-
if (!result) {
|
|
267
|
-
throw new errors_js_1.TeeQuoteValidatorError('TCB info signature is not valid');
|
|
268
|
-
}
|
|
269
|
-
if (tcbData.data.tcbInfo.nextUpdate.valueOf() > Date.now()) {
|
|
270
|
-
throw new errors_js_1.TeeQuoteValidatorError('TCB next update date is out of date');
|
|
271
|
-
}
|
|
272
|
-
return tcbData.data;
|
|
273
|
-
}
|
|
274
|
-
async getQEIdentity(rootCertPem, quoteType) {
|
|
275
|
-
let qeIdentityUrl = `${this.baseUrl}/qe/identity`;
|
|
276
|
-
if (quoteType === types_js_1.QuoteType.TDX) {
|
|
277
|
-
qeIdentityUrl = qeIdentityUrl.replace('sgx/certification', 'tdx/certification');
|
|
278
|
-
}
|
|
279
|
-
const qeIdentityData = await axios_1.default.get(qeIdentityUrl);
|
|
280
|
-
const qeIdentityHeader = 'sgx-enclave-identity-issuer-chain';
|
|
281
|
-
const qeIdentityChain = this.splitChain(decodeURIComponent(qeIdentityData.headers[qeIdentityHeader])); // [qeIdentity, root]
|
|
282
|
-
if (qeIdentityChain[1] !== rootCertPem) {
|
|
283
|
-
throw new errors_js_1.TeeQuoteValidatorError('Invalid SGX root certificate in enclave identity chain');
|
|
284
|
-
}
|
|
285
|
-
const qeIdentityCert = x509_1.Certificate.fromPEM(Buffer.from(qeIdentityChain[0]));
|
|
286
|
-
const key = qeIdentityCert.publicKey.keyRaw;
|
|
287
|
-
const signature = Buffer.from(qeIdentityData.data.signature, 'hex');
|
|
288
|
-
const calculatedhash = await this.getSha256Hash(Buffer.from(JSON.stringify(qeIdentityData.data.enclaveIdentity)));
|
|
289
|
-
const result = this.verifyDataBySignature(calculatedhash, signature, key);
|
|
290
|
-
if (!result) {
|
|
291
|
-
throw new errors_js_1.TeeQuoteValidatorError('Enclave identity signature is not valid');
|
|
292
|
-
}
|
|
293
|
-
if (qeIdentityData.data.enclaveIdentity.nextUpdate.valueOf() > Date.now()) {
|
|
294
|
-
throw new errors_js_1.TeeQuoteValidatorError('Enclave identity next update date is out of date');
|
|
295
|
-
}
|
|
296
|
-
return qeIdentityData.data;
|
|
297
|
-
}
|
|
298
|
-
getQEIdentityStatus(report, qeIdentity) {
|
|
299
|
-
const mrSigner = report.mrSigner.toString('hex');
|
|
300
|
-
if (mrSigner.toUpperCase() !== qeIdentity.enclaveIdentity.mrsigner) {
|
|
301
|
-
throw new errors_js_1.TeeQuoteValidatorError('Wrong MR signer in QE report');
|
|
302
|
-
}
|
|
303
|
-
if (report.isvProdId !== qeIdentity.enclaveIdentity.isvprodid) {
|
|
304
|
-
throw new errors_js_1.TeeQuoteValidatorError('Wrong ISV PROD ID in QE report');
|
|
305
|
-
}
|
|
306
|
-
const tcbLevel = qeIdentity.enclaveIdentity.tcbLevels.find((tcbLevel) => tcbLevel.tcb.isvsvn <= report.isvSvn);
|
|
307
|
-
const status = tcbLevel?.tcbStatus;
|
|
308
|
-
if (status) {
|
|
309
|
-
this.logger.info(`Enclave identity status is ${tcbLevel?.tcbStatus}`);
|
|
310
|
-
return status;
|
|
311
|
-
}
|
|
312
|
-
return statuses_js_1.QEIdentityStatuses.OutOfDate;
|
|
313
|
-
}
|
|
314
|
-
getTcbStatus(fmspc, pceId, tcbData, sgxExtensionData) {
|
|
315
|
-
if (fmspc.toUpperCase() !== tcbData.tcbInfo.fmspc.toUpperCase()) {
|
|
316
|
-
throw new errors_js_1.TeeQuoteValidatorError('Wrong FMSPC in PCK certificate');
|
|
317
|
-
}
|
|
318
|
-
if (pceId !== tcbData.tcbInfo.pceId) {
|
|
319
|
-
throw new errors_js_1.TeeQuoteValidatorError('Wrong PCEID in PCK certificate');
|
|
320
|
-
}
|
|
321
|
-
const pceSvn = this.getDataFromExtension(sgxExtensionData, PCESVN_OID, asn1.Type.INTEGER);
|
|
322
|
-
const sgxComponents = [...Array(16).keys()].map((i) => this.getDataFromExtension(sgxExtensionData, `${TCB_OID}.${i + 1}`, asn1.Type.INTEGER));
|
|
323
|
-
const tcbLevel = tcbData.tcbInfo.tcbLevels.find((tcbLevel) => tcbLevel.tcb.pcesvn <= Number(pceSvn) &&
|
|
324
|
-
tcbLevel.tcb.sgxtcbcomponents.every((el, index) => el.svn <= Number(sgxComponents[index])));
|
|
325
|
-
const status = tcbLevel?.tcbStatus;
|
|
326
|
-
if (status) {
|
|
327
|
-
this.logger.info(`TCB status is ${tcbLevel?.tcbStatus}`);
|
|
328
|
-
return status;
|
|
329
|
-
}
|
|
330
|
-
return statuses_js_1.TCBStatuses.OutOfDate;
|
|
331
|
-
}
|
|
332
|
-
getQuoteValidationStatus(qeIdentityStatus, tcbStatus) {
|
|
333
|
-
if (qeIdentityStatus === statuses_js_1.QEIdentityStatuses.OutOfDate) {
|
|
334
|
-
if (tcbStatus === statuses_js_1.TCBStatuses.UpToDate || tcbStatus === statuses_js_1.TCBStatuses.SWHardeningNeeded) {
|
|
335
|
-
return statuses_js_1.QuoteValidationStatuses.SecurityPatchNeeded;
|
|
336
|
-
}
|
|
337
|
-
if (tcbStatus === statuses_js_1.TCBStatuses.OutOfDateConfigurationNeeded ||
|
|
338
|
-
tcbStatus === statuses_js_1.TCBStatuses.ConfigurationAndSWHardeningNeeded) {
|
|
339
|
-
return statuses_js_1.QuoteValidationStatuses.SoftwareUpdateNeeded;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
if (qeIdentityStatus === statuses_js_1.QEIdentityStatuses.Revoked || tcbStatus === statuses_js_1.TCBStatuses.Revoked) {
|
|
343
|
-
throw new errors_js_1.TeeQuoteValidatorError('QE identity or TCB revoked');
|
|
344
|
-
}
|
|
345
|
-
if (tcbStatus === statuses_js_1.TCBStatuses.UpToDate) {
|
|
346
|
-
return statuses_js_1.QuoteValidationStatuses.UpToDate;
|
|
347
|
-
}
|
|
348
|
-
if (tcbStatus === statuses_js_1.TCBStatuses.OutOfDate) {
|
|
349
|
-
return statuses_js_1.QuoteValidationStatuses.SecurityPatchNeeded;
|
|
350
|
-
}
|
|
351
|
-
if (tcbStatus === statuses_js_1.TCBStatuses.ConfigurationNeeded) {
|
|
352
|
-
return statuses_js_1.QuoteValidationStatuses.ConfigurationNeeded;
|
|
353
|
-
}
|
|
354
|
-
return statuses_js_1.QuoteValidationStatuses.SoftwareUpdateNeeded;
|
|
355
|
-
}
|
|
356
|
-
getQuoteValidationStatusDescription(status) {
|
|
357
|
-
switch (status) {
|
|
358
|
-
case statuses_js_1.QuoteValidationStatuses.UpToDate:
|
|
359
|
-
return 'The Quote verification passed and is at the latest TCB level.';
|
|
360
|
-
case statuses_js_1.QuoteValidationStatuses.ConfigurationNeeded:
|
|
361
|
-
return `The SGX platform firmware and SW are at the latest security patching level
|
|
362
|
-
but there are platform hardware configurations may expose the enclave to vulnerabilities.`;
|
|
363
|
-
case statuses_js_1.QuoteValidationStatuses.SecurityPatchNeeded:
|
|
364
|
-
return `The SGX platform firmware and SW are not at the latest security patching level.
|
|
365
|
-
The platform needs to be patched with firmware and/or software patches.`;
|
|
366
|
-
case statuses_js_1.QuoteValidationStatuses.SoftwareUpdateNeeded:
|
|
367
|
-
return `The SGX platform firmware and SW are at the latest security patching level but there are
|
|
368
|
-
certain vulnerabilities that can only be mitigated with software mitigations implemented by the enclave.`;
|
|
369
|
-
default:
|
|
370
|
-
return 'Quote verification failed.';
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
async checkQuote(quote, dataBlob) {
|
|
374
|
-
const logger = this.logger.child({ method: this.checkQuote.name });
|
|
375
|
-
const quoteBuffer = Buffer.from(quote);
|
|
376
|
-
const quoteStatus = await this.validate(quoteBuffer);
|
|
377
|
-
if (quoteStatus.quoteValidationStatus !== statuses_js_1.QuoteValidationStatuses.UpToDate) {
|
|
378
|
-
if (quoteStatus.quoteValidationStatus === statuses_js_1.QuoteValidationStatuses.Error) {
|
|
379
|
-
throw new Error('Quote is invalid');
|
|
380
|
-
}
|
|
381
|
-
else {
|
|
382
|
-
logger.warn(quoteStatus, 'Quote validation status is not UpToDate');
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
const userDataCheckResult = await this.isQuoteHasUserData(quoteBuffer, Buffer.from(dataBlob));
|
|
386
|
-
if (!userDataCheckResult) {
|
|
387
|
-
throw new Error('Quote has invalid user data');
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
async checkSignature(quoteBuffer) {
|
|
391
|
-
await QuoteValidator.checkSignature(quoteBuffer);
|
|
392
|
-
}
|
|
393
|
-
async validate(quoteBuffer) {
|
|
394
|
-
try {
|
|
395
|
-
const quoteType = QuoteParser_js_1.TeeParser.determineQuoteType(quoteBuffer);
|
|
396
|
-
const quote = quoteType.type === types_js_1.QuoteType.SGX
|
|
397
|
-
? this.teeSgxParser.parseQuote(quoteBuffer)
|
|
398
|
-
: this.teeTdxParser.parseQuote(quoteBuffer);
|
|
399
|
-
const report = this.teeSgxParser.parseReport(quote.qeReport);
|
|
400
|
-
const { pckCert, rootCertPem } = await this.getCertificates(quote);
|
|
401
|
-
await this.validateQuoteStructure(quote, report, pckCert.publicKey.keyRaw);
|
|
402
|
-
this.logger.info('Quote structure validated successfully');
|
|
403
|
-
const sgxExtensionData = this.getSgxExtensionData(pckCert);
|
|
404
|
-
const fmspc = this.getDataFromExtension(sgxExtensionData, FMSPC_OID, asn1.Type.OCTETSTRING);
|
|
405
|
-
const pceId = this.getDataFromExtension(sgxExtensionData, PCEID_OID, asn1.Type.OCTETSTRING);
|
|
406
|
-
const tcbData = await this.getTcbInfo(fmspc, rootCertPem, quoteType.type);
|
|
407
|
-
const qeIdentity = await this.getQEIdentity(rootCertPem, quoteType.type);
|
|
408
|
-
const qeIdentityStatus = this.getQEIdentityStatus(report, qeIdentity);
|
|
409
|
-
const tcbStatus = this.getTcbStatus(fmspc, pceId, tcbData, sgxExtensionData); // TODO method 'validate' isn't only for tcb - extract this from quote validator
|
|
410
|
-
const quoteValidationStatus = this.getQuoteValidationStatus(qeIdentityStatus, tcbStatus);
|
|
411
|
-
this.logger.info(`Quote validation status is ${quoteValidationStatus}`);
|
|
412
|
-
return {
|
|
413
|
-
quoteValidationStatus,
|
|
414
|
-
description: this.getQuoteValidationStatusDescription(quoteValidationStatus),
|
|
415
|
-
};
|
|
416
|
-
}
|
|
417
|
-
catch (error) {
|
|
418
|
-
this.logger.error(`Validation error: ${error}`);
|
|
419
|
-
return {
|
|
420
|
-
quoteValidationStatus: statuses_js_1.QuoteValidationStatuses.Error,
|
|
421
|
-
description: this.getQuoteValidationStatusDescription(statuses_js_1.QuoteValidationStatuses.Error),
|
|
422
|
-
error,
|
|
423
|
-
};
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
async isQuoteHasUserData(quoteBuffer, userDataBuffer) {
|
|
427
|
-
const quoteType = QuoteParser_js_1.TeeParser.determineQuoteType(quoteBuffer);
|
|
428
|
-
const quote = quoteType.type === types_js_1.QuoteType.SGX
|
|
429
|
-
? this.teeSgxParser.parseQuote(quoteBuffer)
|
|
430
|
-
: this.teeTdxParser.parseQuote(quoteBuffer);
|
|
431
|
-
let slicedQuoteData;
|
|
432
|
-
const userDataHash = await this.getSha256Hash(userDataBuffer);
|
|
433
|
-
if (quoteType.type === types_js_1.QuoteType.SGX) {
|
|
434
|
-
slicedQuoteData = this.teeSgxParser
|
|
435
|
-
.parseReport(quote.report)
|
|
436
|
-
.userData.slice(0, userDataHash.length);
|
|
437
|
-
}
|
|
438
|
-
else {
|
|
439
|
-
slicedQuoteData = this.teeTdxParser
|
|
440
|
-
.parseBody(quote.tdQuoteBody)
|
|
441
|
-
.reportData.slice(0, userDataHash.length);
|
|
442
|
-
}
|
|
443
|
-
const compareResult = Buffer.compare(slicedQuoteData, userDataHash);
|
|
444
|
-
return compareResult === 0;
|
|
445
|
-
}
|
|
446
|
-
async getSha256Hash(data) {
|
|
447
|
-
const hashInfo = {
|
|
448
|
-
algo: dto_js_1.HashAlgorithm.SHA256,
|
|
449
|
-
encoding: dto_js_1.Encoding.base64,
|
|
450
|
-
};
|
|
451
|
-
const hashData = await index_js_1.default.createHash(data, hashInfo);
|
|
452
|
-
return Buffer.from(hashData.hash, hashData.encoding);
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
exports.QuoteValidator = QuoteValidator;
|
|
456
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVvdGVWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVlL1F1b3RlVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQix3REFBZ0M7QUFDaEMsNERBQStCO0FBQy9CLHFDQUFvRDtBQUNwRCx5REFBOEM7QUFDOUMsaUNBQWtEO0FBQ2xELG1DQUFpQztBQUNqQyxvREFBdUI7QUFDdkIscURBQXlFO0FBQ3pFLHlDQU9vQjtBQUNwQiw2REFBc0M7QUFFdEMsMkNBQXFEO0FBQ3JELCtDQUF5RjtBQUN6RixtREFBaUU7QUFDakUsa0VBQXdDO0FBQ3hDLHVFQUF3RjtBQUN4RiwyREFBMkQ7QUFFM0QsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLGtCQUFRLENBQUM7QUFDeEIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxvQkFBSyxDQUFDO0FBRTdCLE1BQU0sa0JBQWtCLEdBQUcsdUNBQXVDLENBQUM7QUFDbkUsTUFBTSxxQkFBcUIsR0FBRyxtRUFBbUUsQ0FBQztBQUNsRyxNQUFNLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQztBQUN4QyxNQUFNLFNBQVMsR0FBRyxHQUFHLE9BQU8sSUFBSSxDQUFDO0FBQ2pDLE1BQU0sU0FBUyxHQUFHLEdBQUcsT0FBTyxJQUFJLENBQUM7QUFDakMsTUFBTSxPQUFPLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FBQztBQUMvQixNQUFNLFVBQVUsR0FBRyxHQUFHLE9BQU8sS0FBSyxDQUFDO0FBQ25DLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxVQUFVLENBQUM7SUFDeEMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxF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
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { TcbVerifiedStatus, ConsensusBenchmark } from '@super-protocol/dto-js';
|
|
2
|
-
import { BlockchainId } from '../types/index.js';
|
|
3
|
-
export type TcbData = {
|
|
4
|
-
checkingTcbId: string;
|
|
5
|
-
pubKey: string;
|
|
6
|
-
checkingTcbIds: BlockchainId[];
|
|
7
|
-
checkingTcbMarks: TcbVerifiedStatus[];
|
|
8
|
-
deviceId: string;
|
|
9
|
-
benchmark: ConsensusBenchmark;
|
|
10
|
-
properties: string;
|
|
11
|
-
};
|
|
12
|
-
export type VersionedTcbData = {
|
|
13
|
-
v: number;
|
|
14
|
-
[key: string]: unknown;
|
|
15
|
-
};
|
|
16
|
-
export declare class TcbDataSerializer {
|
|
17
|
-
private static readonly VERSION;
|
|
18
|
-
static serialize(data: TcbData): Uint8Array;
|
|
19
|
-
static deserialize(buffer: Uint8Array): TcbData;
|
|
20
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TcbDataSerializer = void 0;
|
|
4
|
-
const msgpack_1 = require("@msgpack/msgpack");
|
|
5
|
-
class TcbDataSerializer {
|
|
6
|
-
static VERSION = 1; // Current version of the data structure
|
|
7
|
-
static serialize(data) {
|
|
8
|
-
const serializedData = {
|
|
9
|
-
v: TcbDataSerializer.VERSION,
|
|
10
|
-
quote: data,
|
|
11
|
-
};
|
|
12
|
-
return (0, msgpack_1.encode)(serializedData, { sortKeys: true });
|
|
13
|
-
}
|
|
14
|
-
static deserialize(buffer) {
|
|
15
|
-
const { v, ...rest } = (0, msgpack_1.decode)(buffer);
|
|
16
|
-
switch (v) {
|
|
17
|
-
case 1: {
|
|
18
|
-
return rest;
|
|
19
|
-
}
|
|
20
|
-
// Future versions can be handled here with additional cases
|
|
21
|
-
default:
|
|
22
|
-
throw new Error(`Unsupported version: ${v}`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
exports.TcbDataSerializer = TcbDataSerializer;
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGNiU2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZWUvVGNiU2VyaWFsaXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4Q0FBa0Q7QUFtQmxELE1BQWEsaUJBQWlCO0lBQ3BCLE1BQU0sQ0FBVSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO0lBRTdFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBYTtRQUM1QixNQUFNLGNBQWMsR0FBcUI7WUFDdkMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLE9BQU87WUFDNUIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDO1FBRUYsT0FBTyxJQUFBLGdCQUFNLEVBQUMsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBa0I7UUFDbkMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQXFCLENBQUM7UUFFMUQsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNWLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDUCxPQUFPLElBQWUsQ0FBQztZQUN6QixDQUFDO1lBQ0QsNERBQTREO1lBQzVEO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7O0FBdkJILDhDQXdCQyJ9
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { TokenAmount } from './Web3.js';
|
|
2
|
-
export declare enum Status {
|
|
3
|
-
InQueue = 0,
|
|
4
|
-
Deployed = 1,
|
|
5
|
-
NotDeployed = 2,
|
|
6
|
-
Revoked = 3
|
|
7
|
-
}
|
|
8
|
-
export declare enum MigrationNetwork {
|
|
9
|
-
Ethereum = 0,
|
|
10
|
-
BSC = 1,
|
|
11
|
-
Polygon = 2
|
|
12
|
-
}
|
|
13
|
-
export type ParticipantInfo = {
|
|
14
|
-
isRewardClaimed: boolean;
|
|
15
|
-
totalTransactions: number;
|
|
16
|
-
migrationsIndexes: number[];
|
|
17
|
-
};
|
|
18
|
-
export type ParticipantInfoViewed = {
|
|
19
|
-
participant: string;
|
|
20
|
-
rank: number;
|
|
21
|
-
score: number;
|
|
22
|
-
reward: TokenAmount;
|
|
23
|
-
};
|
|
24
|
-
export type TotalParticipantInfo = {
|
|
25
|
-
storedInfo: ParticipantInfo;
|
|
26
|
-
viewedInfo: ParticipantInfoViewed;
|
|
27
|
-
};
|
|
28
|
-
export type Migration = {
|
|
29
|
-
participant: string;
|
|
30
|
-
score: number;
|
|
31
|
-
firstSourceMigration: boolean;
|
|
32
|
-
sourceNetwork: MigrationNetwork;
|
|
33
|
-
status: Status;
|
|
34
|
-
statusChecks: number;
|
|
35
|
-
submittedTimestamp: number;
|
|
36
|
-
sourceAddress: string;
|
|
37
|
-
destinationAddress: string;
|
|
38
|
-
sourceUrl: string;
|
|
39
|
-
destinationUrl: string;
|
|
40
|
-
calculatedTransactionsBlockNumber: number;
|
|
41
|
-
transactions: number;
|
|
42
|
-
};
|
|
43
|
-
export type MigrationWithIndex = {
|
|
44
|
-
migration: Migration;
|
|
45
|
-
index: number;
|
|
46
|
-
};
|
|
47
|
-
export type ParticipantScore = {
|
|
48
|
-
participant: string;
|
|
49
|
-
score: number;
|
|
50
|
-
};
|
|
51
|
-
export type UpdateTxsArgs = {
|
|
52
|
-
migrationIndex: number;
|
|
53
|
-
transactions: number;
|
|
54
|
-
calculatedTransactionsBlockNumber: number;
|
|
55
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MigrationNetwork = exports.Status = void 0;
|
|
4
|
-
var Status;
|
|
5
|
-
(function (Status) {
|
|
6
|
-
Status[Status["InQueue"] = 0] = "InQueue";
|
|
7
|
-
Status[Status["Deployed"] = 1] = "Deployed";
|
|
8
|
-
Status[Status["NotDeployed"] = 2] = "NotDeployed";
|
|
9
|
-
Status[Status["Revoked"] = 3] = "Revoked";
|
|
10
|
-
})(Status || (exports.Status = Status = {}));
|
|
11
|
-
var MigrationNetwork;
|
|
12
|
-
(function (MigrationNetwork) {
|
|
13
|
-
MigrationNetwork[MigrationNetwork["Ethereum"] = 0] = "Ethereum";
|
|
14
|
-
MigrationNetwork[MigrationNetwork["BSC"] = 1] = "BSC";
|
|
15
|
-
MigrationNetwork[MigrationNetwork["Polygon"] = 2] = "Polygon";
|
|
16
|
-
})(MigrationNetwork || (exports.MigrationNetwork = MigrationNetwork = {}));
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FtcGFpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvQ2FtcGFpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsSUFBWSxNQUtYO0FBTEQsV0FBWSxNQUFNO0lBQ2hCLHlDQUFPLENBQUE7SUFDUCwyQ0FBUSxDQUFBO0lBQ1IsaURBQVcsQ0FBQTtJQUNYLHlDQUFPLENBQUE7QUFDVCxDQUFDLEVBTFcsTUFBTSxzQkFBTixNQUFNLFFBS2pCO0FBRUQsSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQzFCLCtEQUFRLENBQUE7SUFDUixxREFBRyxDQUFBO0lBQ0gsNkRBQU8sQ0FBQTtBQUNULENBQUMsRUFKVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQUkzQiJ9
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { RegisterAdminParams } from './types.js';
|
|
2
|
-
import { BlockchainCert } from '../certificates/index.js';
|
|
3
|
-
export declare class AdminService {
|
|
4
|
-
private readonly logger;
|
|
5
|
-
constructor(adminCertificateContractAddress: string);
|
|
6
|
-
registerAdmin(params: RegisterAdminParams): Promise<void>;
|
|
7
|
-
isAdmin(caller: string): Promise<boolean>;
|
|
8
|
-
getAdminData(): Promise<{
|
|
9
|
-
admin: string;
|
|
10
|
-
rootCertId: number;
|
|
11
|
-
certsChain: BlockchainCert[];
|
|
12
|
-
}>;
|
|
13
|
-
}
|