@super-protocol/sdk-js 2.1.4-beta.1 → 2.1.4-beta.5

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.
Files changed (499) hide show
  1. package/{build → dist/cjs}/TIIGenerator.d.ts +2 -2
  2. package/dist/cjs/TIIGenerator.js +246 -0
  3. package/{build → dist/cjs}/analytics/Analytics.d.ts +1 -1
  4. package/dist/cjs/analytics/Analytics.js +74 -0
  5. package/{build → dist/cjs}/analytics/AnalyticsError.js +1 -1
  6. package/{build → dist/cjs}/analytics/eventProviders/BrowserEventProvider.d.ts +1 -1
  7. package/{build → dist/cjs}/analytics/eventProviders/BrowserEventProvider.js +3 -3
  8. package/dist/cjs/analytics/eventProviders/EventProvider.js +14 -0
  9. package/{build → dist/cjs}/analytics/eventProviders/NodeEventProvider.d.ts +1 -1
  10. package/dist/cjs/analytics/eventProviders/NodeEventProvider.js +48 -0
  11. package/{build → dist/cjs}/analytics/transports/AxiosTransport.d.ts +1 -1
  12. package/{build → dist/cjs}/analytics/transports/AxiosTransport.js +4 -4
  13. package/{build → dist/cjs}/analytics/transports/FetchTransport.d.ts +1 -1
  14. package/dist/cjs/analytics/transports/FetchTransport.js +42 -0
  15. package/{build → dist/cjs}/analytics/types.d.ts +1 -1
  16. package/{build → dist/cjs}/analytics/types.js +1 -1
  17. package/{build → dist/cjs}/config.js +1 -1
  18. package/{build → dist/cjs}/connectors/BaseConnector.d.ts +1 -1
  19. package/{build → dist/cjs}/connectors/BaseConnector.js +3 -3
  20. package/{build → dist/cjs}/connectors/BlockchainConnector.d.ts +3 -3
  21. package/dist/cjs/connectors/BlockchainConnector.js +358 -0
  22. package/{build → dist/cjs}/connectors/BlockchainEventsListener.d.ts +1 -1
  23. package/{build → dist/cjs}/connectors/BlockchainEventsListener.js +15 -15
  24. package/{build → dist/cjs}/connectors/index.d.ts +2 -2
  25. package/{build → dist/cjs}/connectors/index.js +5 -5
  26. package/{build → dist/cjs}/constants.js +1 -1
  27. package/{build → dist/cjs}/contracts/abi.js +1 -1
  28. package/dist/cjs/crypto/Crypto.js +119 -0
  29. package/dist/cjs/crypto/index.d.ts +2 -0
  30. package/{build → dist/cjs}/crypto/index.js +3 -3
  31. package/{build → dist/cjs}/crypto/nodejs/AES.js +6 -6
  32. package/{build → dist/cjs}/crypto/nodejs/ARIA.js +6 -6
  33. package/{build → dist/cjs}/crypto/nodejs/ECIES.js +1 -1
  34. package/dist/cjs/crypto/nodejs/NativeCrypto.js +183 -0
  35. package/dist/cjs/crypto/nodejs/RSA-Hybrid.js +95 -0
  36. package/dist/cjs/index.d.ts +79 -0
  37. package/dist/cjs/index.js +142 -0
  38. package/{build → dist/cjs}/logger.js +1 -1
  39. package/{build → dist/cjs}/models/EtlModel.d.ts +1 -1
  40. package/{build → dist/cjs}/models/EtlModel.js +8 -8
  41. package/{build → dist/cjs}/models/Offer.d.ts +1 -1
  42. package/dist/cjs/models/Offer.js +407 -0
  43. package/{build → dist/cjs}/models/Order.d.ts +1 -1
  44. package/dist/cjs/models/Order.js +577 -0
  45. package/{build → dist/cjs}/models/Provider.d.ts +1 -1
  46. package/dist/cjs/models/Provider.js +137 -0
  47. package/{build → dist/cjs}/models/TCB.d.ts +1 -1
  48. package/dist/cjs/models/TCB.js +135 -0
  49. package/{build → dist/cjs}/models/TeeOffer.d.ts +2 -2
  50. package/dist/cjs/models/TeeOffer.js +600 -0
  51. package/dist/cjs/models/index.d.ts +5 -0
  52. package/dist/cjs/models/index.js +17 -0
  53. package/dist/cjs/package.json +1 -0
  54. package/dist/cjs/polyfills.js +7 -0
  55. package/dist/cjs/proto/Compression.js +132 -0
  56. package/dist/cjs/proto/TRI.js +293 -0
  57. package/dist/cjs/proto/TeeProperties.js +401 -0
  58. package/{build → dist/cjs}/providers/storage/ChunksDownloadDecorator.d.ts +2 -2
  59. package/{build → dist/cjs}/providers/storage/ChunksDownloadDecorator.js +1 -1
  60. package/{build → dist/cjs}/providers/storage/IStorageProvider.d.ts +1 -1
  61. package/{build → dist/cjs}/providers/storage/IStorageProvider.js +1 -1
  62. package/{build → dist/cjs}/providers/storage/S3StorageProvider.d.ts +2 -2
  63. package/{build → dist/cjs}/providers/storage/S3StorageProvider.js +3 -3
  64. package/{build → dist/cjs}/providers/storage/StorageAdapter.d.ts +2 -2
  65. package/dist/cjs/providers/storage/StorageAdapter.js +323 -0
  66. package/{build → dist/cjs}/providers/storage/StorageContentWriter.d.ts +2 -2
  67. package/{build → dist/cjs}/providers/storage/StorageContentWriter.js +3 -3
  68. package/{build → dist/cjs}/providers/storage/StorageKeyValueAdapter.d.ts +2 -2
  69. package/{build → dist/cjs}/providers/storage/StorageKeyValueAdapter.js +8 -8
  70. package/{build → dist/cjs}/providers/storage/StorageMetadataReader.d.ts +3 -3
  71. package/{build → dist/cjs}/providers/storage/StorageMetadataReader.js +3 -3
  72. package/{build → dist/cjs}/providers/storage/StorjAdapter.d.ts +2 -2
  73. package/{build → dist/cjs}/providers/storage/StorjAdapter.js +5 -5
  74. package/{build → dist/cjs}/providers/storage/StorjStorageProvider.d.ts +2 -2
  75. package/{build → dist/cjs}/providers/storage/StorjStorageProvider.js +6 -6
  76. package/dist/cjs/providers/storage/getStorageProvider.d.ts +4 -0
  77. package/dist/cjs/providers/storage/getStorageProvider.js +20 -0
  78. package/{build → dist/cjs}/providers/storage/types.js +1 -1
  79. package/{build → dist/cjs}/staticModels/ActiveOffers.d.ts +1 -1
  80. package/{build → dist/cjs}/staticModels/ActiveOffers.js +7 -7
  81. package/{build → dist/cjs}/staticModels/ActiveOrders.d.ts +1 -1
  82. package/{build → dist/cjs}/staticModels/ActiveOrders.js +12 -12
  83. package/{build → dist/cjs}/staticModels/Consensus.d.ts +1 -1
  84. package/dist/cjs/staticModels/Consensus.js +247 -0
  85. package/{build → dist/cjs}/staticModels/Deposits.d.ts +1 -1
  86. package/dist/cjs/staticModels/Deposits.js +214 -0
  87. package/{build → dist/cjs}/staticModels/Marks.d.ts +1 -1
  88. package/dist/cjs/staticModels/Marks.js +43 -0
  89. package/{build → dist/cjs}/staticModels/ModelPackager.js +6 -6
  90. package/{build → dist/cjs}/staticModels/Offers.d.ts +2 -2
  91. package/dist/cjs/staticModels/Offers.js +207 -0
  92. package/{build → dist/cjs}/staticModels/Orders.d.ts +2 -2
  93. package/dist/cjs/staticModels/Orders.js +502 -0
  94. package/{build → dist/cjs}/staticModels/ProviderRegistry.d.ts +1 -1
  95. package/{build → dist/cjs}/staticModels/ProviderRegistry.js +28 -28
  96. package/{build → dist/cjs}/staticModels/StaticModel.d.ts +2 -2
  97. package/dist/cjs/staticModels/StaticModel.js +46 -0
  98. package/{build → dist/cjs}/staticModels/Superpro.d.ts +2 -2
  99. package/dist/cjs/staticModels/Superpro.js +24 -0
  100. package/{build → dist/cjs}/staticModels/SuperproToken.d.ts +1 -1
  101. package/dist/cjs/staticModels/SuperproToken.js +154 -0
  102. package/{build → dist/cjs}/staticModels/TeeOffers.d.ts +1 -1
  103. package/dist/cjs/staticModels/TeeOffers.js +344 -0
  104. package/dist/cjs/store.js +17 -0
  105. package/{build → dist/cjs}/tee/QuoteParser.d.ts +1 -1
  106. package/dist/cjs/tee/QuoteParser.js +189 -0
  107. package/{build → dist/cjs}/tee/QuoteValidator.d.ts +1 -1
  108. package/dist/cjs/tee/QuoteValidator.js +414 -0
  109. package/{build → dist/cjs}/tee/errors.js +1 -1
  110. package/dist/cjs/tee/helpers.js +119 -0
  111. package/{build → dist/cjs}/tee/interface.d.ts +1 -1
  112. package/{build → dist/cjs}/tee/interface.js +1 -1
  113. package/{build → dist/cjs}/tee/statuses.js +1 -1
  114. package/{build → dist/cjs}/tee/types.js +1 -1
  115. package/{build → dist/cjs}/types/Compressor.js +1 -1
  116. package/{build → dist/cjs}/types/Consensus.d.ts +1 -1
  117. package/{build → dist/cjs}/types/Consensus.js +1 -1
  118. package/{build → dist/cjs}/types/DepositInfo.d.ts +1 -1
  119. package/{build → dist/cjs}/types/DepositInfo.js +1 -1
  120. package/{build → dist/cjs}/types/EtlModel.js +1 -1
  121. package/{build → dist/cjs}/types/Events.d.ts +2 -2
  122. package/{build → dist/cjs}/types/Events.js +1 -1
  123. package/dist/cjs/types/HardwareInfo.d.ts +6 -0
  124. package/{build → dist/cjs}/types/HardwareInfo.js +1 -1
  125. package/{build → dist/cjs}/types/Marks.js +1 -1
  126. package/{build → dist/cjs}/types/Offer.d.ts +1 -1
  127. package/{build → dist/cjs}/types/Offer.js +1 -1
  128. package/{build → dist/cjs}/types/OptionInfo.js +1 -1
  129. package/{build → dist/cjs}/types/Order.d.ts +1 -1
  130. package/{build → dist/cjs}/types/Order.js +1 -1
  131. package/{build → dist/cjs}/types/OrderUsage.d.ts +4 -4
  132. package/{build → dist/cjs}/types/OrderUsage.js +1 -1
  133. package/{build → dist/cjs}/types/Origins.js +1 -1
  134. package/{build → dist/cjs}/types/Provider.js +1 -1
  135. package/{build → dist/cjs}/types/ResourceLoader.d.ts +1 -1
  136. package/{build → dist/cjs}/types/ResourceLoader.js +1 -1
  137. package/{build → dist/cjs}/types/SlotInfo.js +1 -1
  138. package/{build → dist/cjs}/types/SlotUsage.d.ts +1 -1
  139. package/{build → dist/cjs}/types/SlotUsage.js +1 -1
  140. package/{build → dist/cjs}/types/Superpro.js +1 -1
  141. package/{build → dist/cjs}/types/TeeOfferInfo.d.ts +1 -1
  142. package/{build → dist/cjs}/types/TeeOfferInfo.js +1 -1
  143. package/{build → dist/cjs}/types/TeeOfferOption.d.ts +3 -3
  144. package/{build → dist/cjs}/types/TeeOfferOption.js +1 -1
  145. package/dist/cjs/types/TeeOfferSlot.d.ts +8 -0
  146. package/{build → dist/cjs}/types/TeeOfferSlot.js +1 -1
  147. package/{build → dist/cjs}/types/ValueOfferSlot.d.ts +4 -4
  148. package/{build → dist/cjs}/types/ValueOfferSlot.js +1 -1
  149. package/{build → dist/cjs}/types/Web3.js +1 -1
  150. package/{build → dist/cjs}/types/blockchainConnector/StorageAccess.d.ts +1 -1
  151. package/{build → dist/cjs}/types/blockchainConnector/StorageAccess.js +1 -1
  152. package/dist/cjs/types/index.d.ts +22 -0
  153. package/dist/cjs/types/index.js +39 -0
  154. package/{build → dist/cjs}/types/storage/StorageAccess.js +1 -1
  155. package/{build → dist/cjs}/types/storage/StorageFileAccess.d.ts +1 -1
  156. package/{build → dist/cjs}/types/storage/StorageFileAccess.js +1 -1
  157. package/{build → dist/cjs}/types/storage/StorageObject.js +1 -1
  158. package/dist/cjs/utils/Monitoring.js +48 -0
  159. package/{build → dist/cjs}/utils/NonceTracker.js +3 -3
  160. package/dist/cjs/utils/PubSub.js +37 -0
  161. package/{build → dist/cjs}/utils/TxManager.d.ts +1 -1
  162. package/dist/cjs/utils/TxManager.js +179 -0
  163. package/{build → dist/cjs}/utils/compressors/GzipCompressor.d.ts +2 -2
  164. package/{build → dist/cjs}/utils/compressors/GzipCompressor.js +3 -3
  165. package/{build → dist/cjs}/utils/compressors/UncompressedCompressor.d.ts +2 -2
  166. package/dist/cjs/utils/compressors/UncompressedCompressor.js +17 -0
  167. package/dist/cjs/utils/compressors/index.d.ts +2 -0
  168. package/{build → dist/cjs}/utils/compressors/index.js +3 -3
  169. package/{build → dist/cjs}/utils/helper.d.ts +3 -3
  170. package/dist/cjs/utils/helper.js +286 -0
  171. package/{build → dist/cjs}/utils/helpers/getStreamChunks.js +1 -1
  172. package/dist/cjs/utils/helpers/index.d.ts +1 -0
  173. package/{build → dist/cjs}/utils/helpers/index.js +2 -2
  174. package/{build → dist/cjs}/utils/helpers/tryWithInterval.js +1 -1
  175. package/{build → dist/cjs}/utils/resourceLoaders/BaseResourceLoader.d.ts +1 -1
  176. package/{build → dist/cjs}/utils/resourceLoaders/BaseResourceLoader.js +1 -1
  177. package/{build → dist/cjs}/utils/resourceLoaders/StorageProviderLoader.d.ts +2 -2
  178. package/{build → dist/cjs}/utils/resourceLoaders/StorageProviderLoader.js +8 -8
  179. package/{build → dist/cjs}/utils/resourceLoaders/UrlResourceLoader.d.ts +1 -1
  180. package/{build → dist/cjs}/utils/resourceLoaders/UrlResourceLoader.js +3 -3
  181. package/{build → dist/cjs}/utils/resourceLoaders/getResourceLoader.d.ts +1 -1
  182. package/dist/cjs/utils/resourceLoaders/getResourceLoader.js +15 -0
  183. package/dist/cjs/utils/resourceLoaders/index.d.ts +1 -0
  184. package/{build → dist/cjs}/utils/resourceLoaders/index.js +2 -2
  185. package/dist/mjs/TIIGenerator.d.ts +22 -0
  186. package/dist/mjs/TIIGenerator.js +224 -0
  187. package/dist/mjs/analytics/Analytics.d.ts +15 -0
  188. package/dist/mjs/analytics/Analytics.js +61 -0
  189. package/dist/mjs/analytics/AnalyticsError.d.ts +7 -0
  190. package/dist/mjs/analytics/AnalyticsError.js +8 -0
  191. package/dist/mjs/analytics/eventProviders/BrowserEventProvider.d.ts +18 -0
  192. package/dist/mjs/analytics/eventProviders/BrowserEventProvider.js +32 -0
  193. package/dist/mjs/analytics/eventProviders/EventProvider.d.ts +24 -0
  194. package/dist/mjs/analytics/eventProviders/EventProvider.js +22 -0
  195. package/dist/mjs/analytics/eventProviders/NodeEventProvider.d.ts +22 -0
  196. package/dist/mjs/analytics/eventProviders/NodeEventProvider.js +50 -0
  197. package/dist/mjs/analytics/transports/AxiosTransport.d.ts +4 -0
  198. package/dist/mjs/analytics/transports/AxiosTransport.js +31 -0
  199. package/dist/mjs/analytics/transports/FetchTransport.d.ts +4 -0
  200. package/dist/mjs/analytics/transports/FetchTransport.js +28 -0
  201. package/dist/mjs/analytics/types.d.ts +22 -0
  202. package/dist/mjs/analytics/types.js +2 -0
  203. package/dist/mjs/config.d.ts +4 -0
  204. package/dist/mjs/config.js +5 -0
  205. package/dist/mjs/connectors/BaseConnector.d.ts +36 -0
  206. package/dist/mjs/connectors/BaseConnector.js +34 -0
  207. package/dist/mjs/connectors/BlockchainConnector.d.ts +81 -0
  208. package/dist/mjs/connectors/BlockchainConnector.js +313 -0
  209. package/dist/mjs/connectors/BlockchainEventsListener.d.ts +15 -0
  210. package/dist/mjs/connectors/BlockchainEventsListener.js +75 -0
  211. package/dist/mjs/connectors/index.d.ts +2 -0
  212. package/dist/mjs/connectors/index.js +3 -0
  213. package/dist/mjs/constants.d.ts +13 -0
  214. package/dist/mjs/constants.js +14 -0
  215. package/dist/mjs/contracts/abi.d.ts +9916 -0
  216. package/dist/mjs/contracts/abi.js +12941 -0
  217. package/dist/mjs/crypto/Crypto.d.ts +54 -0
  218. package/dist/mjs/crypto/Crypto.js +95 -0
  219. package/dist/mjs/crypto/index.d.ts +2 -0
  220. package/dist/mjs/crypto/index.js +3 -0
  221. package/dist/mjs/crypto/nodejs/AES.d.ts +24 -0
  222. package/dist/mjs/crypto/nodejs/AES.js +74 -0
  223. package/dist/mjs/crypto/nodejs/ARIA.d.ts +24 -0
  224. package/dist/mjs/crypto/nodejs/ARIA.js +73 -0
  225. package/dist/mjs/crypto/nodejs/ECIES.d.ts +6 -0
  226. package/dist/mjs/crypto/nodejs/ECIES.js +51 -0
  227. package/dist/mjs/crypto/nodejs/NativeCrypto.d.ts +58 -0
  228. package/dist/mjs/crypto/nodejs/NativeCrypto.js +168 -0
  229. package/dist/mjs/crypto/nodejs/RSA-Hybrid.d.ts +15 -0
  230. package/dist/mjs/crypto/nodejs/RSA-Hybrid.js +89 -0
  231. package/dist/mjs/index.d.ts +79 -0
  232. package/dist/mjs/index.js +75 -0
  233. package/dist/mjs/logger.d.ts +7 -0
  234. package/dist/mjs/logger.js +7 -0
  235. package/dist/mjs/models/EtlModel.d.ts +34 -0
  236. package/dist/mjs/models/EtlModel.js +96 -0
  237. package/dist/mjs/models/Offer.d.ts +130 -0
  238. package/dist/mjs/models/Offer.js +356 -0
  239. package/dist/mjs/models/Order.d.ts +148 -0
  240. package/dist/mjs/models/Order.js +520 -0
  241. package/dist/mjs/models/Provider.d.ts +51 -0
  242. package/dist/mjs/models/Provider.js +114 -0
  243. package/dist/mjs/models/TCB.d.ts +58 -0
  244. package/dist/mjs/models/TCB.js +107 -0
  245. package/dist/mjs/models/TeeOffer.d.ts +204 -0
  246. package/dist/mjs/models/TeeOffer.js +533 -0
  247. package/dist/mjs/models/index.d.ts +5 -0
  248. package/dist/mjs/models/index.js +6 -0
  249. package/dist/mjs/package.json +1 -0
  250. package/dist/mjs/polyfills.d.ts +0 -0
  251. package/dist/mjs/polyfills.js +7 -0
  252. package/dist/mjs/proto/Compression.d.ts +36 -0
  253. package/dist/mjs/proto/Compression.js +123 -0
  254. package/dist/mjs/proto/TRI.d.ts +124 -0
  255. package/dist/mjs/proto/TRI.js +284 -0
  256. package/dist/mjs/proto/TeeProperties.d.ts +263 -0
  257. package/dist/mjs/proto/TeeProperties.js +391 -0
  258. package/dist/mjs/providers/storage/ChunksDownloadDecorator.d.ts +36 -0
  259. package/dist/mjs/providers/storage/ChunksDownloadDecorator.js +139 -0
  260. package/dist/mjs/providers/storage/IStorageProvider.d.ts +15 -0
  261. package/dist/mjs/providers/storage/IStorageProvider.js +2 -0
  262. package/dist/mjs/providers/storage/S3StorageProvider.d.ts +25 -0
  263. package/dist/mjs/providers/storage/S3StorageProvider.js +167 -0
  264. package/dist/mjs/providers/storage/StorageAdapter.d.ts +60 -0
  265. package/dist/mjs/providers/storage/StorageAdapter.js +271 -0
  266. package/dist/mjs/providers/storage/StorageContentWriter.d.ts +46 -0
  267. package/dist/mjs/providers/storage/StorageContentWriter.js +161 -0
  268. package/dist/mjs/providers/storage/StorageKeyValueAdapter.d.ts +23 -0
  269. package/dist/mjs/providers/storage/StorageKeyValueAdapter.js +119 -0
  270. package/dist/mjs/providers/storage/StorageMetadataReader.d.ts +20 -0
  271. package/dist/mjs/providers/storage/StorageMetadataReader.js +51 -0
  272. package/dist/mjs/providers/storage/StorjAdapter.d.ts +19 -0
  273. package/dist/mjs/providers/storage/StorjAdapter.js +48 -0
  274. package/dist/mjs/providers/storage/StorjStorageProvider.d.ts +25 -0
  275. package/dist/mjs/providers/storage/StorjStorageProvider.js +141 -0
  276. package/dist/mjs/providers/storage/getStorageProvider.d.ts +4 -0
  277. package/dist/mjs/providers/storage/getStorageProvider.js +15 -0
  278. package/dist/mjs/providers/storage/types.d.ts +7 -0
  279. package/dist/mjs/providers/storage/types.js +2 -0
  280. package/dist/mjs/staticModels/ActiveOffers.d.ts +15 -0
  281. package/dist/mjs/staticModels/ActiveOffers.js +32 -0
  282. package/dist/mjs/staticModels/ActiveOrders.d.ts +20 -0
  283. package/dist/mjs/staticModels/ActiveOrders.js +71 -0
  284. package/dist/mjs/staticModels/Consensus.d.ts +42 -0
  285. package/dist/mjs/staticModels/Consensus.js +220 -0
  286. package/dist/mjs/staticModels/Deposits.d.ts +70 -0
  287. package/dist/mjs/staticModels/Deposits.js +190 -0
  288. package/dist/mjs/staticModels/Marks.d.ts +8 -0
  289. package/dist/mjs/staticModels/Marks.js +25 -0
  290. package/dist/mjs/staticModels/ModelPackager.d.ts +18 -0
  291. package/dist/mjs/staticModels/ModelPackager.js +45 -0
  292. package/dist/mjs/staticModels/Offers.d.ts +65 -0
  293. package/dist/mjs/staticModels/Offers.js +184 -0
  294. package/dist/mjs/staticModels/Orders.d.ts +155 -0
  295. package/dist/mjs/staticModels/Orders.js +472 -0
  296. package/dist/mjs/staticModels/ProviderRegistry.d.ts +74 -0
  297. package/dist/mjs/staticModels/ProviderRegistry.js +169 -0
  298. package/dist/mjs/staticModels/StaticModel.d.ts +8 -0
  299. package/dist/mjs/staticModels/StaticModel.js +30 -0
  300. package/dist/mjs/staticModels/Superpro.d.ts +16 -0
  301. package/dist/mjs/staticModels/Superpro.js +23 -0
  302. package/dist/mjs/staticModels/SuperproToken.d.ts +48 -0
  303. package/dist/mjs/staticModels/SuperproToken.js +136 -0
  304. package/dist/mjs/staticModels/TeeOffers.d.ts +115 -0
  305. package/dist/mjs/staticModels/TeeOffers.js +309 -0
  306. package/dist/mjs/store.d.ts +15 -0
  307. package/dist/mjs/store.js +15 -0
  308. package/dist/mjs/tee/QuoteParser.d.ts +27 -0
  309. package/dist/mjs/tee/QuoteParser.js +162 -0
  310. package/dist/mjs/tee/QuoteValidator.d.ts +38 -0
  311. package/dist/mjs/tee/QuoteValidator.js +382 -0
  312. package/dist/mjs/tee/errors.d.ts +6 -0
  313. package/dist/mjs/tee/errors.js +7 -0
  314. package/dist/mjs/tee/helpers.d.ts +14 -0
  315. package/dist/mjs/tee/helpers.js +115 -0
  316. package/dist/mjs/tee/interface.d.ts +63 -0
  317. package/dist/mjs/tee/interface.js +2 -0
  318. package/dist/mjs/tee/statuses.d.ts +21 -0
  319. package/dist/mjs/tee/statuses.js +25 -0
  320. package/dist/mjs/tee/types.d.ts +75 -0
  321. package/dist/mjs/tee/types.js +2 -0
  322. package/dist/mjs/types/Compressor.d.ts +5 -0
  323. package/dist/mjs/types/Compressor.js +2 -0
  324. package/dist/mjs/types/Consensus.d.ts +60 -0
  325. package/dist/mjs/types/Consensus.js +16 -0
  326. package/dist/mjs/types/DepositInfo.d.ts +6 -0
  327. package/dist/mjs/types/DepositInfo.js +2 -0
  328. package/dist/mjs/types/EtlModel.d.ts +2 -0
  329. package/dist/mjs/types/EtlModel.js +2 -0
  330. package/dist/mjs/types/Events.d.ts +34 -0
  331. package/dist/mjs/types/Events.js +2 -0
  332. package/dist/mjs/types/HardwareInfo.d.ts +6 -0
  333. package/dist/mjs/types/HardwareInfo.js +2 -0
  334. package/dist/mjs/types/Marks.d.ts +9 -0
  335. package/dist/mjs/types/Marks.js +7 -0
  336. package/dist/mjs/types/Offer.d.ts +33 -0
  337. package/dist/mjs/types/Offer.js +14 -0
  338. package/dist/mjs/types/OptionInfo.d.ts +8 -0
  339. package/dist/mjs/types/OptionInfo.js +2 -0
  340. package/dist/mjs/types/Order.d.ts +56 -0
  341. package/dist/mjs/types/Order.js +51 -0
  342. package/dist/mjs/types/OrderUsage.d.ts +26 -0
  343. package/dist/mjs/types/OrderUsage.js +2 -0
  344. package/dist/mjs/types/Origins.d.ts +6 -0
  345. package/dist/mjs/types/Origins.js +2 -0
  346. package/dist/mjs/types/Provider.d.ts +7 -0
  347. package/dist/mjs/types/Provider.js +2 -0
  348. package/dist/mjs/types/ResourceLoader.d.ts +28 -0
  349. package/dist/mjs/types/ResourceLoader.js +2 -0
  350. package/dist/mjs/types/SlotInfo.d.ts +6 -0
  351. package/dist/mjs/types/SlotInfo.js +2 -0
  352. package/dist/mjs/types/SlotUsage.d.ts +11 -0
  353. package/dist/mjs/types/SlotUsage.js +6 -0
  354. package/dist/mjs/types/Superpro.d.ts +9 -0
  355. package/dist/mjs/types/Superpro.js +11 -0
  356. package/dist/mjs/types/TeeOfferInfo.d.ts +10 -0
  357. package/dist/mjs/types/TeeOfferInfo.js +2 -0
  358. package/dist/mjs/types/TeeOfferOption.d.ts +13 -0
  359. package/dist/mjs/types/TeeOfferOption.js +2 -0
  360. package/dist/mjs/types/TeeOfferSlot.d.ts +8 -0
  361. package/dist/mjs/types/TeeOfferSlot.js +2 -0
  362. package/dist/mjs/types/ValueOfferSlot.d.ts +16 -0
  363. package/dist/mjs/types/ValueOfferSlot.js +2 -0
  364. package/dist/mjs/types/Web3.d.ts +62 -0
  365. package/dist/mjs/types/Web3.js +2 -0
  366. package/dist/mjs/types/blockchainConnector/StorageAccess.d.ts +8 -0
  367. package/dist/mjs/types/blockchainConnector/StorageAccess.js +2 -0
  368. package/dist/mjs/types/index.d.ts +22 -0
  369. package/dist/mjs/types/index.js +23 -0
  370. package/dist/mjs/types/storage/StorageAccess.d.ts +7 -0
  371. package/dist/mjs/types/storage/StorageAccess.js +2 -0
  372. package/dist/mjs/types/storage/StorageFileAccess.d.ts +5 -0
  373. package/dist/mjs/types/storage/StorageFileAccess.js +2 -0
  374. package/dist/mjs/types/storage/StorageObject.d.ts +8 -0
  375. package/dist/mjs/types/storage/StorageObject.js +2 -0
  376. package/dist/mjs/utils/Monitoring.d.ts +11 -0
  377. package/dist/mjs/utils/Monitoring.js +42 -0
  378. package/dist/mjs/utils/NonceTracker.d.ts +19 -0
  379. package/dist/mjs/utils/NonceTracker.js +73 -0
  380. package/dist/mjs/utils/PubSub.d.ts +9 -0
  381. package/dist/mjs/utils/PubSub.js +32 -0
  382. package/dist/mjs/utils/TxManager.d.ts +25 -0
  383. package/dist/mjs/utils/TxManager.js +162 -0
  384. package/dist/mjs/utils/compressors/GzipCompressor.d.ts +8 -0
  385. package/dist/mjs/utils/compressors/GzipCompressor.js +14 -0
  386. package/dist/mjs/utils/compressors/UncompressedCompressor.d.ts +8 -0
  387. package/dist/mjs/utils/compressors/UncompressedCompressor.js +13 -0
  388. package/dist/mjs/utils/compressors/index.d.ts +2 -0
  389. package/dist/mjs/utils/compressors/index.js +3 -0
  390. package/dist/mjs/utils/helper.d.ts +44 -0
  391. package/dist/mjs/utils/helper.js +258 -0
  392. package/dist/mjs/utils/helpers/getStreamChunks.d.ts +9 -0
  393. package/dist/mjs/utils/helpers/getStreamChunks.js +31 -0
  394. package/dist/mjs/utils/helpers/index.d.ts +1 -0
  395. package/dist/mjs/utils/helpers/index.js +2 -0
  396. package/dist/mjs/utils/helpers/tryWithInterval.d.ts +13 -0
  397. package/dist/mjs/utils/helpers/tryWithInterval.js +35 -0
  398. package/dist/mjs/utils/resourceLoaders/BaseResourceLoader.d.ts +10 -0
  399. package/dist/mjs/utils/resourceLoaders/BaseResourceLoader.js +10 -0
  400. package/dist/mjs/utils/resourceLoaders/StorageProviderLoader.d.ts +18 -0
  401. package/dist/mjs/utils/resourceLoaders/StorageProviderLoader.js +53 -0
  402. package/dist/mjs/utils/resourceLoaders/UrlResourceLoader.d.ts +9 -0
  403. package/dist/mjs/utils/resourceLoaders/UrlResourceLoader.js +44 -0
  404. package/dist/mjs/utils/resourceLoaders/getResourceLoader.d.ts +5 -0
  405. package/dist/mjs/utils/resourceLoaders/getResourceLoader.js +11 -0
  406. package/dist/mjs/utils/resourceLoaders/index.d.ts +1 -0
  407. package/dist/mjs/utils/resourceLoaders/index.js +2 -0
  408. package/package.json +13 -5
  409. package/build/TIIGenerator.js +0 -246
  410. package/build/analytics/Analytics.js +0 -74
  411. package/build/analytics/eventProviders/EventProvider.js +0 -14
  412. package/build/analytics/eventProviders/NodeEventProvider.js +0 -48
  413. package/build/analytics/transports/FetchTransport.js +0 -42
  414. package/build/connectors/BlockchainConnector.js +0 -358
  415. package/build/crypto/Crypto.js +0 -119
  416. package/build/crypto/index.d.ts +0 -2
  417. package/build/crypto/nodejs/NativeCrypto.js +0 -183
  418. package/build/crypto/nodejs/RSA-Hybrid.js +0 -95
  419. package/build/index.d.ts +0 -79
  420. package/build/index.js +0 -142
  421. package/build/models/Offer.js +0 -407
  422. package/build/models/Order.js +0 -577
  423. package/build/models/Provider.js +0 -137
  424. package/build/models/TCB.js +0 -135
  425. package/build/models/TeeOffer.js +0 -600
  426. package/build/models/index.d.ts +0 -5
  427. package/build/models/index.js +0 -17
  428. package/build/polyfills.js +0 -7
  429. package/build/proto/Compression.js +0 -132
  430. package/build/proto/TRI.js +0 -293
  431. package/build/proto/TeeProperties.js +0 -401
  432. package/build/providers/storage/StorageAdapter.js +0 -323
  433. package/build/providers/storage/getStorageProvider.d.ts +0 -4
  434. package/build/providers/storage/getStorageProvider.js +0 -20
  435. package/build/staticModels/Consensus.js +0 -247
  436. package/build/staticModels/Deposits.js +0 -214
  437. package/build/staticModels/Marks.js +0 -43
  438. package/build/staticModels/Offers.js +0 -207
  439. package/build/staticModels/Orders.js +0 -502
  440. package/build/staticModels/StaticModel.js +0 -46
  441. package/build/staticModels/Superpro.js +0 -24
  442. package/build/staticModels/SuperproToken.js +0 -154
  443. package/build/staticModels/TeeOffers.js +0 -344
  444. package/build/store.js +0 -17
  445. package/build/tee/QuoteParser.js +0 -189
  446. package/build/tee/QuoteValidator.js +0 -414
  447. package/build/tee/helpers.js +0 -119
  448. package/build/types/HardwareInfo.d.ts +0 -6
  449. package/build/types/TeeOfferSlot.d.ts +0 -8
  450. package/build/types/index.d.ts +0 -22
  451. package/build/types/index.js +0 -39
  452. package/build/utils/Monitoring.js +0 -48
  453. package/build/utils/PubSub.js +0 -37
  454. package/build/utils/TxManager.js +0 -179
  455. package/build/utils/compressors/UncompressedCompressor.js +0 -17
  456. package/build/utils/compressors/index.d.ts +0 -2
  457. package/build/utils/helper.js +0 -286
  458. package/build/utils/helpers/index.d.ts +0 -1
  459. package/build/utils/resourceLoaders/getResourceLoader.js +0 -15
  460. package/build/utils/resourceLoaders/index.d.ts +0 -1
  461. /package/{build → dist/cjs}/analytics/AnalyticsError.d.ts +0 -0
  462. /package/{build → dist/cjs}/analytics/eventProviders/EventProvider.d.ts +0 -0
  463. /package/{build → dist/cjs}/config.d.ts +0 -0
  464. /package/{build → dist/cjs}/constants.d.ts +0 -0
  465. /package/{build → dist/cjs}/contracts/abi.d.ts +0 -0
  466. /package/{build → dist/cjs}/crypto/Crypto.d.ts +0 -0
  467. /package/{build → dist/cjs}/crypto/nodejs/AES.d.ts +0 -0
  468. /package/{build → dist/cjs}/crypto/nodejs/ARIA.d.ts +0 -0
  469. /package/{build → dist/cjs}/crypto/nodejs/ECIES.d.ts +0 -0
  470. /package/{build → dist/cjs}/crypto/nodejs/NativeCrypto.d.ts +0 -0
  471. /package/{build → dist/cjs}/crypto/nodejs/RSA-Hybrid.d.ts +0 -0
  472. /package/{build → dist/cjs}/logger.d.ts +0 -0
  473. /package/{build → dist/cjs}/polyfills.d.ts +0 -0
  474. /package/{build → dist/cjs}/proto/Compression.d.ts +0 -0
  475. /package/{build → dist/cjs}/proto/TRI.d.ts +0 -0
  476. /package/{build → dist/cjs}/proto/TeeProperties.d.ts +0 -0
  477. /package/{build → dist/cjs}/providers/storage/types.d.ts +0 -0
  478. /package/{build → dist/cjs}/staticModels/ModelPackager.d.ts +0 -0
  479. /package/{build → dist/cjs}/store.d.ts +0 -0
  480. /package/{build → dist/cjs}/tee/errors.d.ts +0 -0
  481. /package/{build → dist/cjs}/tee/helpers.d.ts +0 -0
  482. /package/{build → dist/cjs}/tee/statuses.d.ts +0 -0
  483. /package/{build → dist/cjs}/tee/types.d.ts +0 -0
  484. /package/{build → dist/cjs}/types/Compressor.d.ts +0 -0
  485. /package/{build → dist/cjs}/types/EtlModel.d.ts +0 -0
  486. /package/{build → dist/cjs}/types/Marks.d.ts +0 -0
  487. /package/{build → dist/cjs}/types/OptionInfo.d.ts +0 -0
  488. /package/{build → dist/cjs}/types/Origins.d.ts +0 -0
  489. /package/{build → dist/cjs}/types/Provider.d.ts +0 -0
  490. /package/{build → dist/cjs}/types/SlotInfo.d.ts +0 -0
  491. /package/{build → dist/cjs}/types/Superpro.d.ts +0 -0
  492. /package/{build → dist/cjs}/types/Web3.d.ts +0 -0
  493. /package/{build → dist/cjs}/types/storage/StorageAccess.d.ts +0 -0
  494. /package/{build → dist/cjs}/types/storage/StorageObject.d.ts +0 -0
  495. /package/{build → dist/cjs}/utils/Monitoring.d.ts +0 -0
  496. /package/{build → dist/cjs}/utils/NonceTracker.d.ts +0 -0
  497. /package/{build → dist/cjs}/utils/PubSub.d.ts +0 -0
  498. /package/{build → dist/cjs}/utils/helpers/getStreamChunks.d.ts +0 -0
  499. /package/{build → dist/cjs}/utils/helpers/tryWithInterval.d.ts +0 -0
@@ -0,0 +1,382 @@
1
+ import axios from 'axios';
2
+ import { ec } from 'elliptic';
3
+ import { util, asn1 } from 'node-forge';
4
+ import { Certificate } from '@fidm/x509';
5
+ import { formatter } from 'js-encoding-utils';
6
+ import { CertificateRevocationList } from 'pkijs';
7
+ import { fromBER } from 'asn1js';
8
+ import _ from 'lodash';
9
+ import { TeeSgxParser } from './QuoteParser.js';
10
+ import rootLogger from '../logger.js';
11
+ import { TeeQuoteValidatorError } from './errors.js';
12
+ import { QEIdentityStatuses, TCBStatuses, QuoteValidationStatuses } from './statuses.js';
13
+ import { Encoding, HashAlgorithm } from '@super-protocol/dto-js';
14
+ import Crypto from '../crypto/index.js';
15
+ const INTEL_BASE_SGX_URL = 'https://api.trustedservices.intel.com';
16
+ const INTEL_SGX_ROOT_CA_URL = 'https://certificates.trustedservices.intel.com/IntelSGXRootCA.der';
17
+ const SGX_OID = '1.2.840.113741.1.13.1';
18
+ const FMSPC_OID = `${SGX_OID}.4`;
19
+ const PCEID_OID = `${SGX_OID}.3`;
20
+ const TCB_OID = `${SGX_OID}.2`;
21
+ const PCESVN_OID = `${TCB_OID}.17`;
22
+ const INTEL_ROOT_PUB_KEY = new Uint8Array([
23
+ 4, 11, 169, 196, 192, 192, 200, 97, 147, 163, 254, 35, 214, 176, 44, 218, 16, 168, 187, 212, 232,
24
+ 142, 72, 180, 69, 133, 97, 163, 110, 112, 85, 37, 245, 103, 145, 142, 46, 220, 136, 228, 13, 134,
25
+ 11, 208, 204, 78, 226, 106, 172, 201, 136, 229, 5, 169, 83, 85, 140, 69, 63, 107, 9, 4, 174, 115,
26
+ 148,
27
+ ]);
28
+ export class QuoteValidator {
29
+ isDefault;
30
+ baseUrl;
31
+ teeSgxParser;
32
+ logger;
33
+ constructor(baseUrl) {
34
+ this.isDefault = baseUrl === INTEL_BASE_SGX_URL;
35
+ this.baseUrl = `${baseUrl}/sgx/certification/v4`;
36
+ this.teeSgxParser = new TeeSgxParser();
37
+ this.logger = rootLogger.child({ className: QuoteValidator.name });
38
+ }
39
+ splitChain(chain) {
40
+ const begin = '-----BEGIN CERTIFICATE-----';
41
+ const end = '-----END CERTIFICATE-----';
42
+ return chain
43
+ .split(begin)
44
+ .filter(Boolean)
45
+ .map((cert) => begin.concat(cert.slice(0, cert.indexOf(end)), end));
46
+ }
47
+ findSequenceByOID(hexValue, targetOID) {
48
+ const buffer = util.hexToBytes(hexValue);
49
+ const asn1Data = asn1.fromDer(buffer);
50
+ return this.searchForSequence(asn1Data, targetOID);
51
+ }
52
+ searchForSequence(asn1Data, targetOID) {
53
+ if (asn1Data.type === asn1.Type.SEQUENCE) {
54
+ for (const child of asn1Data.value) {
55
+ if (child.type === asn1.Type.OID) {
56
+ const oid = asn1.derToOid(child.value);
57
+ if (oid === targetOID) {
58
+ return asn1Data;
59
+ }
60
+ }
61
+ }
62
+ }
63
+ if (Array.isArray(asn1Data.value)) {
64
+ for (const child of asn1Data.value) {
65
+ const result = this.searchForSequence(child, targetOID);
66
+ if (result) {
67
+ return result;
68
+ }
69
+ }
70
+ }
71
+ return null;
72
+ }
73
+ verifyDataBySignature(data, signature, key) {
74
+ const ellipticEc = new ec('p256');
75
+ const result = ellipticEc.verify(data, {
76
+ r: signature.subarray(0, 32),
77
+ s: signature.subarray(32),
78
+ }, ellipticEc.keyFromPublic(key, 'hex'));
79
+ return result;
80
+ }
81
+ checkValidDate(from, to) {
82
+ const now = Date.now();
83
+ return from < now && now < to;
84
+ }
85
+ checkChainForIssuers(pckCert, platformCert, rootCert) {
86
+ return (_.isEqual(pckCert.issuer, platformCert.subject) &&
87
+ _.isEqual(platformCert.issuer, rootCert.subject));
88
+ }
89
+ getCrl(crlData) {
90
+ const crlDer = crlData.startsWith('-----')
91
+ ? formatter.pemToBin(crlData)
92
+ : Buffer.from(crlData, 'hex');
93
+ const crlAsn = fromBER(crlDer);
94
+ return new CertificateRevocationList({ schema: crlAsn.result });
95
+ }
96
+ checkCertificatesInCrl(crl, certIds) {
97
+ if (!crl.thisUpdate || !crl.nextUpdate) {
98
+ throw new TeeQuoteValidatorError('Certificate revocation list has no update date field');
99
+ }
100
+ if (!this.checkValidDate(crl.thisUpdate.value.valueOf(), crl.nextUpdate.value.valueOf())) {
101
+ throw new TeeQuoteValidatorError('Certificate revocation list has invalid update date');
102
+ }
103
+ if (crl.revokedCertificates) {
104
+ const isAnyRevoked = crl.revokedCertificates.find((revoked) => certIds.includes(Buffer.from(revoked.userCertificate.valueBlock.valueHexView).toString('hex')));
105
+ if (isAnyRevoked) {
106
+ throw new TeeQuoteValidatorError('Certificate in revokation list');
107
+ }
108
+ }
109
+ }
110
+ async getCertificates(quote) {
111
+ const platformCrlResult = await axios.get(`${this.baseUrl}/pckcrl?ca=platform&encoding=pem`);
112
+ const platformChain = decodeURIComponent(platformCrlResult.headers['sgx-pck-crl-issuer-chain']);
113
+ const [platformFetchedPem, rootFetchedPem] = this.splitChain(platformChain); // [platform, root]
114
+ const platformFetchedCert = Certificate.fromPEM(Buffer.from(platformFetchedPem));
115
+ const rootFetchedCert = Certificate.fromPEM(Buffer.from(rootFetchedPem));
116
+ if (!this.checkValidDate(platformFetchedCert.validFrom.valueOf(), platformFetchedCert.validTo.valueOf())) {
117
+ throw new TeeQuoteValidatorError('Platform certificate validation date is not valid');
118
+ }
119
+ if (!this.checkValidDate(rootFetchedCert.validFrom.valueOf(), rootFetchedCert.validTo.valueOf())) {
120
+ throw new TeeQuoteValidatorError('Root certificate validation date is not valid');
121
+ }
122
+ if (!_.isEqual(rootFetchedCert.issuer, rootFetchedCert.subject)) {
123
+ throw new TeeQuoteValidatorError('Root certificate is not self-signed');
124
+ }
125
+ if (Buffer.compare(rootFetchedCert.publicKey.keyRaw, INTEL_ROOT_PUB_KEY) !== 0) {
126
+ throw new TeeQuoteValidatorError('Wrong Intel root certificate public key');
127
+ }
128
+ const certificatePems = this.splitChain(quote.qeCertificationData.toString()); // [pck, platform, root]
129
+ const pckCert = Certificate.fromPEM(Buffer.from(certificatePems[0]));
130
+ const certType = quote.qeCertificationDataType;
131
+ if (!this.checkValidDate(pckCert.validFrom.valueOf(), pckCert.validTo.valueOf())) {
132
+ throw new TeeQuoteValidatorError('PCK certificate validation date is not valid');
133
+ }
134
+ if (certType !== 5) {
135
+ throw new TeeQuoteValidatorError(`Unsupported certification data type: ${certType}`);
136
+ }
137
+ if (rootFetchedPem !== certificatePems[2]) {
138
+ throw new TeeQuoteValidatorError("Invalid SGX root certificate in quote's certificate chain");
139
+ }
140
+ if (!this.checkChainForIssuers(pckCert, platformFetchedCert, rootFetchedCert)) {
141
+ throw new TeeQuoteValidatorError('Invalid issuers in certificates chain');
142
+ }
143
+ const certIds = [
144
+ rootFetchedCert.serialNumber,
145
+ platformFetchedCert.serialNumber,
146
+ pckCert.serialNumber,
147
+ ];
148
+ if (this.isDefault) {
149
+ const intelCrlDer = await axios.get(INTEL_SGX_ROOT_CA_URL, {
150
+ responseType: 'arraybuffer',
151
+ });
152
+ const intelCrlAsn = fromBER(Buffer.from(intelCrlDer.data));
153
+ this.checkCertificatesInCrl(new CertificateRevocationList({ schema: intelCrlAsn.result }), certIds);
154
+ }
155
+ else {
156
+ const intelCrlDer = await axios.get(`${this.baseUrl}/rootcacrl`);
157
+ const intelCrl = this.getCrl(intelCrlDer.data);
158
+ this.checkCertificatesInCrl(intelCrl, certIds);
159
+ }
160
+ const platformCrl = this.getCrl(platformCrlResult.data);
161
+ this.checkCertificatesInCrl(platformCrl, certIds);
162
+ return { pckCert, rootCertPem: rootFetchedPem };
163
+ }
164
+ async verifyQeReportSignature(quote, pckPublicKey) {
165
+ const signature = Buffer.from(quote.qeReportSignature);
166
+ const reportHash = await this.getSha256Hash(Buffer.from(quote.qeReport));
167
+ return this.verifyDataBySignature(reportHash, signature, pckPublicKey);
168
+ }
169
+ async verifyQeReportData(quote, report) {
170
+ const qeAuthData = quote.qeAuthenticationData;
171
+ const attestationKey = quote.ecdsaAttestationKey;
172
+ const qeReportDataHash = report.dataHash;
173
+ const calculatedHash = await this.getSha256Hash(Buffer.concat([attestationKey, qeAuthData]));
174
+ const result = Buffer.compare(qeReportDataHash, calculatedHash);
175
+ return result === 0;
176
+ }
177
+ async verifyEnclaveReportSignature(quote) {
178
+ const key = Buffer.from(quote.ecdsaAttestationKey);
179
+ const headerBuffer = Buffer.from(quote.rawHeader);
180
+ const reportBuffer = Buffer.from(quote.report);
181
+ const expected = quote.isvEnclaveReportSignature;
182
+ const calculatedHash = await this.getSha256Hash(Buffer.concat([headerBuffer, reportBuffer]));
183
+ const ellipticEc = new ec('p256');
184
+ const result = ellipticEc.verify(calculatedHash, {
185
+ r: expected.subarray(0, 32),
186
+ s: expected.subarray(32),
187
+ }, Buffer.concat([Buffer.from([4]), key]));
188
+ return result;
189
+ }
190
+ async validateQuoteStructure(quote, report, pckPublicKey) {
191
+ if (!(await this.verifyQeReportSignature(quote, pckPublicKey))) {
192
+ throw new TeeQuoteValidatorError('Wrong QE report signature');
193
+ }
194
+ if (!(await this.verifyQeReportData(quote, report))) {
195
+ throw new TeeQuoteValidatorError('Wrong QE report data');
196
+ }
197
+ if (!(await this.verifyEnclaveReportSignature(quote))) {
198
+ throw new TeeQuoteValidatorError('Wrong enclave report signature');
199
+ }
200
+ }
201
+ getSgxExtensionData(pckCert) {
202
+ const sgxExtensionData = pckCert.extensions.find((item) => item.oid === SGX_OID);
203
+ if (!sgxExtensionData) {
204
+ throw new TeeQuoteValidatorError('SGX data not found in PCK certificate');
205
+ }
206
+ return sgxExtensionData;
207
+ }
208
+ getDataFromExtension(sgxExtensionData, targetOid, targetType) {
209
+ const rawData = this.findSequenceByOID(sgxExtensionData.value.toString('hex'), targetOid);
210
+ if (!rawData) {
211
+ throw new TeeQuoteValidatorError(`OID ${targetOid} not found in PCK certificate's SGX data`);
212
+ }
213
+ const data = rawData.value.filter((asnElement) => asnElement.type === targetType);
214
+ if (!data.length) {
215
+ throw new TeeQuoteValidatorError(`Data on OID ${targetOid} of type ${targetType} not found`);
216
+ }
217
+ const result = util.bytesToHex(data[0].value);
218
+ return targetType === asn1.Type.OCTETSTRING ? result : parseInt(result, 16).toString();
219
+ }
220
+ async getTcbInfo(fmspc, rootCertPem) {
221
+ const tcbData = await axios.get(`${this.baseUrl}/tcb?fmspc=${fmspc}`);
222
+ const tcbInfoHeader = 'tcb-info-issuer-chain';
223
+ const tcbInfoChain = this.splitChain(decodeURIComponent(tcbData.headers[tcbInfoHeader])); // [tcb, root]
224
+ if (tcbInfoChain[1] !== rootCertPem) {
225
+ throw new TeeQuoteValidatorError('Invalid SGX root certificate in TCB chain');
226
+ }
227
+ const tcbCert = Certificate.fromPEM(Buffer.from(tcbInfoChain[0]));
228
+ const key = tcbCert.publicKey.keyRaw;
229
+ const signature = Buffer.from(tcbData.data.signature, 'hex');
230
+ const calculatedhash = await this.getSha256Hash(Buffer.from(JSON.stringify(tcbData.data.tcbInfo)));
231
+ const result = this.verifyDataBySignature(calculatedhash, signature, key);
232
+ if (!result) {
233
+ throw new TeeQuoteValidatorError('TCB info signature is not valid');
234
+ }
235
+ if (tcbData.data.tcbInfo.nextUpdate.valueOf() > Date.now()) {
236
+ throw new TeeQuoteValidatorError('TCB next update date is out of date');
237
+ }
238
+ return tcbData.data;
239
+ }
240
+ async getQEIdentity(rootCertPem) {
241
+ const qeIdentityData = await axios.get(`${this.baseUrl}/qe/identity`);
242
+ const qeIdentityHeader = 'sgx-enclave-identity-issuer-chain';
243
+ const qeIdentityChain = this.splitChain(decodeURIComponent(qeIdentityData.headers[qeIdentityHeader])); // [qeIdentity, root]
244
+ if (qeIdentityChain[1] !== rootCertPem) {
245
+ throw new TeeQuoteValidatorError('Invalid SGX root certificate in enclave identity chain');
246
+ }
247
+ const qeIdentityCert = Certificate.fromPEM(Buffer.from(qeIdentityChain[0]));
248
+ const key = qeIdentityCert.publicKey.keyRaw;
249
+ const signature = Buffer.from(qeIdentityData.data.signature, 'hex');
250
+ const calculatedhash = await this.getSha256Hash(Buffer.from(JSON.stringify(qeIdentityData.data.enclaveIdentity)));
251
+ const result = this.verifyDataBySignature(calculatedhash, signature, key);
252
+ if (!result) {
253
+ throw new TeeQuoteValidatorError('Enclave identity signature is not valid');
254
+ }
255
+ if (qeIdentityData.data.enclaveIdentity.nextUpdate.valueOf() > Date.now()) {
256
+ throw new TeeQuoteValidatorError('Enclave identity next update date is out of date');
257
+ }
258
+ return qeIdentityData.data;
259
+ }
260
+ getQEIdentityStatus(report, qeIdentity) {
261
+ const mrSigner = report.mrSigner.toString('hex');
262
+ if (mrSigner.toUpperCase() !== qeIdentity.enclaveIdentity.mrsigner) {
263
+ throw new TeeQuoteValidatorError('Wrong MR signer in QE report');
264
+ }
265
+ if (report.isvProdId !== qeIdentity.enclaveIdentity.isvprodid) {
266
+ throw new TeeQuoteValidatorError('Wrong ISV PROD ID in QE report');
267
+ }
268
+ const tcbLevel = qeIdentity.enclaveIdentity.tcbLevels.find((tcbLevel) => tcbLevel.tcb.isvsvn <= report.isvSvn);
269
+ const status = tcbLevel?.tcbStatus;
270
+ if (status) {
271
+ this.logger.info(`Enclave identity status is ${tcbLevel?.tcbStatus}`);
272
+ return status;
273
+ }
274
+ return QEIdentityStatuses.OutOfDate;
275
+ }
276
+ getTcbStatus(fmspc, pceId, tcbData, sgxExtensionData) {
277
+ if (fmspc.toUpperCase() !== tcbData.tcbInfo.fmspc.toUpperCase()) {
278
+ throw new TeeQuoteValidatorError('Wrong FMSPC in PCK certificate');
279
+ }
280
+ if (pceId !== tcbData.tcbInfo.pceId) {
281
+ throw new TeeQuoteValidatorError('Wrong PCEID in PCK certificate');
282
+ }
283
+ const pceSvn = this.getDataFromExtension(sgxExtensionData, PCESVN_OID, asn1.Type.INTEGER);
284
+ const sgxComponents = [...Array(16).keys()].map((i) => this.getDataFromExtension(sgxExtensionData, `${TCB_OID}.${i + 1}`, asn1.Type.INTEGER));
285
+ const tcbLevel = tcbData.tcbInfo.tcbLevels.find((tcbLevel) => tcbLevel.tcb.pcesvn <= Number(pceSvn) &&
286
+ tcbLevel.tcb.sgxtcbcomponents.every((el, index) => el.svn <= Number(sgxComponents[index])));
287
+ const status = tcbLevel?.tcbStatus;
288
+ if (status) {
289
+ this.logger.info(`TCB status is ${tcbLevel?.tcbStatus}`);
290
+ return status;
291
+ }
292
+ return TCBStatuses.OutOfDate;
293
+ }
294
+ getQuoteValidationStatus(qeIdentityStatus, tcbStatus) {
295
+ if (qeIdentityStatus === QEIdentityStatuses.OutOfDate) {
296
+ if (tcbStatus === TCBStatuses.UpToDate || tcbStatus === TCBStatuses.SWHardeningNeeded) {
297
+ return QuoteValidationStatuses.SecurityPatchNeeded;
298
+ }
299
+ if (tcbStatus === TCBStatuses.OutOfDateConfigurationNeeded ||
300
+ tcbStatus === TCBStatuses.ConfigurationAndSWHardeningNeeded) {
301
+ return QuoteValidationStatuses.SoftwareUpdateNeeded;
302
+ }
303
+ }
304
+ if (qeIdentityStatus === QEIdentityStatuses.Revoked || tcbStatus === TCBStatuses.Revoked) {
305
+ throw new TeeQuoteValidatorError('QE identity or TCB revoked');
306
+ }
307
+ if (tcbStatus === TCBStatuses.UpToDate) {
308
+ return QuoteValidationStatuses.UpToDate;
309
+ }
310
+ if (tcbStatus === TCBStatuses.OutOfDate) {
311
+ return QuoteValidationStatuses.SecurityPatchNeeded;
312
+ }
313
+ if (tcbStatus === TCBStatuses.ConfigurationNeeded) {
314
+ return QuoteValidationStatuses.ConfigurationNeeded;
315
+ }
316
+ return QuoteValidationStatuses.SoftwareUpdateNeeded;
317
+ }
318
+ getQuoteValidationStatusDescription(status) {
319
+ switch (status) {
320
+ case QuoteValidationStatuses.UpToDate:
321
+ return 'The Quote verification passed and is at the latest TCB level.';
322
+ case QuoteValidationStatuses.ConfigurationNeeded:
323
+ return `The SGX platform firmware and SW are at the latest security patching level
324
+ but there are platform hardware configurations may expose the enclave to vulnerabilities.`;
325
+ case QuoteValidationStatuses.SecurityPatchNeeded:
326
+ return `The SGX platform firmware and SW are not at the latest security patching level.
327
+ The platform needs to be patched with firmware and/or software patches.`;
328
+ case QuoteValidationStatuses.SoftwareUpdateNeeded:
329
+ return `The SGX platform firmware and SW are at the latest security patching level but there are
330
+ certain vulnerabilities that can only be mitigated with software mitigations implemented by the enclave.`;
331
+ default:
332
+ return 'Quote verification failed.';
333
+ }
334
+ }
335
+ async validate(quoteBuffer) {
336
+ try {
337
+ const quote = this.teeSgxParser.parseQuote(quoteBuffer);
338
+ const report = this.teeSgxParser.parseReport(quote.qeReport);
339
+ const { pckCert, rootCertPem } = await this.getCertificates(quote);
340
+ await this.validateQuoteStructure(quote, report, pckCert.publicKey.keyRaw);
341
+ this.logger.info('Quote structure validated successfully');
342
+ const sgxExtensionData = this.getSgxExtensionData(pckCert);
343
+ const fmspc = this.getDataFromExtension(sgxExtensionData, FMSPC_OID, asn1.Type.OCTETSTRING);
344
+ const pceId = this.getDataFromExtension(sgxExtensionData, PCEID_OID, asn1.Type.OCTETSTRING);
345
+ const tcbData = await this.getTcbInfo(fmspc, rootCertPem);
346
+ const qeIdentity = await this.getQEIdentity(rootCertPem);
347
+ const qeIdentityStatus = this.getQEIdentityStatus(report, qeIdentity);
348
+ const tcbStatus = this.getTcbStatus(fmspc, pceId, tcbData, sgxExtensionData);
349
+ const quoteValidationStatus = this.getQuoteValidationStatus(qeIdentityStatus, tcbStatus);
350
+ this.logger.info(`Quote validation status is ${quoteValidationStatus}`);
351
+ return {
352
+ quoteValidationStatus,
353
+ description: this.getQuoteValidationStatusDescription(quoteValidationStatus),
354
+ };
355
+ }
356
+ catch (error) {
357
+ this.logger.error(`Validation error: ${error}`);
358
+ return {
359
+ quoteValidationStatus: QuoteValidationStatuses.Error,
360
+ description: this.getQuoteValidationStatusDescription(QuoteValidationStatuses.Error),
361
+ error,
362
+ };
363
+ }
364
+ }
365
+ async isQuoteHasUserData(quoteBuffer, userDataBuffer) {
366
+ const quote = this.teeSgxParser.parseQuote(quoteBuffer);
367
+ const report = this.teeSgxParser.parseReport(quote.report);
368
+ const userDataHash = await this.getSha256Hash(userDataBuffer);
369
+ const slicedQuoteData = report.userData.slice(0, userDataHash.length);
370
+ const compareResult = Buffer.compare(slicedQuoteData, userDataHash);
371
+ return compareResult === 0;
372
+ }
373
+ async getSha256Hash(data) {
374
+ const hashInfo = {
375
+ algo: HashAlgorithm.SHA256,
376
+ encoding: Encoding.base64,
377
+ };
378
+ const hashData = await Crypto.createHash(data, hashInfo);
379
+ return Buffer.from(hashData.hash, hashData.encoding);
380
+ }
381
+ }
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVvdGVWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVlL1F1b3RlVmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxZQUFZLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsT0FBTyxVQUFVLE1BQU0sY0FBYyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxNQUFNLE1BQU0sb0JBQW9CLENBQUM7QUFFeEMsTUFBTSxrQkFBa0IsR0FBRyx1Q0FBdUMsQ0FBQztBQUNuRSxNQUFNLHFCQUFxQixHQUFHLG1FQUFtRSxDQUFDO0FBQ2xHLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLEdBQUcsT0FBTyxJQUFJLENBQUM7QUFDakMsTUFBTSxTQUFTLEdBQUcsR0FBRyxPQUFPLElBQUksQ0FB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
@@ -0,0 +1,6 @@
1
+ export declare class TLBlockSerializerError extends Error {
2
+ }
3
+ export declare class TeeQuoteParserError extends Error {
4
+ }
5
+ export declare class TeeQuoteValidatorError extends Error {
6
+ }
@@ -0,0 +1,7 @@
1
+ export class TLBlockSerializerError extends Error {
2
+ }
3
+ export class TeeQuoteParserError extends Error {
4
+ }
5
+ export class TeeQuoteValidatorError extends Error {
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlZS9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLHNCQUF1QixTQUFRLEtBQUs7Q0FBRztBQUVwRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztDQUFHO0FBRWpELE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxLQUFLO0NBQUcifQ==
@@ -0,0 +1,14 @@
1
+ export declare const splitChain: (chain: string) => string[];
2
+ declare class Position {
3
+ place: number;
4
+ constructor();
5
+ }
6
+ export declare class Signature {
7
+ static toArray(msg: string | Array<number> | null): Uint8Array;
8
+ static importFromDER(signature: string): {
9
+ r: string;
10
+ s: string;
11
+ };
12
+ static getLength(buf: Uint8Array, p: Position): number | boolean;
13
+ }
14
+ export {};
@@ -0,0 +1,115 @@
1
+ export const splitChain = (chain) => {
2
+ const begin = '-----BEGIN CERTIFICATE-----';
3
+ const end = '-----END CERTIFICATE-----';
4
+ return chain
5
+ .split(begin)
6
+ .filter(Boolean)
7
+ .map((cert) => begin.concat(cert.slice(0, cert.indexOf(end)), end));
8
+ };
9
+ class Position {
10
+ place;
11
+ constructor() {
12
+ this.place = 0;
13
+ }
14
+ }
15
+ export class Signature {
16
+ static toArray(msg) {
17
+ if (Array.isArray(msg)) {
18
+ return new Uint8Array(msg);
19
+ }
20
+ if (!msg) {
21
+ return new Uint8Array();
22
+ }
23
+ const res = [];
24
+ if (typeof msg !== 'string') {
25
+ return new Uint8Array(msg);
26
+ }
27
+ msg = msg.replace(/[^a-z0-9]+/gi, '');
28
+ if (msg.length % 2 !== 0) {
29
+ msg = '0' + msg;
30
+ }
31
+ for (let i = 0; i < msg.length; i += 2) {
32
+ res.push(parseInt(msg[i] + msg[i + 1], 16));
33
+ }
34
+ return new Uint8Array(res);
35
+ }
36
+ static importFromDER(signature) {
37
+ const data = Signature.toArray(signature);
38
+ const p = new Position();
39
+ if (data[p.place++] !== 0x30) {
40
+ throw new Error('Invald DER');
41
+ }
42
+ const len = Signature.getLength(data, p);
43
+ if (len === false) {
44
+ throw new Error('Invald DER');
45
+ }
46
+ if (Number(len) + p.place !== data.length) {
47
+ throw new Error('Invald DER');
48
+ }
49
+ if (data[p.place++] !== 0x02) {
50
+ throw new Error('Invald DER');
51
+ }
52
+ const rlen = Signature.getLength(data, p);
53
+ if (rlen === false) {
54
+ throw new Error('Invald DER');
55
+ }
56
+ let r = data.slice(p.place, Number(rlen) + p.place);
57
+ p.place += Number(rlen);
58
+ if (data[p.place++] !== 0x02) {
59
+ throw new Error('Invald DER');
60
+ }
61
+ const slen = this.getLength(data, p);
62
+ if (slen === false) {
63
+ throw new Error('Invald DER');
64
+ }
65
+ if (data.length !== Number(slen) + p.place) {
66
+ throw new Error('Invald DER');
67
+ }
68
+ let s = data.slice(p.place, Number(slen) + p.place);
69
+ if (r[0] === 0) {
70
+ if (r[1] & 0x80) {
71
+ r = r.slice(1);
72
+ }
73
+ else {
74
+ throw new Error('Leading zeroes');
75
+ }
76
+ }
77
+ if (s[0] === 0) {
78
+ if (s[1] & 0x80) {
79
+ s = s.slice(1);
80
+ }
81
+ else {
82
+ throw new Error('Leading zeroes');
83
+ }
84
+ }
85
+ return {
86
+ r: Buffer.from(r).toString('hex'),
87
+ s: Buffer.from(s).toString('hex'),
88
+ };
89
+ }
90
+ static getLength(buf, p) {
91
+ const initial = buf[p.place++];
92
+ if (!(initial & 0x80)) {
93
+ return initial;
94
+ }
95
+ const octetLen = initial & 0xf;
96
+ // Indefinite length or overflow
97
+ if (octetLen === 0 || octetLen > 4) {
98
+ return false;
99
+ }
100
+ let val = 0;
101
+ let off = p.place;
102
+ for (let i = 0; i < octetLen; i++, off++) {
103
+ val <<= 8;
104
+ val |= buf[off];
105
+ val >>>= 0;
106
+ }
107
+ // Leading zeroes
108
+ if (val <= 0x7f) {
109
+ return false;
110
+ }
111
+ p.place = off;
112
+ return val;
113
+ }
114
+ }
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZWUvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFhLEVBQVksRUFBRTtJQUNwRCxNQUFNLEtBQUssR0FBRyw2QkFBNkIsQ0FBQztJQUM1QyxNQUFNLEdBQUcsR0FBRywyQkFBMkIsQ0FBQztJQUV4QyxPQUFPLEtBQUs7U0FDVCxLQUFLLENBQUMsS0FBSyxDQUFDO1NBQ1osTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUNmLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDLENBQUM7QUFFRixNQUFNLFFBQVE7SUFDWixLQUFLLENBQVM7SUFFZDtRQUNFLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxTQUFTO0lBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBa0M7UUFDL0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO1FBRXpCLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQzNCLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDNUI7UUFFRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEMsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7U0FDakI7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDN0M7UUFFRCxPQUFPLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQWlCO1FBSXBDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMvQjtRQUNELE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLElBQUksR0FBRyxLQUFLLEtBQUssRUFBRTtZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDL0I7UUFDRCxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMvQjtRQUNELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRTtZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDL0I7UUFDRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7WUFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUMvQjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFO2dCQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUNuQztTQUNGO1FBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFO2dCQUNmLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUNuQztTQUNGO1FBRUQsT0FBTztZQUNMLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDakMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBZSxFQUFFLENBQVc7UUFDM0MsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRTtZQUNyQixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELE1BQU0sUUFBUSxHQUFHLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFFL0IsZ0NBQWdDO1FBQ2hDLElBQUksUUFBUSxLQUFLLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDWixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDeEMsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNWLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEIsR0FBRyxNQUFNLENBQUMsQ0FBQztTQUNaO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtZQUNmLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNkLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGIn0=
@@ -0,0 +1,63 @@
1
+ import { TeeDataType, BinaryType, TLBlockUnserializeResultType, TLBlockSerializeResultType, TLBlockType } from './types.js';
2
+ /**
3
+ * Serializes and Unserializes TLB
4
+ */
5
+ export interface TLBlockSerializer {
6
+ unserializeTlb(blob: BinaryType): TLBlockUnserializeResultType | Promise<TLBlockUnserializeResultType>;
7
+ serializeTlb(tlb: TLBlockType, tlbMetadata: TeeDataType): TLBlockSerializeResultType | Promise<TLBlockSerializeResultType>;
8
+ serializeMetadata(tlbMetadata: TeeDataType): BinaryType | Promise<BinaryType>;
9
+ serializeAnyData(anyData: any): BinaryType;
10
+ }
11
+ interface IISVSVNStatus {
12
+ tcb: {
13
+ isvsvn: number;
14
+ };
15
+ tcbDate: string;
16
+ tcbStatus: string;
17
+ }
18
+ export interface IQEIdentity {
19
+ signature: string;
20
+ enclaveIdentity: {
21
+ id: string;
22
+ version: number;
23
+ issueDate: string;
24
+ nextUpdate: string;
25
+ tcbEvaluationDataNumber: number;
26
+ miscselect: string;
27
+ miscselectMask: string;
28
+ attributes: string;
29
+ attributesMask: string;
30
+ mrsigner: string;
31
+ isvprodid: number;
32
+ tcbLevels: [IISVSVNStatus];
33
+ };
34
+ }
35
+ interface sgxTcbComponent {
36
+ svn: number;
37
+ category: string;
38
+ type: string;
39
+ }
40
+ interface ITCBSVNStatus {
41
+ tcb: {
42
+ sgxtcbcomponents: [sgxTcbComponent];
43
+ pcesvn: number;
44
+ };
45
+ tcbDate: string;
46
+ tcbStatus: string;
47
+ advisoryIDs: [string];
48
+ }
49
+ export interface ITcbData {
50
+ signature: string;
51
+ tcbInfo: {
52
+ id: string;
53
+ version: number;
54
+ issueDate: string;
55
+ nextUpdate: string;
56
+ fmspc: string;
57
+ pceId: string;
58
+ tcbType: number;
59
+ tcbEvaluationDataNumber: number;
60
+ tcbLevels: [ITCBSVNStatus];
61
+ };
62
+ }
63
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlZS9pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9