@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.
@@ -1,6 +1,9 @@
1
1
  /// <reference types="node" />
2
- import { Encryption } from '@super-protocol/dto-js';
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;
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NyeXB0by9DcnlwdG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFPZ0M7QUFFaEMsdURBQStCO0FBQy9CLHlEQUFpQztBQUNqQywyREFBbUM7QUFDbkMscUVBQTRDO0FBRTVDLE1BQU0sTUFBTTtJQUNSOzs7Ozs7O09BT0c7SUFDSCxNQUFNLENBQU8sT0FBTyxDQUFDLE9BQWUsRUFBRSxVQUFzQjs7WUFDeEQsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNyQixLQUFLLHdCQUFlLENBQUMsR0FBRztvQkFDcEIsT0FBTyxNQUFNLGFBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUVsRCxLQUFLLHdCQUFlLENBQUMsSUFBSTtvQkFDckIsT0FBTyxNQUFNLGNBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUVuRCxLQUFLLHdCQUFlLENBQUMsS0FBSztvQkFDdEIsT0FBTyxNQUFNLGVBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUVwRCxLQUFLLHdCQUFlLENBQUMsU0FBUztvQkFDMUIsT0FBTyxNQUFNLG9CQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFFeEQ7b0JBQ0ksTUFBTSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxDQUFDO2FBQ2pFO1FBQ0wsQ0FBQztLQUFBO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBTyxhQUFhLENBQzdCLFdBQTBCLEVBQzFCLFlBQTRCLEVBQzVCLFVBQXNCOztZQUV0QixRQUFRLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JCLEtBQUssd0JBQWUsQ0FBQyxHQUFHO29CQUNwQixPQUFPLE1BQU0sYUFBRyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMxRSxLQUFLLHdCQUFlLENBQUMsSUFBSTtvQkFDckIsT0FBTyxNQUFNLGNBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDM0UsS0FBSyx3QkFBZSxDQUFDLFNBQVM7b0JBQzFCLE9BQU8sTUFBTSxvQkFBUyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUNoRjtvQkFDSSxNQUFNLEtBQUssQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLDBCQUEwQixDQUFDLENBQUM7YUFDakU7UUFDTCxDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFPLE9BQU8sQ0FBQyxVQUFzQjs7WUFDdkMsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNyQixLQUFLLHdCQUFlLENBQUMsR0FBRztvQkFDcEIsT0FBTyxhQUFHLENBQUMsT0FBTyxDQUFDLFVBQTJCLENBQUMsQ0FBQztnQkFFcEQsS0FBSyx3QkFBZSxDQUFDLElBQUk7b0JBQ3JCLE9BQU8sY0FBSSxDQUFDLE9BQU8sQ0FBQyxVQUE0QixDQUFDLENBQUM7Z0JBRXRELEtBQUssd0JBQWUsQ0FBQyxLQUFLO29CQUN0QixPQUFPLE1BQU0sZUFBSyxDQUFDLE9BQU8sQ0FBQyxVQUE2QixDQUFDLENBQUM7Z0JBRTlELEtBQUssd0JBQWUsQ0FBQyxTQUFTO29CQUMxQixPQUFPLG9CQUFTLENBQUMsT0FBTyxDQUFDLFVBQWlDLENBQUMsQ0FBQztnQkFFaEU7b0JBQ0ksTUFBTSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxDQUFDO2FBQ2pFO1FBQ0wsQ0FBQztLQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQU8sYUFBYSxDQUM3QixXQUEwQixFQUMxQixZQUE0QixFQUM1QixVQUFzQjs7WUFFdEIsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO2dCQUNyQixLQUFLLHdCQUFlLENBQUMsR0FBRztvQkFDcEIsT0FBTyxNQUFNLGFBQUcsQ0FBQyxhQUFhLENBQzFCLFdBQVcsRUFDWCxZQUFZLEVBQ1osVUFBMkIsQ0FDOUIsQ0FBQztnQkFDTixLQUFLLHdCQUFlLENBQUMsSUFBSTtvQkFDckIsT0FBTyxNQUFNLGNBQUksQ0FBQyxhQUFhLENBQzNCLFdBQVcsRUFDWCxZQUFZLEVBQ1osVUFBNEIsQ0FDL0IsQ0FBQztnQkFDTixLQUFLLHdCQUFlLENBQUMsU0FBUztvQkFDMUIsT0FBTyxNQUFNLG9CQUFTLENBQUMsYUFBYSxDQUNoQyxXQUFXLEVBQ1gsWUFBWSxFQUNaLFVBQWlDLENBQ3BDLENBQUM7Z0JBQ047b0JBQ0ksTUFBTSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSwwQkFBMEIsQ0FBQyxDQUFDO2FBQ2pFO1FBQ0wsQ0FBQztLQUFBO0NBQ0o7QUFFRCxrQkFBZSxNQUFNLENBQUMifQ==
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRUNJRVMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY3J5cHRvL25vZGVqcy9FQ0lFUy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFzRjtBQUN0RixvREFBNEI7QUFFNUIsTUFBTSxLQUFLO0lBQ0EsTUFBTSxDQUFPLE9BQU8sQ0FBQyxPQUFlLEVBQUUsVUFBc0I7O1lBQy9ELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRztnQkFBRSxNQUFNLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBRW5FLE1BQU0sSUFBSSxHQUFHLGdCQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTVDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFFaEMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFaEYsTUFBTSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRTdELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUMvQixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixNQUFNLEVBQUUsR0FBRyxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVsQyxNQUFNLE1BQU0sR0FBRyxnQkFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sR0FBRyxHQUFHLGdCQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFM0UsT0FBTztnQkFDSCxFQUFFLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNwQyxjQUFjLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNqRCxHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUN0QyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7Z0JBQzdCLElBQUksRUFBRSx3QkFBZSxDQUFDLEtBQUs7Z0JBQzNCLFVBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7YUFDL0MsQ0FBQztRQUNOLENBQUM7S0FBQTtJQUVNLE1BQU0sQ0FBTyxPQUFPLENBQUMsVUFBMkI7O1lBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRztnQkFBRSxNQUFNLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBRW5FLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQ3RELEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUNqRSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFDN0QsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFM0QsTUFBTSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFFckUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVuQyxNQUFNLElBQUksR0FBRyxnQkFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFFN0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQy9CLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxHQUFHLGdCQUFNO2lCQUNYLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO2lCQUM1QixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDcEMsTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7YUFDMUU7WUFDRCxNQUFNLFFBQVEsR0FBRyxnQkFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkUsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUUvQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFckQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7S0FBQTtDQUNKO0FBRUQsa0JBQWUsS0FBSyxDQUFDIn0=
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 { Encoding, EncryptionWithMacIV } from '@super-protocol/dto-js';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmF0aXZlQ3J5cHRvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NyeXB0by9ub2RlanMvTmF0aXZlQ3J5cHRvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0EsbUNBV2dCO0FBQ2hCLG1DQUE4QjtBQUU5QixtREFBdUU7QUFFdkU7O0dBRUc7QUFDSCxNQUFNLFlBQVk7SUFnQmQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFjO1FBQ3JDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6QixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxLQUFLLHlCQUF5QixFQUFFO1lBQzlFLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxJQUFJLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEtBQUssMEJBQTBCLEVBQUU7WUFDbEYsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxDQUFDO1NBQ1o7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBYztRQUNwQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FB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
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 fetchSgxRootCertificate;
17
- private getAndCheckPckCertificate;
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 DEFAULT_BASE_SGX_URL = 'https://api.trustedservices.intel.com/sgx/certification/v4';
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
- fetchSgxRootCertificate() {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- // TODO: use cache for http requests
74
- const platformCrlResult = yield axios_1.default.get(`${this.baseUrl}/pckcrl?ca=platform&encoding=pem`);
75
- // TODO: parse CRL and check is certificates in chain not revoked
76
- const platformChain = decodeURIComponent(platformCrlResult.headers['sgx-pck-crl-issuer-chain']);
77
- // TODO: check validTo of certificates in platformChain
78
- const [, fetchedRootCertPem] = this.splitChain(platformChain);
79
- // TODO: check is rootCert self-signed
80
- // TODO: compare rootCert with etalon by hardcoded fingerprint
81
- return fetchedRootCertPem;
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
- getAndCheckPckCertificate(quote, rootCertPem) {
85
- const certificatePems = this.splitChain(quote.qeCertificationData.toString()); // [pck, platform, root]
86
- const pckCert = x509_1.Certificate.fromPEM(Buffer.from(certificatePems[0]));
87
- const certType = quote.qeCertificationDataType;
88
- if (certType !== 5) {
89
- throw new errors_1.TeeQuoteValidatorError(`Unsupported certification data type: ${certType}`);
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 (pckCert.validTo.valueOf() < Date.now()) {
92
- throw new errors_1.TeeQuoteValidatorError('PCK certificate expired');
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 (rootCertPem !== certificatePems[2]) {
95
- throw new errors_1.TeeQuoteValidatorError("Invalid SGX root certificate in quote's certificate chain");
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
- return pckCert;
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
- const signature = quote.qeReportSignature;
101
- const hash = (0, crypto_1.createHash)('sha256');
102
- hash.update(Buffer.from(quote.qeReport));
103
- const ellipticEc = new elliptic_1.ec('p256');
104
- const result = ellipticEc.verify(hash.digest(), {
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
- const qeAuthData = quote.qeAuthenticationData;
112
- const attestationKey = quote.ecdsaAttestationKey;
113
- const qeReportDataHash = report.dataHash;
114
- const hash = (0, crypto_1.createHash)('sha256');
115
- const hashResult = hash.update(Buffer.concat([attestationKey, qeAuthData])).digest();
116
- const result = Buffer.compare(qeReportDataHash, hashResult);
117
- return result === 0;
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
- const key = Buffer.from(quote.ecdsaAttestationKey);
121
- const headerBuffer = Buffer.from(quote.rawHeader);
122
- const reportBuffer = Buffer.from(quote.report);
123
- const expected = quote.isvEnclaveReportSignature;
124
- const hash = (0, crypto_1.createHash)('sha256');
125
- hash.update(Buffer.concat([headerBuffer, reportBuffer]));
126
- const ellipticEc = new elliptic_1.ec('p256');
127
- const result = ellipticEc.verify(hash.digest(), {
128
- r: expected.subarray(0, 32),
129
- s: expected.subarray(32),
130
- }, Buffer.concat([Buffer.from([4]), key]));
131
- return result;
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
- // TODO: verify tcbData.data.tcbInfo by tcbData.signature
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 QE Identity chain');
184
- // TODO: verify qeIdentityData.data.enclaveIdentity by qeIdentityData.signature
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(`QE identity status is ${tcbLevel === null || tcbLevel === void 0 ? void 0 : tcbLevel.tcbStatus}`);
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.fetchSgxRootCertificate();
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-beta.3",
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",