@super-protocol/sdk-js 1.0.0-beta.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/crypto/Crypto.d.ts +18 -1
- package/build/crypto/Crypto.js +10 -1
- package/build/crypto/nodejs/ECIES.js +1 -1
- package/build/crypto/nodejs/NativeCrypto.d.ts +5 -1
- package/build/crypto/nodejs/NativeCrypto.js +23 -1
- package/build/tee/QuoteValidator.d.ts +7 -2
- package/build/tee/QuoteValidator.js +166 -67
- package/package.json +4 -1
package/build/crypto/Crypto.d.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
/// <reference types="node" />
|
|
4
|
+
import { Encryption, Hash } from '@super-protocol/dto-js';
|
|
3
5
|
import fs from 'fs';
|
|
6
|
+
import { Readable } from 'stream';
|
|
4
7
|
declare class Crypto {
|
|
5
8
|
/**
|
|
6
9
|
* Used to encrypt data before sending it to blockchain
|
|
@@ -33,5 +36,19 @@ declare class Crypto {
|
|
|
33
36
|
* @param encryption – encryption info
|
|
34
37
|
*/
|
|
35
38
|
static decryptStream(inputStream: fs.ReadStream, outputStream: fs.WriteStream, encryption: Encryption): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Create hash from content
|
|
41
|
+
* @param content - buffer data to create hash from
|
|
42
|
+
* @param hashInfo - information about hash algorithm and encoding
|
|
43
|
+
* @returns Hash structure with hash itself hash algorithm and encoding
|
|
44
|
+
*/
|
|
45
|
+
static createHash(content: Buffer, hashInfo: Omit<Hash, 'hash'>): Promise<Hash>;
|
|
46
|
+
/**
|
|
47
|
+
* Create hash from stream
|
|
48
|
+
* @param inputStream - readable stream
|
|
49
|
+
* @param hashInfo - information about hash algorithm and encoding
|
|
50
|
+
* @returns Hash structure with hash itself hash algorithm and encoding
|
|
51
|
+
*/
|
|
52
|
+
static createHash(inputStream: Readable, hashInfo: Omit<Hash, 'hash'>): Promise<Hash>;
|
|
36
53
|
}
|
|
37
54
|
export default Crypto;
|
package/build/crypto/Crypto.js
CHANGED
|
@@ -17,6 +17,7 @@ const AES_1 = __importDefault(require("./nodejs/AES"));
|
|
|
17
17
|
const ARIA_1 = __importDefault(require("./nodejs/ARIA"));
|
|
18
18
|
const ECIES_1 = __importDefault(require("./nodejs/ECIES"));
|
|
19
19
|
const RSA_Hybrid_1 = __importDefault(require("./nodejs/RSA-Hybrid"));
|
|
20
|
+
const NativeCrypto_1 = __importDefault(require("./nodejs/NativeCrypto"));
|
|
20
21
|
class Crypto {
|
|
21
22
|
/**
|
|
22
23
|
* Used to encrypt data before sending it to blockchain
|
|
@@ -105,6 +106,14 @@ class Crypto {
|
|
|
105
106
|
}
|
|
106
107
|
});
|
|
107
108
|
}
|
|
109
|
+
static createHash(param1, hashInfo) {
|
|
110
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
111
|
+
const { algo, encoding } = hashInfo;
|
|
112
|
+
return Buffer.isBuffer(param1)
|
|
113
|
+
? NativeCrypto_1.default.createHashFromBuffer(param1, algo, encoding)
|
|
114
|
+
: yield NativeCrypto_1.default.createHashFromStream(param1, algo, encoding);
|
|
115
|
+
});
|
|
116
|
+
}
|
|
108
117
|
}
|
|
109
118
|
exports.default = Crypto;
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NyeXB0by9DcnlwdG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFRZ0M7QUFFaEMsdURBQStCO0FBQy9CLHlEQUFpQztBQUNqQywyREFBbUM7QUFDbkMscUVBQTRDO0FBQzVDLHlFQUFpRDtBQUdqRCxNQUFNLE1BQU07SUFDUjs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFPLE9BQU8sQ0FBQyxPQUFlLEVBQUUsVUFBc0I7O1lBQ3hELFFBQVEsVUFBVSxDQUFDLElBQUksRUFBRTtnQkFDckIsS0FBSyx3QkFBZSxDQUFDLEdBQUc7b0JBQ3BCLE9BQU8sTUFBTSxhQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFbEQsS0FBSyx3QkFBZSxDQUFDLElBQUk7b0JBQ3JCLE9BQU8sTUFBTSxjQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFbkQsS0FBSyx3QkFBZSxDQUFDLEtBQUs7b0JBQ3RCLE9BQU8sTUFBTSxlQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFcEQsS0FBSyx3QkFBZSxDQUFDLFNBQVM7b0JBQzFCLE9BQU8sTUFBTSxvQkFBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBRXhEO29CQUNJLE1BQU0sS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksMEJBQTBCLENBQUMsQ0FBQzthQUNqRTtRQUNMLENBQUM7S0FBQTtJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQU8sYUFBYSxDQUM3QixXQUEwQixFQUMxQixZQUE0QixFQUM1QixVQUFzQjs7WUFFdEIsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNyQixLQUFLLHdCQUFlLENBQUMsR0FBRztvQkFDcEIsT0FBTyxN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
|
|
@@ -66,4 +66,4 @@ class ECIES {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
exports.default = ECIES;
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRUNJRVMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3J5cHRvL25vZGVqcy9FQ0lFUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFnRztBQUNoRyxvREFBNEI7QUFFNUIsTUFBTSxLQUFLO0lBQ0EsTUFBTSxDQUFPLE9BQU8sQ0FBQyxPQUFlLEVBQUUsVUFBc0I7O1lBQy9ELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRztnQkFBRSxNQUFNLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBRW5FLE1BQU0sSUFBSSxHQUFHLGdCQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFaEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFaEYsTUFBTSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRTdELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUMvQixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixNQUFNLEVBQUUsR0FBRyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVsQyxNQUFNLE1BQU0sR0FBRyxnQkFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUksRUFBRSxHQUFHLE1BQU0s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
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
/// <reference types="node" />
|
|
4
|
+
/// <reference types="node" />
|
|
4
5
|
import { ReadStream, WriteStream } from 'fs';
|
|
5
6
|
import { Cipher, Decipher } from 'crypto';
|
|
6
|
-
import {
|
|
7
|
+
import { Readable } from 'stream';
|
|
8
|
+
import { Encoding, EncryptionWithMacIV, Hash, HashAlgorithm } from '@super-protocol/dto-js';
|
|
7
9
|
/**
|
|
8
10
|
*
|
|
9
11
|
*/
|
|
@@ -50,5 +52,7 @@ declare class NativeCrypto {
|
|
|
50
52
|
iv: Buffer;
|
|
51
53
|
mac: Buffer;
|
|
52
54
|
}): Promise<void>;
|
|
55
|
+
static createHashFromBuffer(data: Buffer, algorithm: HashAlgorithm, encoding?: Encoding): Hash;
|
|
56
|
+
static createHashFromStream(inputStream: Readable, algorithm: HashAlgorithm, encoding?: Encoding): Promise<Hash>;
|
|
53
57
|
}
|
|
54
58
|
export default NativeCrypto;
|
|
@@ -144,6 +144,28 @@ class NativeCrypto {
|
|
|
144
144
|
yield (0, events_1.once)(outputStream, 'finish');
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
|
+
static createHashFromBuffer(data, algorithm, encoding = dto_js_1.Encoding.base64) {
|
|
148
|
+
const hash = (0, crypto_1.createHash)(algorithm);
|
|
149
|
+
hash.update(data);
|
|
150
|
+
return {
|
|
151
|
+
algo: algorithm,
|
|
152
|
+
encoding,
|
|
153
|
+
hash: hash.digest(encoding),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
static createHashFromStream(inputStream, algorithm, encoding = dto_js_1.Encoding.base64) {
|
|
157
|
+
const hash = (0, crypto_1.createHash)(algorithm);
|
|
158
|
+
return new Promise((resolve) => {
|
|
159
|
+
hash.on('finish', () => {
|
|
160
|
+
resolve({
|
|
161
|
+
algo: algorithm,
|
|
162
|
+
encoding,
|
|
163
|
+
hash: hash.digest(encoding),
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
inputStream.pipe(hash);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
147
169
|
}
|
|
148
170
|
/**
|
|
149
171
|
* Here would be better to check cipher type using
|
|
@@ -158,4 +180,4 @@ NativeCrypto.isOCB = (cipher) => /ocb/i.test(cipher);
|
|
|
158
180
|
NativeCrypto.isECB = (cipher) => /ecb/i.test(cipher) || cipher === 'des-ede' || cipher === 'des-ede3';
|
|
159
181
|
NativeCrypto.isRC4 = (cipher) => /^rc4/i.test(cipher);
|
|
160
182
|
exports.default = NativeCrypto;
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmF0aXZlQ3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NyeXB0by9ub2RlanMvTmF0aXZlQ3J5cHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0EsbUNBWWdCO0FBRWhCLG1DQUE4QjtBQUU5QixtREFBNEY7QUFFNUY7O0dBRUc7QUFDSCxNQUFNLFlBQVk7SUFnQmQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFjO1FBQ3JDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxLQUFLLHlCQUF5QixFQUFFO1lBQzlFLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEtBQUssMEJBQTBCLEVBQUU7WUFDbEYsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBYztRQUNwQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FB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
|
|
@@ -13,8 +13,11 @@ export declare class QuoteValidator {
|
|
|
13
13
|
private splitChain;
|
|
14
14
|
private findSequenceByOID;
|
|
15
15
|
private searchForSequence;
|
|
16
|
-
private
|
|
17
|
-
private
|
|
16
|
+
private verifyDataBySignature;
|
|
17
|
+
private checkValidDate;
|
|
18
|
+
private checkChainForIssuers;
|
|
19
|
+
private checkCertificatesInCrl;
|
|
20
|
+
private getCertificates;
|
|
18
21
|
private verifyQeReportSignature;
|
|
19
22
|
private verifyQeReportData;
|
|
20
23
|
private verifyEnclaveReportSignature;
|
|
@@ -28,5 +31,7 @@ export declare class QuoteValidator {
|
|
|
28
31
|
private getQuoteValidationStatus;
|
|
29
32
|
private getQuoteValidationStatusDescription;
|
|
30
33
|
validate(quoteBuffer: Buffer): Promise<ValidationResult>;
|
|
34
|
+
isQuoteHasUserData(quoteBuffer: Buffer, userDataBuffer: Uint8Array): boolean;
|
|
35
|
+
private getSha256Hash;
|
|
31
36
|
}
|
|
32
37
|
export {};
|
|
@@ -14,23 +14,35 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.QuoteValidator = void 0;
|
|
16
16
|
const axios_1 = __importDefault(require("axios"));
|
|
17
|
-
const crypto_1 = require("crypto");
|
|
18
17
|
const elliptic_1 = require("elliptic");
|
|
19
18
|
const node_forge_1 = require("node-forge");
|
|
20
19
|
const x509_1 = require("@fidm/x509");
|
|
20
|
+
const js_encoding_utils_1 = require("js-encoding-utils");
|
|
21
|
+
const pkijs_1 = require("pkijs");
|
|
22
|
+
const asn1js_1 = require("asn1js");
|
|
23
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
21
24
|
const QuoteParser_1 = require("./QuoteParser");
|
|
22
25
|
const logger_1 = __importDefault(require("../logger"));
|
|
23
26
|
const errors_1 = require("./errors");
|
|
24
27
|
const statuses_1 = require("./statuses");
|
|
25
|
-
const
|
|
28
|
+
const dto_js_1 = require("@super-protocol/dto-js");
|
|
29
|
+
const crypto_1 = __importDefault(require("../crypto"));
|
|
30
|
+
const DEFAULT_BASE_SGX_URL = 'https://api.trustedservices.intel.com';
|
|
31
|
+
const INTEL_SGX_ROOT_CA_URL = 'https://certificates.trustedservices.intel.com/IntelSGXRootCA.der';
|
|
26
32
|
const SGX_OID = '1.2.840.113741.1.13.1';
|
|
27
33
|
const FMSPC_OID = `${SGX_OID}.4`;
|
|
28
34
|
const PCEID_OID = `${SGX_OID}.3`;
|
|
29
35
|
const TCB_OID = `${SGX_OID}.2`;
|
|
30
36
|
const PCESVN_OID = `${TCB_OID}.17`;
|
|
37
|
+
const INTEL_ROOT_PUB_KEY = new Uint8Array([
|
|
38
|
+
4, 11, 169, 196, 192, 192, 200, 97, 147, 163, 254, 35, 214, 176, 44, 218, 16, 168, 187, 212,
|
|
39
|
+
232, 142, 72, 180, 69, 133, 97, 163, 110, 112, 85, 37, 245, 103, 145, 142, 46, 220, 136, 228,
|
|
40
|
+
13, 134, 11, 208, 204, 78, 226, 106, 172, 201, 136, 229, 5, 169, 83, 85, 140, 69, 63, 107, 9, 4,
|
|
41
|
+
174, 115, 148,
|
|
42
|
+
]);
|
|
31
43
|
class QuoteValidator {
|
|
32
44
|
constructor(baseUrl) {
|
|
33
|
-
this.baseUrl = baseUrl || DEFAULT_BASE_SGX_URL
|
|
45
|
+
this.baseUrl = `${baseUrl || DEFAULT_BASE_SGX_URL}/sgx/certification/v4`;
|
|
34
46
|
this.teeSgxParser = new QuoteParser_1.TeeSgxParser();
|
|
35
47
|
this.logger = logger_1.default.child({ className: QuoteValidator.name });
|
|
36
48
|
}
|
|
@@ -68,77 +80,129 @@ class QuoteValidator {
|
|
|
68
80
|
}
|
|
69
81
|
return null;
|
|
70
82
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
});
|
|
83
|
+
verifyDataBySignature(data, signature, key) {
|
|
84
|
+
const ellipticEc = new elliptic_1.ec('p256');
|
|
85
|
+
const result = ellipticEc.verify(data, {
|
|
86
|
+
r: signature.subarray(0, 32),
|
|
87
|
+
s: signature.subarray(32),
|
|
88
|
+
}, ellipticEc.keyFromPublic(key, 'hex'));
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
checkValidDate(from, to) {
|
|
92
|
+
const now = Date.now();
|
|
93
|
+
return from < now && now < to;
|
|
83
94
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
95
|
+
checkChainForIssuers(pckCert, platformCert, rootCert) {
|
|
96
|
+
return (lodash_1.default.isEqual(pckCert.issuer, platformCert.subject) &&
|
|
97
|
+
lodash_1.default.isEqual(platformCert.issuer, rootCert.subject));
|
|
98
|
+
}
|
|
99
|
+
checkCertificatesInCrl(crl, certIds) {
|
|
100
|
+
if (!crl.thisUpdate || !crl.nextUpdate) {
|
|
101
|
+
throw new errors_1.TeeQuoteValidatorError('Certificate revocation list has no update date field');
|
|
90
102
|
}
|
|
91
|
-
if (
|
|
92
|
-
throw new errors_1.TeeQuoteValidatorError('
|
|
103
|
+
if (!this.checkValidDate(crl.thisUpdate.value.valueOf(), crl.nextUpdate.value.valueOf())) {
|
|
104
|
+
throw new errors_1.TeeQuoteValidatorError('Certificate revocation list has invalid update date');
|
|
93
105
|
}
|
|
94
|
-
if (
|
|
95
|
-
|
|
106
|
+
if (crl.revokedCertificates) {
|
|
107
|
+
const isAnyRevoked = crl.revokedCertificates.find((revoked) => certIds.includes(Buffer.from(revoked.userCertificate.valueBlock.valueHexView).toString('hex')));
|
|
108
|
+
if (isAnyRevoked) {
|
|
109
|
+
throw new errors_1.TeeQuoteValidatorError('Certificate in revokation list');
|
|
110
|
+
}
|
|
96
111
|
}
|
|
97
|
-
|
|
112
|
+
}
|
|
113
|
+
getCertificates(quote) {
|
|
114
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
115
|
+
const platformCrlResult = yield axios_1.default.get(`${this.baseUrl}/pckcrl?ca=platform&encoding=pem`);
|
|
116
|
+
const platformChain = decodeURIComponent(platformCrlResult.headers['sgx-pck-crl-issuer-chain']);
|
|
117
|
+
const [platformFetchedPem, rootFetchedPem] = this.splitChain(platformChain); // [platform, root]
|
|
118
|
+
const platformFetchedCert = x509_1.Certificate.fromPEM(Buffer.from(platformFetchedPem));
|
|
119
|
+
const rootFetchedCert = x509_1.Certificate.fromPEM(Buffer.from(rootFetchedPem));
|
|
120
|
+
if (!this.checkValidDate(platformFetchedCert.validFrom.valueOf(), platformFetchedCert.validTo.valueOf())) {
|
|
121
|
+
throw new errors_1.TeeQuoteValidatorError('Platform certificate validation date is not valid');
|
|
122
|
+
}
|
|
123
|
+
if (!this.checkValidDate(rootFetchedCert.validFrom.valueOf(), rootFetchedCert.validTo.valueOf())) {
|
|
124
|
+
throw new errors_1.TeeQuoteValidatorError('Root certificate validation date is not valid');
|
|
125
|
+
}
|
|
126
|
+
if (!lodash_1.default.isEqual(rootFetchedCert.issuer, rootFetchedCert.subject)) {
|
|
127
|
+
throw new errors_1.TeeQuoteValidatorError('Root certificate is not self-signed');
|
|
128
|
+
}
|
|
129
|
+
if (Buffer.compare(rootFetchedCert.publicKey.keyRaw, INTEL_ROOT_PUB_KEY) !== 0) {
|
|
130
|
+
throw new errors_1.TeeQuoteValidatorError('Wrong Intel root certificate public key');
|
|
131
|
+
}
|
|
132
|
+
const certificatePems = this.splitChain(quote.qeCertificationData.toString()); // [pck, platform, root]
|
|
133
|
+
const pckCert = x509_1.Certificate.fromPEM(Buffer.from(certificatePems[0]));
|
|
134
|
+
const certType = quote.qeCertificationDataType;
|
|
135
|
+
if (!this.checkValidDate(pckCert.validFrom.valueOf(), pckCert.validTo.valueOf())) {
|
|
136
|
+
throw new errors_1.TeeQuoteValidatorError('PCK certificate validation date is not valid');
|
|
137
|
+
}
|
|
138
|
+
if (certType !== 5) {
|
|
139
|
+
throw new errors_1.TeeQuoteValidatorError(`Unsupported certification data type: ${certType}`);
|
|
140
|
+
}
|
|
141
|
+
if (rootFetchedPem !== certificatePems[2]) {
|
|
142
|
+
throw new errors_1.TeeQuoteValidatorError("Invalid SGX root certificate in quote's certificate chain");
|
|
143
|
+
}
|
|
144
|
+
if (!this.checkChainForIssuers(pckCert, platformFetchedCert, rootFetchedCert)) {
|
|
145
|
+
throw new errors_1.TeeQuoteValidatorError('Invalid issuers in certificates chain');
|
|
146
|
+
}
|
|
147
|
+
const certIds = [
|
|
148
|
+
rootFetchedCert.serialNumber,
|
|
149
|
+
platformFetchedCert.serialNumber,
|
|
150
|
+
pckCert.serialNumber,
|
|
151
|
+
];
|
|
152
|
+
const intelCrlDer = yield axios_1.default.get(INTEL_SGX_ROOT_CA_URL, {
|
|
153
|
+
responseType: 'arraybuffer',
|
|
154
|
+
});
|
|
155
|
+
const intelCrlAsn = (0, asn1js_1.fromBER)(Buffer.from(intelCrlDer.data));
|
|
156
|
+
this.checkCertificatesInCrl(new pkijs_1.CertificateRevocationList({ schema: intelCrlAsn.result }), certIds);
|
|
157
|
+
const platformCrlDer = platformCrlResult.data.startsWith('-----')
|
|
158
|
+
? js_encoding_utils_1.formatter.pemToBin(platformCrlResult.data)
|
|
159
|
+
: Buffer.from(platformCrlResult.data, 'hex');
|
|
160
|
+
const crlAsn = (0, asn1js_1.fromBER)(platformCrlDer);
|
|
161
|
+
this.checkCertificatesInCrl(new pkijs_1.CertificateRevocationList({ schema: crlAsn.result }), certIds);
|
|
162
|
+
return { pckCert, rootCertPem: rootFetchedPem };
|
|
163
|
+
});
|
|
98
164
|
}
|
|
99
165
|
verifyQeReportSignature(quote, pckPublicKey) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
r: signature.subarray(0, 32),
|
|
106
|
-
s: signature.subarray(32),
|
|
107
|
-
}, ellipticEc.keyFromPublic(pckPublicKey, 'hex'));
|
|
108
|
-
return result;
|
|
166
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
167
|
+
const signature = Buffer.from(quote.qeReportSignature);
|
|
168
|
+
const reportHash = yield this.getSha256Hash(Buffer.from(quote.qeReport));
|
|
169
|
+
return this.verifyDataBySignature(reportHash, signature, pckPublicKey);
|
|
170
|
+
});
|
|
109
171
|
}
|
|
110
172
|
verifyQeReportData(quote, report) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
173
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
174
|
+
const qeAuthData = quote.qeAuthenticationData;
|
|
175
|
+
const attestationKey = quote.ecdsaAttestationKey;
|
|
176
|
+
const qeReportDataHash = report.dataHash;
|
|
177
|
+
const calculatedHash = yield this.getSha256Hash(Buffer.concat([attestationKey, qeAuthData]));
|
|
178
|
+
const result = Buffer.compare(qeReportDataHash, calculatedHash);
|
|
179
|
+
return result === 0;
|
|
180
|
+
});
|
|
118
181
|
}
|
|
119
182
|
verifyEnclaveReportSignature(quote) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
183
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
184
|
+
const key = Buffer.from(quote.ecdsaAttestationKey);
|
|
185
|
+
const headerBuffer = Buffer.from(quote.rawHeader);
|
|
186
|
+
const reportBuffer = Buffer.from(quote.report);
|
|
187
|
+
const expected = quote.isvEnclaveReportSignature;
|
|
188
|
+
const calculatedHash = yield this.getSha256Hash(Buffer.concat([headerBuffer, reportBuffer]));
|
|
189
|
+
const ellipticEc = new elliptic_1.ec('p256');
|
|
190
|
+
const result = ellipticEc.verify(calculatedHash, {
|
|
191
|
+
r: expected.subarray(0, 32),
|
|
192
|
+
s: expected.subarray(32),
|
|
193
|
+
}, Buffer.concat([Buffer.from([4]), key]));
|
|
194
|
+
return result;
|
|
195
|
+
});
|
|
132
196
|
}
|
|
133
197
|
validateQuoteStructure(quote, report, pckPublicKey) {
|
|
134
198
|
return __awaiter(this, void 0, void 0, function* () {
|
|
135
199
|
if (!(yield this.verifyQeReportSignature(quote, pckPublicKey))) {
|
|
136
200
|
throw new errors_1.TeeQuoteValidatorError('Wrong QE report signature');
|
|
137
201
|
}
|
|
138
|
-
if (!this.verifyQeReportData(quote, report)) {
|
|
202
|
+
if (!(yield this.verifyQeReportData(quote, report))) {
|
|
139
203
|
throw new errors_1.TeeQuoteValidatorError('Wrong QE report data');
|
|
140
204
|
}
|
|
141
|
-
if (!this.verifyEnclaveReportSignature(quote)) {
|
|
205
|
+
if (!(yield this.verifyEnclaveReportSignature(quote))) {
|
|
142
206
|
throw new errors_1.TeeQuoteValidatorError('Wrong enclave report signature');
|
|
143
207
|
}
|
|
144
208
|
});
|
|
@@ -169,7 +233,17 @@ class QuoteValidator {
|
|
|
169
233
|
const tcbInfoChain = this.splitChain(decodeURIComponent(tcbData.headers[tcbInfoHeader])); // [tcb, root]
|
|
170
234
|
if (tcbInfoChain[1] !== rootCertPem) {
|
|
171
235
|
throw new errors_1.TeeQuoteValidatorError('Invalid SGX root certificate in TCB chain');
|
|
172
|
-
|
|
236
|
+
}
|
|
237
|
+
const tcbCert = x509_1.Certificate.fromPEM(Buffer.from(tcbInfoChain[0]));
|
|
238
|
+
const key = tcbCert.publicKey.keyRaw;
|
|
239
|
+
const signature = Buffer.from(tcbData.data.signature, 'hex');
|
|
240
|
+
const calculatedhash = yield this.getSha256Hash(Buffer.from(JSON.stringify(tcbData.data.tcbInfo)));
|
|
241
|
+
const result = this.verifyDataBySignature(calculatedhash, signature, key);
|
|
242
|
+
if (!result) {
|
|
243
|
+
throw new errors_1.TeeQuoteValidatorError('TCB info signature is not valid');
|
|
244
|
+
}
|
|
245
|
+
if (tcbData.data.tcbInfo.nextUpdate.valueOf() > Date.now()) {
|
|
246
|
+
throw new errors_1.TeeQuoteValidatorError('TCB next update date is out of date');
|
|
173
247
|
}
|
|
174
248
|
return tcbData.data;
|
|
175
249
|
});
|
|
@@ -180,8 +254,18 @@ class QuoteValidator {
|
|
|
180
254
|
const qeIdentityHeader = 'sgx-enclave-identity-issuer-chain';
|
|
181
255
|
const qeIdentityChain = this.splitChain(decodeURIComponent(qeIdentityData.headers[qeIdentityHeader])); // [qeIdentity, root]
|
|
182
256
|
if (qeIdentityChain[1] !== rootCertPem) {
|
|
183
|
-
throw new errors_1.TeeQuoteValidatorError('Invalid SGX root certificate in
|
|
184
|
-
|
|
257
|
+
throw new errors_1.TeeQuoteValidatorError('Invalid SGX root certificate in enclave identity chain');
|
|
258
|
+
}
|
|
259
|
+
const qeIdentityCert = x509_1.Certificate.fromPEM(Buffer.from(qeIdentityChain[0]));
|
|
260
|
+
const key = qeIdentityCert.publicKey.keyRaw;
|
|
261
|
+
const signature = Buffer.from(qeIdentityData.data.signature, 'hex');
|
|
262
|
+
const calculatedhash = yield this.getSha256Hash(Buffer.from(JSON.stringify(qeIdentityData.data.enclaveIdentity)));
|
|
263
|
+
const result = this.verifyDataBySignature(calculatedhash, signature, key);
|
|
264
|
+
if (!result) {
|
|
265
|
+
throw new errors_1.TeeQuoteValidatorError('Enclave identity signature is not valid');
|
|
266
|
+
}
|
|
267
|
+
if (qeIdentityData.data.enclaveIdentity.nextUpdate.valueOf() > Date.now()) {
|
|
268
|
+
throw new errors_1.TeeQuoteValidatorError('Enclave identity next update date is out of date');
|
|
185
269
|
}
|
|
186
270
|
return qeIdentityData.data;
|
|
187
271
|
});
|
|
@@ -197,13 +281,13 @@ class QuoteValidator {
|
|
|
197
281
|
const tcbLevel = qeIdentity.enclaveIdentity.tcbLevels.find((tcbLevel) => tcbLevel.tcb.isvsvn <= report.isvSvn);
|
|
198
282
|
const status = tcbLevel === null || tcbLevel === void 0 ? void 0 : tcbLevel.tcbStatus;
|
|
199
283
|
if (status) {
|
|
200
|
-
this.logger.info(`
|
|
284
|
+
this.logger.info(`Enclave identity status is ${tcbLevel === null || tcbLevel === void 0 ? void 0 : tcbLevel.tcbStatus}`);
|
|
201
285
|
return status;
|
|
202
286
|
}
|
|
203
287
|
return statuses_1.QEIdentityStatuses.OutOfDate;
|
|
204
288
|
}
|
|
205
289
|
getTcbStatus(fmspc, pceId, tcbData, sgxExtensionData) {
|
|
206
|
-
if (fmspc !== tcbData.tcbInfo.fmspc) {
|
|
290
|
+
if (fmspc.toUpperCase() !== tcbData.tcbInfo.fmspc.toUpperCase()) {
|
|
207
291
|
throw new errors_1.TeeQuoteValidatorError('Wrong FMSPC in PCK certificate');
|
|
208
292
|
}
|
|
209
293
|
if (pceId !== tcbData.tcbInfo.pceId) {
|
|
@@ -249,13 +333,13 @@ class QuoteValidator {
|
|
|
249
333
|
case statuses_1.QuoteValidationStatuses.UpToDate:
|
|
250
334
|
return 'The Quote verification passed and is at the latest TCB level.';
|
|
251
335
|
case statuses_1.QuoteValidationStatuses.ConfigurationNeeded:
|
|
252
|
-
return `The SGX platform firmware and SW are at the latest security patching level
|
|
336
|
+
return `The SGX platform firmware and SW are at the latest security patching level
|
|
253
337
|
but there are platform hardware configurations may expose the enclave to vulnerabilities.`;
|
|
254
338
|
case statuses_1.QuoteValidationStatuses.SecurityPatchNeeded:
|
|
255
|
-
return `The SGX platform firmware and SW are not at the latest security patching level.
|
|
339
|
+
return `The SGX platform firmware and SW are not at the latest security patching level.
|
|
256
340
|
The platform needs to be patched with firmware and/or software patches.`;
|
|
257
341
|
case statuses_1.QuoteValidationStatuses.SoftwareUpdateNeeded:
|
|
258
|
-
return `The SGX platform firmware and SW are at the latest security patching level but there are
|
|
342
|
+
return `The SGX platform firmware and SW are at the latest security patching level but there are
|
|
259
343
|
certain vulnerabilities that can only be mitigated with software mitigations implemented by the enclave.`;
|
|
260
344
|
default:
|
|
261
345
|
return 'Quote verification failed.';
|
|
@@ -266,8 +350,7 @@ class QuoteValidator {
|
|
|
266
350
|
try {
|
|
267
351
|
const quote = this.teeSgxParser.parseQuote(quoteBuffer);
|
|
268
352
|
const report = this.teeSgxParser.parseReport(quote.qeReport);
|
|
269
|
-
const rootCertPem = yield this.
|
|
270
|
-
const pckCert = this.getAndCheckPckCertificate(quote, rootCertPem);
|
|
353
|
+
const { pckCert, rootCertPem } = yield this.getCertificates(quote);
|
|
271
354
|
yield this.validateQuoteStructure(quote, report, pckCert.publicKey.keyRaw);
|
|
272
355
|
this.logger.info('Quote structure validated successfully');
|
|
273
356
|
const sgxExtensionData = this.getSgxExtensionData(pckCert);
|
|
@@ -294,6 +377,22 @@ class QuoteValidator {
|
|
|
294
377
|
}
|
|
295
378
|
});
|
|
296
379
|
}
|
|
380
|
+
isQuoteHasUserData(quoteBuffer, userDataBuffer) {
|
|
381
|
+
const quote = this.teeSgxParser.parseQuote(quoteBuffer);
|
|
382
|
+
const report = this.teeSgxParser.parseReport(quote.qeReport);
|
|
383
|
+
const compareResult = Buffer.compare(report.userData, userDataBuffer);
|
|
384
|
+
return compareResult === 0;
|
|
385
|
+
}
|
|
386
|
+
getSha256Hash(data) {
|
|
387
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
388
|
+
const hashInfo = {
|
|
389
|
+
algo: dto_js_1.HashAlgorithm.SHA256,
|
|
390
|
+
encoding: dto_js_1.Encoding.base64,
|
|
391
|
+
};
|
|
392
|
+
const hashData = yield crypto_1.default.createHash(data, hashInfo);
|
|
393
|
+
return Buffer.from(hashData.hash, hashData.encoding);
|
|
394
|
+
});
|
|
395
|
+
}
|
|
297
396
|
}
|
|
298
397
|
exports.QuoteValidator = QuoteValidator;
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVvdGVWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVlL1F1b3RlVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQixtQ0FBb0M7QUFDcEMsdUNBQThCO0FBQzlCLDJDQUF3QztBQUN4QyxxQ0FBb0Q7QUFDcEQsK0NBQTZDO0FBRTdDLHVEQUFtQztBQUVuQyxxQ0FBa0Q7QUFDbEQseUNBQXNGO0FBRXRGLE1BQU0sb0JBQW9CLEdBQUcsNERBQTRELENBQUM7QUFDMUYsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLENBQUM7QUFDeEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FBQztBQUNqQyxNQUFNLFNBQVMsR0FBRyxHQUFHLE9BQU8sSUFBSSxDQUFDO0FBQ2pDLE1BQU0sT0FBTyxHQUFHLEdBQUcsT0FBTyxJQUFJLENBQUM7QUFDL0IsTUFBTSxVQUFVLEdBQUcsR0FBRyxPQUFPLEtBQUssQ0FBQztBQVFuQyxNQUFhLGNBQWM7SUFLdkIsWUFBWSxPQUFnQjtRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksMEJBQVksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLFVBQVUsQ0FBQyxLQUFhO1FBQzVCLE1BQU0sS0FBSyxHQUFHLDZCQUE2QixDQUFDO1FBQzVDLE1BQU0sR0FBRyxHQUFHLDJCQUEyQixDQUFDO1FBRXhDLE9BQU8sS0FBSzthQUNQLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDWixNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ2YsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFF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
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVvdGVWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVlL1F1b3RlVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQix1Q0FBOEI7QUFDOUIsMkNBQXdDO0FBQ3hDLHFDQUFvRDtBQUNwRCx5REFBOEM7QUFDOUMsaUNBQWtEO0FBQ2xELG1DQUFpQztBQUNqQyxvREFBdUI7QUFDdkIsK0NBQTZDO0FBRTdDLHVEQUFtQztBQUVuQyxxQ0FBa0Q7QUFDbEQseUNBQXNGO0FBQ3RGLG1EQUFpRTtBQUNqRSx1REFBK0I7QUFFL0IsTUFBTSxvQkFBb0IsR0FBRyx1Q0FBdUMsQ0FBQztBQUNyRSxNQUFNLHFCQUFxQixHQUFHLG1FQUFtRSxDQUFDO0FBQ2xHLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEdBQUcsT0FBTyxJQUFJLENBQUM7QUFDakMsTUFBTSxTQUFTLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FBQztBQUNqQyxNQUFNLE9BQU8sR0FBRyxHQUFHLE9BQU8sSUFBSSxDQUFDO0FBQy9CLE1BQU0sVUFBVSxHQUFHLEdBQUcsT0FBTyxLQUFLLENBQUM7QUFDbkMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLFVBQVUsQ0FBQztJQUN0QyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztJQUMzRixHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@super-protocol/sdk-js",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"main": "build/index.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
@@ -61,17 +61,20 @@
|
|
|
61
61
|
"@super-protocol/dto-js": "0.0.28",
|
|
62
62
|
"@super-protocol/tee-lib": "^0.1.2",
|
|
63
63
|
"@super-protocol/uplink-nodejs": "1.2.16",
|
|
64
|
+
"asn1js": "^3.0.5",
|
|
64
65
|
"aws-sdk": "^2.1418.0",
|
|
65
66
|
"axios": "^1.5.1",
|
|
66
67
|
"bottleneck": "^2.19.5",
|
|
67
68
|
"ethers": "^5.5.3",
|
|
68
69
|
"hybrid-crypto-js": "^0.2.4",
|
|
70
|
+
"js-encoding-utils": "^0.7.3",
|
|
69
71
|
"lodash": "^4.17.21",
|
|
70
72
|
"lru-cache": "^10.0.0",
|
|
71
73
|
"node-forge": "^1.3.1",
|
|
72
74
|
"node-gzip": "^1.1.2",
|
|
73
75
|
"p-queue": "6.6.2",
|
|
74
76
|
"pino": "^7.2.0",
|
|
77
|
+
"pkijs": "^3.0.15",
|
|
75
78
|
"protobufjs": "^6.11.2",
|
|
76
79
|
"web3": "^4.1.2",
|
|
77
80
|
"web3-core-requestmanager": "^1.10.0",
|