@scriptc/runtime 0.0.0 → 0.0.2

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 (416) hide show
  1. package/LICENSE +202 -0
  2. package/package.json +16 -6
  3. package/src/scr_array.c +488 -0
  4. package/src/scr_assert.c +1393 -0
  5. package/src/scr_async.c +2593 -0
  6. package/src/scr_async_dyn.c +607 -0
  7. package/src/scr_bytes.c +1425 -0
  8. package/src/scr_bytes_io.c +161 -0
  9. package/src/scr_child.c +3587 -0
  10. package/src/scr_closure.c +214 -0
  11. package/src/scr_console.c +143 -0
  12. package/src/scr_cycle.c +218 -0
  13. package/src/scr_dc.c +805 -0
  14. package/src/scr_dgram.c +1007 -0
  15. package/src/scr_dyn_handle.c +154 -0
  16. package/src/scr_dyn_invoke.c +644 -0
  17. package/src/scr_error.c +332 -0
  18. package/src/scr_events.c +714 -0
  19. package/src/scr_events_emitter.c +699 -0
  20. package/src/scr_exception.c +242 -0
  21. package/src/scr_fetch.c +1130 -0
  22. package/src/scr_fetch_curl.c +654 -0
  23. package/src/scr_http.c +3482 -0
  24. package/src/scr_http2.c +3030 -0
  25. package/src/scr_inspect.c +803 -0
  26. package/src/scr_inspect_island.c +51 -0
  27. package/src/scr_island.c +9363 -0
  28. package/src/scr_json.c +2151 -0
  29. package/src/scr_lib.c +3612 -0
  30. package/src/scr_loop_epoll.c +241 -0
  31. package/src/scr_loop_kqueue.c +121 -0
  32. package/src/scr_loop_wsapoll.c +208 -0
  33. package/src/scr_map.c +591 -0
  34. package/src/scr_net.c +3017 -0
  35. package/src/scr_net_island.c +458 -0
  36. package/src/scr_number.c +115 -0
  37. package/src/scr_object.c +25 -0
  38. package/src/scr_path.c +1266 -0
  39. package/src/scr_platform.h +119 -0
  40. package/src/scr_readline.c +287 -0
  41. package/src/scr_regex.c +1080 -0
  42. package/src/scr_runtime.h +5046 -0
  43. package/src/scr_stream.c +2877 -0
  44. package/src/scr_string.c +1264 -0
  45. package/src/scr_symbol.c +132 -0
  46. package/src/scr_test.c +662 -0
  47. package/src/scr_tls.c +1520 -0
  48. package/src/scr_union.c +105 -0
  49. package/src/scr_url.c +911 -0
  50. package/src/scr_url_internal.h +29 -0
  51. package/src/scr_url_params.c +561 -0
  52. package/src/scr_watch.c +568 -0
  53. package/src/scr_web.c +1778 -0
  54. package/src/scr_win.c +76 -0
  55. package/src/scr_zlib.c +197 -0
  56. package/src/scr_zlib_island.c +15 -0
  57. package/vendor/README.md +52 -0
  58. package/vendor/curl/COPYRIGHT +534 -0
  59. package/vendor/curl/include/curl/curl.h +3214 -0
  60. package/vendor/curl/include/curl/curlver.h +79 -0
  61. package/vendor/curl/include/curl/easy.h +125 -0
  62. package/vendor/curl/include/curl/header.h +74 -0
  63. package/vendor/curl/include/curl/mprintf.h +52 -0
  64. package/vendor/curl/include/curl/multi.h +460 -0
  65. package/vendor/curl/include/curl/options.h +70 -0
  66. package/vendor/curl/include/curl/stdcheaders.h +35 -0
  67. package/vendor/curl/include/curl/system.h +508 -0
  68. package/vendor/curl/include/curl/typecheck-gcc.h +716 -0
  69. package/vendor/curl/include/curl/urlapi.h +149 -0
  70. package/vendor/curl/include/curl/websockets.h +84 -0
  71. package/vendor/mbedtls/LICENSE +553 -0
  72. package/vendor/mbedtls/include/CMakeLists.txt +22 -0
  73. package/vendor/mbedtls/include/mbedtls/aes.h +631 -0
  74. package/vendor/mbedtls/include/mbedtls/aria.h +343 -0
  75. package/vendor/mbedtls/include/mbedtls/asn1.h +642 -0
  76. package/vendor/mbedtls/include/mbedtls/asn1write.h +390 -0
  77. package/vendor/mbedtls/include/mbedtls/base64.h +82 -0
  78. package/vendor/mbedtls/include/mbedtls/bignum.h +1088 -0
  79. package/vendor/mbedtls/include/mbedtls/block_cipher.h +76 -0
  80. package/vendor/mbedtls/include/mbedtls/build_info.h +194 -0
  81. package/vendor/mbedtls/include/mbedtls/camellia.h +305 -0
  82. package/vendor/mbedtls/include/mbedtls/ccm.h +526 -0
  83. package/vendor/mbedtls/include/mbedtls/chacha20.h +209 -0
  84. package/vendor/mbedtls/include/mbedtls/chachapoly.h +351 -0
  85. package/vendor/mbedtls/include/mbedtls/check_config.h +1149 -0
  86. package/vendor/mbedtls/include/mbedtls/cipher.h +1250 -0
  87. package/vendor/mbedtls/include/mbedtls/cmac.h +246 -0
  88. package/vendor/mbedtls/include/mbedtls/compat-2.x.h +46 -0
  89. package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_crypto.h +578 -0
  90. package/vendor/mbedtls/include/mbedtls/config_adjust_legacy_from_psa.h +873 -0
  91. package/vendor/mbedtls/include/mbedtls/config_adjust_psa_from_legacy.h +359 -0
  92. package/vendor/mbedtls/include/mbedtls/config_adjust_psa_superset_legacy.h +145 -0
  93. package/vendor/mbedtls/include/mbedtls/config_adjust_ssl.h +91 -0
  94. package/vendor/mbedtls/include/mbedtls/config_adjust_x509.h +35 -0
  95. package/vendor/mbedtls/include/mbedtls/config_psa.h +61 -0
  96. package/vendor/mbedtls/include/mbedtls/constant_time.h +36 -0
  97. package/vendor/mbedtls/include/mbedtls/ctr_drbg.h +596 -0
  98. package/vendor/mbedtls/include/mbedtls/debug.h +156 -0
  99. package/vendor/mbedtls/include/mbedtls/des.h +385 -0
  100. package/vendor/mbedtls/include/mbedtls/dhm.h +972 -0
  101. package/vendor/mbedtls/include/mbedtls/ecdh.h +455 -0
  102. package/vendor/mbedtls/include/mbedtls/ecdsa.h +674 -0
  103. package/vendor/mbedtls/include/mbedtls/ecjpake.h +298 -0
  104. package/vendor/mbedtls/include/mbedtls/ecp.h +1517 -0
  105. package/vendor/mbedtls/include/mbedtls/entropy.h +274 -0
  106. package/vendor/mbedtls/include/mbedtls/error.h +201 -0
  107. package/vendor/mbedtls/include/mbedtls/gcm.h +387 -0
  108. package/vendor/mbedtls/include/mbedtls/hkdf.h +124 -0
  109. package/vendor/mbedtls/include/mbedtls/hmac_drbg.h +434 -0
  110. package/vendor/mbedtls/include/mbedtls/lms.h +440 -0
  111. package/vendor/mbedtls/include/mbedtls/mbedtls_config.h +4446 -0
  112. package/vendor/mbedtls/include/mbedtls/md.h +526 -0
  113. package/vendor/mbedtls/include/mbedtls/md5.h +190 -0
  114. package/vendor/mbedtls/include/mbedtls/memory_buffer_alloc.h +142 -0
  115. package/vendor/mbedtls/include/mbedtls/net_sockets.h +299 -0
  116. package/vendor/mbedtls/include/mbedtls/nist_kw.h +166 -0
  117. package/vendor/mbedtls/include/mbedtls/oid.h +727 -0
  118. package/vendor/mbedtls/include/mbedtls/pem.h +160 -0
  119. package/vendor/mbedtls/include/mbedtls/pk.h +1303 -0
  120. package/vendor/mbedtls/include/mbedtls/pkcs12.h +186 -0
  121. package/vendor/mbedtls/include/mbedtls/pkcs5.h +198 -0
  122. package/vendor/mbedtls/include/mbedtls/pkcs7.h +252 -0
  123. package/vendor/mbedtls/include/mbedtls/platform.h +516 -0
  124. package/vendor/mbedtls/include/mbedtls/platform_time.h +79 -0
  125. package/vendor/mbedtls/include/mbedtls/platform_util.h +247 -0
  126. package/vendor/mbedtls/include/mbedtls/poly1305.h +168 -0
  127. package/vendor/mbedtls/include/mbedtls/private_access.h +20 -0
  128. package/vendor/mbedtls/include/mbedtls/psa_util.h +207 -0
  129. package/vendor/mbedtls/include/mbedtls/ripemd160.h +136 -0
  130. package/vendor/mbedtls/include/mbedtls/rsa.h +1170 -0
  131. package/vendor/mbedtls/include/mbedtls/sha1.h +219 -0
  132. package/vendor/mbedtls/include/mbedtls/sha256.h +200 -0
  133. package/vendor/mbedtls/include/mbedtls/sha3.h +172 -0
  134. package/vendor/mbedtls/include/mbedtls/sha512.h +208 -0
  135. package/vendor/mbedtls/include/mbedtls/ssl.h +5887 -0
  136. package/vendor/mbedtls/include/mbedtls/ssl_cache.h +187 -0
  137. package/vendor/mbedtls/include/mbedtls/ssl_ciphersuites.h +482 -0
  138. package/vendor/mbedtls/include/mbedtls/ssl_cookie.h +106 -0
  139. package/vendor/mbedtls/include/mbedtls/ssl_ticket.h +199 -0
  140. package/vendor/mbedtls/include/mbedtls/threading.h +167 -0
  141. package/vendor/mbedtls/include/mbedtls/timing.h +94 -0
  142. package/vendor/mbedtls/include/mbedtls/version.h +78 -0
  143. package/vendor/mbedtls/include/mbedtls/x509.h +500 -0
  144. package/vendor/mbedtls/include/mbedtls/x509_crl.h +184 -0
  145. package/vendor/mbedtls/include/mbedtls/x509_crt.h +1208 -0
  146. package/vendor/mbedtls/include/mbedtls/x509_csr.h +382 -0
  147. package/vendor/mbedtls/include/psa/build_info.h +20 -0
  148. package/vendor/mbedtls/include/psa/crypto.h +4998 -0
  149. package/vendor/mbedtls/include/psa/crypto_adjust_auto_enabled.h +31 -0
  150. package/vendor/mbedtls/include/psa/crypto_adjust_config_dependencies.h +51 -0
  151. package/vendor/mbedtls/include/psa/crypto_adjust_config_key_pair_types.h +101 -0
  152. package/vendor/mbedtls/include/psa/crypto_adjust_config_synonyms.h +49 -0
  153. package/vendor/mbedtls/include/psa/crypto_builtin_composites.h +214 -0
  154. package/vendor/mbedtls/include/psa/crypto_builtin_key_derivation.h +118 -0
  155. package/vendor/mbedtls/include/psa/crypto_builtin_primitives.h +114 -0
  156. package/vendor/mbedtls/include/psa/crypto_compat.h +230 -0
  157. package/vendor/mbedtls/include/psa/crypto_config.h +145 -0
  158. package/vendor/mbedtls/include/psa/crypto_driver_common.h +44 -0
  159. package/vendor/mbedtls/include/psa/crypto_driver_contexts_composites.h +151 -0
  160. package/vendor/mbedtls/include/psa/crypto_driver_contexts_key_derivation.h +52 -0
  161. package/vendor/mbedtls/include/psa/crypto_driver_contexts_primitives.h +105 -0
  162. package/vendor/mbedtls/include/psa/crypto_extra.h +2145 -0
  163. package/vendor/mbedtls/include/psa/crypto_legacy.h +88 -0
  164. package/vendor/mbedtls/include/psa/crypto_platform.h +102 -0
  165. package/vendor/mbedtls/include/psa/crypto_se_driver.h +1383 -0
  166. package/vendor/mbedtls/include/psa/crypto_sizes.h +1319 -0
  167. package/vendor/mbedtls/include/psa/crypto_struct.h +527 -0
  168. package/vendor/mbedtls/include/psa/crypto_types.h +508 -0
  169. package/vendor/mbedtls/include/psa/crypto_values.h +2782 -0
  170. package/vendor/mbedtls/library/aes.c +2294 -0
  171. package/vendor/mbedtls/library/aesce.c +624 -0
  172. package/vendor/mbedtls/library/aesce.h +136 -0
  173. package/vendor/mbedtls/library/aesni.c +846 -0
  174. package/vendor/mbedtls/library/aesni.h +162 -0
  175. package/vendor/mbedtls/library/alignment.h +704 -0
  176. package/vendor/mbedtls/library/aria.c +969 -0
  177. package/vendor/mbedtls/library/asn1parse.c +468 -0
  178. package/vendor/mbedtls/library/asn1write.c +440 -0
  179. package/vendor/mbedtls/library/base64.c +322 -0
  180. package/vendor/mbedtls/library/base64_internal.h +45 -0
  181. package/vendor/mbedtls/library/bignum.c +2583 -0
  182. package/vendor/mbedtls/library/bignum_core.c +1240 -0
  183. package/vendor/mbedtls/library/bignum_core.h +872 -0
  184. package/vendor/mbedtls/library/bignum_core_invasive.h +38 -0
  185. package/vendor/mbedtls/library/bignum_internal.h +122 -0
  186. package/vendor/mbedtls/library/bignum_mod.c +394 -0
  187. package/vendor/mbedtls/library/bignum_mod.h +452 -0
  188. package/vendor/mbedtls/library/bignum_mod_raw.c +276 -0
  189. package/vendor/mbedtls/library/bignum_mod_raw.h +416 -0
  190. package/vendor/mbedtls/library/bignum_mod_raw_invasive.h +34 -0
  191. package/vendor/mbedtls/library/block_cipher.c +207 -0
  192. package/vendor/mbedtls/library/block_cipher_internal.h +99 -0
  193. package/vendor/mbedtls/library/bn_mul.h +1094 -0
  194. package/vendor/mbedtls/library/camellia.c +1058 -0
  195. package/vendor/mbedtls/library/ccm.c +777 -0
  196. package/vendor/mbedtls/library/chacha20.c +563 -0
  197. package/vendor/mbedtls/library/chacha20_internal.h +23 -0
  198. package/vendor/mbedtls/library/chachapoly.c +487 -0
  199. package/vendor/mbedtls/library/check_crypto_config.h +136 -0
  200. package/vendor/mbedtls/library/cipher.c +1712 -0
  201. package/vendor/mbedtls/library/cipher_invasive.h +28 -0
  202. package/vendor/mbedtls/library/cipher_wrap.c +2482 -0
  203. package/vendor/mbedtls/library/cipher_wrap.h +178 -0
  204. package/vendor/mbedtls/library/cmac.c +1067 -0
  205. package/vendor/mbedtls/library/common.h +487 -0
  206. package/vendor/mbedtls/library/constant_time.c +247 -0
  207. package/vendor/mbedtls/library/constant_time_impl.h +541 -0
  208. package/vendor/mbedtls/library/constant_time_internal.h +579 -0
  209. package/vendor/mbedtls/library/ctr.h +35 -0
  210. package/vendor/mbedtls/library/ctr_drbg.c +1016 -0
  211. package/vendor/mbedtls/library/debug.c +475 -0
  212. package/vendor/mbedtls/library/debug_internal.h +185 -0
  213. package/vendor/mbedtls/library/des.c +1042 -0
  214. package/vendor/mbedtls/library/dhm.c +700 -0
  215. package/vendor/mbedtls/library/ecdh.c +696 -0
  216. package/vendor/mbedtls/library/ecdsa.c +858 -0
  217. package/vendor/mbedtls/library/ecjpake.c +1216 -0
  218. package/vendor/mbedtls/library/ecp.c +3674 -0
  219. package/vendor/mbedtls/library/ecp_curves.c +6125 -0
  220. package/vendor/mbedtls/library/ecp_curves_new.c +9 -0
  221. package/vendor/mbedtls/library/ecp_internal_alt.h +287 -0
  222. package/vendor/mbedtls/library/ecp_invasive.h +305 -0
  223. package/vendor/mbedtls/library/entropy.c +680 -0
  224. package/vendor/mbedtls/library/entropy_poll.c +233 -0
  225. package/vendor/mbedtls/library/entropy_poll.h +64 -0
  226. package/vendor/mbedtls/library/error.c +878 -0
  227. package/vendor/mbedtls/library/gcm.c +1330 -0
  228. package/vendor/mbedtls/library/hkdf.c +161 -0
  229. package/vendor/mbedtls/library/hmac_drbg.c +633 -0
  230. package/vendor/mbedtls/library/lmots.c +789 -0
  231. package/vendor/mbedtls/library/lmots.h +288 -0
  232. package/vendor/mbedtls/library/lms.c +778 -0
  233. package/vendor/mbedtls/library/md.c +1108 -0
  234. package/vendor/mbedtls/library/md5.c +426 -0
  235. package/vendor/mbedtls/library/md_psa.h +26 -0
  236. package/vendor/mbedtls/library/md_wrap.h +46 -0
  237. package/vendor/mbedtls/library/memory_buffer_alloc.c +751 -0
  238. package/vendor/mbedtls/library/mps_common.h +181 -0
  239. package/vendor/mbedtls/library/mps_error.h +89 -0
  240. package/vendor/mbedtls/library/mps_reader.c +538 -0
  241. package/vendor/mbedtls/library/mps_reader.h +366 -0
  242. package/vendor/mbedtls/library/mps_trace.c +112 -0
  243. package/vendor/mbedtls/library/mps_trace.h +154 -0
  244. package/vendor/mbedtls/library/net_sockets.c +694 -0
  245. package/vendor/mbedtls/library/nist_kw.c +729 -0
  246. package/vendor/mbedtls/library/oid.c +1166 -0
  247. package/vendor/mbedtls/library/padlock.c +157 -0
  248. package/vendor/mbedtls/library/padlock.h +111 -0
  249. package/vendor/mbedtls/library/pem.c +554 -0
  250. package/vendor/mbedtls/library/pk.c +1602 -0
  251. package/vendor/mbedtls/library/pk_ecc.c +261 -0
  252. package/vendor/mbedtls/library/pk_internal.h +241 -0
  253. package/vendor/mbedtls/library/pk_wrap.c +1618 -0
  254. package/vendor/mbedtls/library/pk_wrap.h +138 -0
  255. package/vendor/mbedtls/library/pkcs12.c +437 -0
  256. package/vendor/mbedtls/library/pkcs5.c +500 -0
  257. package/vendor/mbedtls/library/pkcs7.c +787 -0
  258. package/vendor/mbedtls/library/pkparse.c +1392 -0
  259. package/vendor/mbedtls/library/pkwrite.c +631 -0
  260. package/vendor/mbedtls/library/pkwrite.h +121 -0
  261. package/vendor/mbedtls/library/platform.c +402 -0
  262. package/vendor/mbedtls/library/platform_util.c +258 -0
  263. package/vendor/mbedtls/library/poly1305.c +492 -0
  264. package/vendor/mbedtls/library/psa_crypto.c +9532 -0
  265. package/vendor/mbedtls/library/psa_crypto_aead.c +646 -0
  266. package/vendor/mbedtls/library/psa_crypto_aead.h +499 -0
  267. package/vendor/mbedtls/library/psa_crypto_cipher.c +747 -0
  268. package/vendor/mbedtls/library/psa_crypto_cipher.h +316 -0
  269. package/vendor/mbedtls/library/psa_crypto_client.c +22 -0
  270. package/vendor/mbedtls/library/psa_crypto_core.h +983 -0
  271. package/vendor/mbedtls/library/psa_crypto_core_common.h +52 -0
  272. package/vendor/mbedtls/library/psa_crypto_driver_wrappers.h +2896 -0
  273. package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.c +256 -0
  274. package/vendor/mbedtls/library/psa_crypto_driver_wrappers_no_static.h +31 -0
  275. package/vendor/mbedtls/library/psa_crypto_ecp.c +594 -0
  276. package/vendor/mbedtls/library/psa_crypto_ecp.h +267 -0
  277. package/vendor/mbedtls/library/psa_crypto_ffdh.c +361 -0
  278. package/vendor/mbedtls/library/psa_crypto_ffdh.h +131 -0
  279. package/vendor/mbedtls/library/psa_crypto_hash.c +470 -0
  280. package/vendor/mbedtls/library/psa_crypto_hash.h +211 -0
  281. package/vendor/mbedtls/library/psa_crypto_invasive.h +92 -0
  282. package/vendor/mbedtls/library/psa_crypto_its.h +131 -0
  283. package/vendor/mbedtls/library/psa_crypto_mac.c +505 -0
  284. package/vendor/mbedtls/library/psa_crypto_mac.h +264 -0
  285. package/vendor/mbedtls/library/psa_crypto_pake.c +571 -0
  286. package/vendor/mbedtls/library/psa_crypto_pake.h +159 -0
  287. package/vendor/mbedtls/library/psa_crypto_random.c +181 -0
  288. package/vendor/mbedtls/library/psa_crypto_random.h +72 -0
  289. package/vendor/mbedtls/library/psa_crypto_random_impl.h +200 -0
  290. package/vendor/mbedtls/library/psa_crypto_rsa.c +714 -0
  291. package/vendor/mbedtls/library/psa_crypto_rsa.h +321 -0
  292. package/vendor/mbedtls/library/psa_crypto_se.c +373 -0
  293. package/vendor/mbedtls/library/psa_crypto_se.h +192 -0
  294. package/vendor/mbedtls/library/psa_crypto_slot_management.c +1137 -0
  295. package/vendor/mbedtls/library/psa_crypto_slot_management.h +344 -0
  296. package/vendor/mbedtls/library/psa_crypto_storage.c +481 -0
  297. package/vendor/mbedtls/library/psa_crypto_storage.h +392 -0
  298. package/vendor/mbedtls/library/psa_its_file.c +254 -0
  299. package/vendor/mbedtls/library/psa_util.c +614 -0
  300. package/vendor/mbedtls/library/psa_util_internal.h +100 -0
  301. package/vendor/mbedtls/library/ripemd160.c +490 -0
  302. package/vendor/mbedtls/library/rsa.c +3121 -0
  303. package/vendor/mbedtls/library/rsa_alt_helpers.c +455 -0
  304. package/vendor/mbedtls/library/rsa_alt_helpers.h +209 -0
  305. package/vendor/mbedtls/library/rsa_internal.h +188 -0
  306. package/vendor/mbedtls/library/sha1.c +480 -0
  307. package/vendor/mbedtls/library/sha256.c +983 -0
  308. package/vendor/mbedtls/library/sha3.c +721 -0
  309. package/vendor/mbedtls/library/sha512.c +1115 -0
  310. package/vendor/mbedtls/library/ssl_cache.c +410 -0
  311. package/vendor/mbedtls/library/ssl_ciphersuites.c +2050 -0
  312. package/vendor/mbedtls/library/ssl_ciphersuites_internal.h +154 -0
  313. package/vendor/mbedtls/library/ssl_client.c +1023 -0
  314. package/vendor/mbedtls/library/ssl_client.h +22 -0
  315. package/vendor/mbedtls/library/ssl_cookie.c +384 -0
  316. package/vendor/mbedtls/library/ssl_debug_helpers.h +85 -0
  317. package/vendor/mbedtls/library/ssl_debug_helpers_generated.c +251 -0
  318. package/vendor/mbedtls/library/ssl_misc.h +3198 -0
  319. package/vendor/mbedtls/library/ssl_msg.c +6619 -0
  320. package/vendor/mbedtls/library/ssl_ticket.c +556 -0
  321. package/vendor/mbedtls/library/ssl_tls.c +10234 -0
  322. package/vendor/mbedtls/library/ssl_tls12_client.c +3688 -0
  323. package/vendor/mbedtls/library/ssl_tls12_server.c +4311 -0
  324. package/vendor/mbedtls/library/ssl_tls13_client.c +3208 -0
  325. package/vendor/mbedtls/library/ssl_tls13_generic.c +1793 -0
  326. package/vendor/mbedtls/library/ssl_tls13_invasive.h +23 -0
  327. package/vendor/mbedtls/library/ssl_tls13_keys.c +1918 -0
  328. package/vendor/mbedtls/library/ssl_tls13_keys.h +668 -0
  329. package/vendor/mbedtls/library/ssl_tls13_server.c +3624 -0
  330. package/vendor/mbedtls/library/threading.c +193 -0
  331. package/vendor/mbedtls/library/threading_internal.h +28 -0
  332. package/vendor/mbedtls/library/timing.c +152 -0
  333. package/vendor/mbedtls/library/version.c +32 -0
  334. package/vendor/mbedtls/library/version_features.c +856 -0
  335. package/vendor/mbedtls/library/x509.c +1776 -0
  336. package/vendor/mbedtls/library/x509_create.c +570 -0
  337. package/vendor/mbedtls/library/x509_crl.c +708 -0
  338. package/vendor/mbedtls/library/x509_crt.c +3311 -0
  339. package/vendor/mbedtls/library/x509_csr.c +648 -0
  340. package/vendor/mbedtls/library/x509_internal.h +101 -0
  341. package/vendor/mbedtls/library/x509write.c +174 -0
  342. package/vendor/mbedtls/library/x509write_crt.c +688 -0
  343. package/vendor/mbedtls/library/x509write_csr.c +336 -0
  344. package/vendor/quickjs-ng/CMakeLists.txt +566 -0
  345. package/vendor/quickjs-ng/LICENSE +24 -0
  346. package/vendor/quickjs-ng/README.md +24 -0
  347. package/vendor/quickjs-ng/api-test.c +1195 -0
  348. package/vendor/quickjs-ng/builtin-array-fromasync.h +119 -0
  349. package/vendor/quickjs-ng/builtin-iterator-zip-keyed.h +332 -0
  350. package/vendor/quickjs-ng/builtin-iterator-zip.h +337 -0
  351. package/vendor/quickjs-ng/cutils.h +1998 -0
  352. package/vendor/quickjs-ng/dtoa.c +1619 -0
  353. package/vendor/quickjs-ng/dtoa.h +87 -0
  354. package/vendor/quickjs-ng/gen/function_source.c +81 -0
  355. package/vendor/quickjs-ng/gen/hello.c +53 -0
  356. package/vendor/quickjs-ng/gen/hello_module.c +106 -0
  357. package/vendor/quickjs-ng/gen/repl.c +3036 -0
  358. package/vendor/quickjs-ng/gen/standalone.c +323 -0
  359. package/vendor/quickjs-ng/gen/test_fib.c +81 -0
  360. package/vendor/quickjs-ng/libregexp-opcode.h +73 -0
  361. package/vendor/quickjs-ng/libregexp.c +3474 -0
  362. package/vendor/quickjs-ng/libregexp.h +101 -0
  363. package/vendor/quickjs-ng/libunicode-table.h +5173 -0
  364. package/vendor/quickjs-ng/libunicode.c +2069 -0
  365. package/vendor/quickjs-ng/libunicode.h +172 -0
  366. package/vendor/quickjs-ng/list.h +107 -0
  367. package/vendor/quickjs-ng/lre-test.c +52 -0
  368. package/vendor/quickjs-ng/qjs.c +762 -0
  369. package/vendor/quickjs-ng/qjsc.c +673 -0
  370. package/vendor/quickjs-ng/quickjs-atom.h +280 -0
  371. package/vendor/quickjs-ng/quickjs-c-atomics.h +54 -0
  372. package/vendor/quickjs-ng/quickjs-libc.c +5037 -0
  373. package/vendor/quickjs-ng/quickjs-libc.h +87 -0
  374. package/vendor/quickjs-ng/quickjs-opcode.h +377 -0
  375. package/vendor/quickjs-ng/quickjs.c +64041 -0
  376. package/vendor/quickjs-ng/quickjs.h +1447 -0
  377. package/vendor/quickjs-ng/run-test262.c +2374 -0
  378. package/vendor/quickjs-ng/unicode_gen.c +3121 -0
  379. package/vendor/quickjs-ng/unicode_gen_def.h +310 -0
  380. package/vendor/ryu/LICENSE-Boost +23 -0
  381. package/vendor/ryu/common.h +114 -0
  382. package/vendor/ryu/d2s.c +509 -0
  383. package/vendor/ryu/d2s_full_table.h +367 -0
  384. package/vendor/ryu/d2s_intrinsics.h +357 -0
  385. package/vendor/ryu/d2s_small_table.h +186 -0
  386. package/vendor/ryu/digit_table.h +35 -0
  387. package/vendor/ryu/ryu.h +46 -0
  388. package/vendor/zlib/LICENSE +22 -0
  389. package/vendor/zlib/adler32.c +164 -0
  390. package/vendor/zlib/compress.c +75 -0
  391. package/vendor/zlib/crc32.c +1049 -0
  392. package/vendor/zlib/crc32.h +9446 -0
  393. package/vendor/zlib/deflate.c +2139 -0
  394. package/vendor/zlib/deflate.h +377 -0
  395. package/vendor/zlib/gzclose.c +23 -0
  396. package/vendor/zlib/gzguts.h +214 -0
  397. package/vendor/zlib/gzlib.c +582 -0
  398. package/vendor/zlib/gzread.c +602 -0
  399. package/vendor/zlib/gzwrite.c +631 -0
  400. package/vendor/zlib/infback.c +628 -0
  401. package/vendor/zlib/inffast.c +320 -0
  402. package/vendor/zlib/inffast.h +11 -0
  403. package/vendor/zlib/inffixed.h +94 -0
  404. package/vendor/zlib/inflate.c +1526 -0
  405. package/vendor/zlib/inflate.h +126 -0
  406. package/vendor/zlib/inftrees.c +299 -0
  407. package/vendor/zlib/inftrees.h +62 -0
  408. package/vendor/zlib/trees.c +1117 -0
  409. package/vendor/zlib/trees.h +128 -0
  410. package/vendor/zlib/uncompr.c +85 -0
  411. package/vendor/zlib/zconf.h +543 -0
  412. package/vendor/zlib/zlib.h +1938 -0
  413. package/vendor/zlib/zutil.c +299 -0
  414. package/vendor/zlib/zutil.h +254 -0
  415. package/README.md +0 -3
  416. package/index.js +0 -2
@@ -0,0 +1,392 @@
1
+ /**
2
+ * \file psa_crypto_storage.h
3
+ *
4
+ * \brief PSA cryptography module: Mbed TLS key storage
5
+ */
6
+ /*
7
+ * Copyright The Mbed TLS Contributors
8
+ * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
9
+ */
10
+
11
+ #ifndef PSA_CRYPTO_STORAGE_H
12
+ #define PSA_CRYPTO_STORAGE_H
13
+
14
+ #ifdef __cplusplus
15
+ extern "C" {
16
+ #endif
17
+
18
+ #include "psa/crypto.h"
19
+ #include "psa/crypto_se_driver.h"
20
+
21
+ #include <stdint.h>
22
+ #include <string.h>
23
+
24
+ /* Limit the maximum key size in storage. */
25
+ #if defined(MBEDTLS_PSA_STATIC_KEY_SLOTS)
26
+ /* Reflect the maximum size for the key buffer. */
27
+ #define PSA_CRYPTO_MAX_STORAGE_SIZE (MBEDTLS_PSA_STATIC_KEY_SLOT_BUFFER_SIZE)
28
+ #else
29
+ /* Just set an upper boundary but it should have no effect since the key size
30
+ * is limited in memory. */
31
+ #define PSA_CRYPTO_MAX_STORAGE_SIZE (PSA_BITS_TO_BYTES(PSA_MAX_KEY_BITS))
32
+ #endif
33
+
34
+ /* Sanity check: a file size must fit in 32 bits. Allow a generous
35
+ * 64kB of metadata. */
36
+ #if PSA_CRYPTO_MAX_STORAGE_SIZE > 0xffff0000
37
+ #error "PSA_CRYPTO_MAX_STORAGE_SIZE > 0xffff0000"
38
+ #endif
39
+
40
+ /** The maximum permitted persistent slot number.
41
+ *
42
+ * In Mbed Crypto 0.1.0b:
43
+ * - Using the file backend, all key ids are ok except 0.
44
+ * - Using the ITS backend, all key ids are ok except 0xFFFFFF52
45
+ * (#PSA_CRYPTO_ITS_RANDOM_SEED_UID) for which the file contains the
46
+ * device's random seed (if this feature is enabled).
47
+ * - Only key ids from 1 to #MBEDTLS_PSA_KEY_SLOT_COUNT are actually used.
48
+ *
49
+ * Since we need to preserve the random seed, avoid using that key slot.
50
+ * Reserve a whole range of key slots just in case something else comes up.
51
+ *
52
+ * This limitation will probably become moot when we implement client
53
+ * separation for key storage.
54
+ */
55
+ #define PSA_MAX_PERSISTENT_KEY_IDENTIFIER PSA_KEY_ID_VENDOR_MAX
56
+
57
+ /**
58
+ * \brief Checks if persistent data is stored for the given key slot number
59
+ *
60
+ * This function checks if any key data or metadata exists for the key slot in
61
+ * the persistent storage.
62
+ *
63
+ * \param key Persistent identifier to check.
64
+ *
65
+ * \retval 0
66
+ * No persistent data present for slot number
67
+ * \retval 1
68
+ * Persistent data present for slot number
69
+ */
70
+ int psa_is_key_present_in_storage(const mbedtls_svc_key_id_t key);
71
+
72
+ /**
73
+ * \brief Format key data and metadata and save to a location for given key
74
+ * slot.
75
+ *
76
+ * This function formats the key data and metadata and saves it to a
77
+ * persistent storage backend. The storage location corresponding to the
78
+ * key slot must be empty, otherwise this function will fail. This function
79
+ * should be called after loading the key into an internal slot to ensure the
80
+ * persistent key is not saved into a storage location corresponding to an
81
+ * already occupied non-persistent key, as well as ensuring the key data is
82
+ * validated.
83
+ *
84
+ * Note: This function will only succeed for key buffers which are not
85
+ * empty. If passed a NULL pointer or zero-length, the function will fail
86
+ * with #PSA_ERROR_INVALID_ARGUMENT.
87
+ *
88
+ * \param[in] attr The attributes of the key to save.
89
+ * The key identifier field in the attributes
90
+ * determines the key's location.
91
+ * \param[in] data Buffer containing the key data.
92
+ * \param data_length The number of bytes that make up the key data.
93
+ *
94
+ * \retval #PSA_SUCCESS \emptydescription
95
+ * \retval #PSA_ERROR_INVALID_ARGUMENT \emptydescription
96
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY \emptydescription
97
+ * \retval #PSA_ERROR_INSUFFICIENT_STORAGE \emptydescription
98
+ * \retval #PSA_ERROR_STORAGE_FAILURE \emptydescription
99
+ * \retval #PSA_ERROR_ALREADY_EXISTS \emptydescription
100
+ * \retval #PSA_ERROR_DATA_INVALID \emptydescription
101
+ * \retval #PSA_ERROR_DATA_CORRUPT \emptydescription
102
+ */
103
+ psa_status_t psa_save_persistent_key(const psa_key_attributes_t *attr,
104
+ const uint8_t *data,
105
+ const size_t data_length);
106
+
107
+ /**
108
+ * \brief Parses key data and metadata and load persistent key for given
109
+ * key slot number.
110
+ *
111
+ * This function reads from a storage backend, parses the key data and
112
+ * metadata and writes them to the appropriate output parameters.
113
+ *
114
+ * Note: This function allocates a buffer and returns a pointer to it through
115
+ * the data parameter. On successful return, the pointer is guaranteed to be
116
+ * valid and the buffer contains at least one byte of data.
117
+ * psa_free_persistent_key_data() must be called on the data buffer
118
+ * afterwards to zeroize and free this buffer.
119
+ *
120
+ * \param[in,out] attr On input, the key identifier field identifies
121
+ * the key to load. Other fields are ignored.
122
+ * On success, the attribute structure contains
123
+ * the key metadata that was loaded from storage.
124
+ * \param[out] data Pointer to an allocated key data buffer on return.
125
+ * \param[out] data_length The number of bytes that make up the key data.
126
+ *
127
+ * \retval #PSA_SUCCESS \emptydescription
128
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY \emptydescription
129
+ * \retval #PSA_ERROR_DATA_INVALID \emptydescription
130
+ * \retval #PSA_ERROR_DATA_CORRUPT \emptydescription
131
+ * \retval #PSA_ERROR_DOES_NOT_EXIST \emptydescription
132
+ */
133
+ psa_status_t psa_load_persistent_key(psa_key_attributes_t *attr,
134
+ uint8_t **data,
135
+ size_t *data_length);
136
+
137
+ /**
138
+ * \brief Remove persistent data for the given key slot number.
139
+ *
140
+ * \param key Persistent identifier of the key to remove
141
+ * from persistent storage.
142
+ *
143
+ * \retval #PSA_SUCCESS
144
+ * The key was successfully removed,
145
+ * or the key did not exist.
146
+ * \retval #PSA_ERROR_DATA_INVALID \emptydescription
147
+ */
148
+ psa_status_t psa_destroy_persistent_key(const mbedtls_svc_key_id_t key);
149
+
150
+ /**
151
+ * \brief Free the temporary buffer allocated by psa_load_persistent_key().
152
+ *
153
+ * This function must be called at some point after psa_load_persistent_key()
154
+ * to zeroize and free the memory allocated to the buffer in that function.
155
+ *
156
+ * \param key_data Buffer for the key data.
157
+ * \param key_data_length Size of the key data buffer.
158
+ *
159
+ */
160
+ void psa_free_persistent_key_data(uint8_t *key_data, size_t key_data_length);
161
+
162
+ /**
163
+ * \brief Formats key data and metadata for persistent storage
164
+ *
165
+ * \param[in] data Buffer containing the key data.
166
+ * \param data_length Length of the key data buffer.
167
+ * \param[in] attr The core attributes of the key.
168
+ * \param[out] storage_data Output buffer for the formatted data.
169
+ *
170
+ */
171
+ void psa_format_key_data_for_storage(const uint8_t *data,
172
+ const size_t data_length,
173
+ const psa_key_attributes_t *attr,
174
+ uint8_t *storage_data);
175
+
176
+ /**
177
+ * \brief Parses persistent storage data into key data and metadata
178
+ *
179
+ * \param[in] storage_data Buffer for the storage data.
180
+ * \param storage_data_length Length of the storage data buffer
181
+ * \param[out] key_data On output, pointer to a newly allocated buffer
182
+ * containing the key data. This must be freed
183
+ * using psa_free_persistent_key_data()
184
+ * \param[out] key_data_length Length of the key data buffer
185
+ * \param[out] attr On success, the attribute structure is filled
186
+ * with the loaded key metadata.
187
+ *
188
+ * \retval #PSA_SUCCESS \emptydescription
189
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY \emptydescription
190
+ * \retval #PSA_ERROR_DATA_INVALID \emptydescription
191
+ */
192
+ psa_status_t psa_parse_key_data_from_storage(const uint8_t *storage_data,
193
+ size_t storage_data_length,
194
+ uint8_t **key_data,
195
+ size_t *key_data_length,
196
+ psa_key_attributes_t *attr);
197
+
198
+ #if defined(MBEDTLS_PSA_CRYPTO_SE_C)
199
+ /** This symbol is defined if transaction support is required. */
200
+ #define PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS 1
201
+ #endif
202
+
203
+ #if defined(PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS)
204
+
205
+ /** The type of transaction that is in progress.
206
+ */
207
+ /* This is an integer type rather than an enum for two reasons: to support
208
+ * unknown values when loading a transaction file, and to ensure that the
209
+ * type has a known size.
210
+ */
211
+ typedef uint16_t psa_crypto_transaction_type_t;
212
+
213
+ /** No transaction is in progress.
214
+ *
215
+ * This has the value 0, so zero-initialization sets a transaction's type to
216
+ * this value.
217
+ */
218
+ #define PSA_CRYPTO_TRANSACTION_NONE ((psa_crypto_transaction_type_t) 0x0000)
219
+
220
+ /** A key creation transaction.
221
+ *
222
+ * This is only used for keys in an external cryptoprocessor (secure element).
223
+ * Keys in RAM or in internal storage are created atomically in storage
224
+ * (simple file creation), so they do not need a transaction mechanism.
225
+ */
226
+ #define PSA_CRYPTO_TRANSACTION_CREATE_KEY ((psa_crypto_transaction_type_t) 0x0001)
227
+
228
+ /** A key destruction transaction.
229
+ *
230
+ * This is only used for keys in an external cryptoprocessor (secure element).
231
+ * Keys in RAM or in internal storage are destroyed atomically in storage
232
+ * (simple file deletion), so they do not need a transaction mechanism.
233
+ */
234
+ #define PSA_CRYPTO_TRANSACTION_DESTROY_KEY ((psa_crypto_transaction_type_t) 0x0002)
235
+
236
+ /** Transaction data.
237
+ *
238
+ * This type is designed to be serialized by writing the memory representation
239
+ * and reading it back on the same device.
240
+ *
241
+ * \note The transaction mechanism is not thread-safe. There can only be one
242
+ * single active transaction at a time.
243
+ * The transaction object is #psa_crypto_transaction.
244
+ *
245
+ * \note If an API call starts a transaction, it must complete this transaction
246
+ * before returning to the application.
247
+ *
248
+ * The lifetime of a transaction is the following (note that only one
249
+ * transaction may be active at a time):
250
+ *
251
+ * -# Call psa_crypto_prepare_transaction() to initialize the transaction
252
+ * object in memory and declare the type of transaction that is starting.
253
+ * -# Fill in the type-specific fields of #psa_crypto_transaction.
254
+ * -# Call psa_crypto_save_transaction() to start the transaction. This
255
+ * saves the transaction data to internal storage.
256
+ * -# Perform the work of the transaction by modifying files, contacting
257
+ * external entities, or whatever needs doing. Note that the transaction
258
+ * may be interrupted by a power failure, so you need to have a way
259
+ * recover from interruptions either by undoing what has been done
260
+ * so far or by resuming where you left off.
261
+ * -# If there are intermediate stages in the transaction, update
262
+ * the fields of #psa_crypto_transaction and call
263
+ * psa_crypto_save_transaction() again when each stage is reached.
264
+ * -# When the transaction is over, call psa_crypto_stop_transaction() to
265
+ * remove the transaction data in storage and in memory.
266
+ *
267
+ * If the system crashes while a transaction is in progress, psa_crypto_init()
268
+ * calls psa_crypto_load_transaction() and takes care of completing or
269
+ * rewinding the transaction. This is done in psa_crypto_recover_transaction()
270
+ * in psa_crypto.c. If you add a new type of transaction, be
271
+ * sure to add code for it in psa_crypto_recover_transaction().
272
+ */
273
+ typedef union {
274
+ /* Each element of this union must have the following properties
275
+ * to facilitate serialization and deserialization:
276
+ *
277
+ * - The element is a struct.
278
+ * - The first field of the struct is `psa_crypto_transaction_type_t type`.
279
+ * - Elements of the struct are arranged such a way that there is
280
+ * no padding.
281
+ */
282
+ struct psa_crypto_transaction_unknown_s {
283
+ psa_crypto_transaction_type_t type;
284
+ uint16_t unused1;
285
+ uint32_t unused2;
286
+ uint64_t unused3;
287
+ uint64_t unused4;
288
+ } unknown;
289
+ /* ::type is #PSA_CRYPTO_TRANSACTION_CREATE_KEY or
290
+ * #PSA_CRYPTO_TRANSACTION_DESTROY_KEY. */
291
+ struct psa_crypto_transaction_key_s {
292
+ psa_crypto_transaction_type_t type;
293
+ uint16_t unused1;
294
+ psa_key_lifetime_t lifetime;
295
+ psa_key_slot_number_t slot;
296
+ mbedtls_svc_key_id_t id;
297
+ } key;
298
+ } psa_crypto_transaction_t;
299
+
300
+ /** The single active transaction.
301
+ */
302
+ extern psa_crypto_transaction_t psa_crypto_transaction;
303
+
304
+ /** Prepare for a transaction.
305
+ *
306
+ * There must not be an ongoing transaction.
307
+ *
308
+ * \param type The type of transaction to start.
309
+ */
310
+ static inline void psa_crypto_prepare_transaction(
311
+ psa_crypto_transaction_type_t type)
312
+ {
313
+ psa_crypto_transaction.unknown.type = type;
314
+ }
315
+
316
+ /** Save the transaction data to storage.
317
+ *
318
+ * You may call this function multiple times during a transaction to
319
+ * atomically update the transaction state.
320
+ *
321
+ * \retval #PSA_SUCCESS \emptydescription
322
+ * \retval #PSA_ERROR_DATA_CORRUPT \emptydescription
323
+ * \retval #PSA_ERROR_INSUFFICIENT_STORAGE \emptydescription
324
+ * \retval #PSA_ERROR_STORAGE_FAILURE \emptydescription
325
+ */
326
+ psa_status_t psa_crypto_save_transaction(void);
327
+
328
+ /** Load the transaction data from storage, if any.
329
+ *
330
+ * This function is meant to be called from psa_crypto_init() to recover
331
+ * in case a transaction was interrupted by a system crash.
332
+ *
333
+ * \retval #PSA_SUCCESS
334
+ * The data about the ongoing transaction has been loaded to
335
+ * #psa_crypto_transaction.
336
+ * \retval #PSA_ERROR_DOES_NOT_EXIST
337
+ * There is no ongoing transaction.
338
+ * \retval #PSA_ERROR_STORAGE_FAILURE \emptydescription
339
+ * \retval #PSA_ERROR_DATA_INVALID \emptydescription
340
+ * \retval #PSA_ERROR_DATA_CORRUPT \emptydescription
341
+ */
342
+ psa_status_t psa_crypto_load_transaction(void);
343
+
344
+ /** Indicate that the current transaction is finished.
345
+ *
346
+ * Call this function at the very end of transaction processing.
347
+ * This function does not "commit" or "abort" the transaction: the storage
348
+ * subsystem has no concept of "commit" and "abort", just saving and
349
+ * removing the transaction information in storage.
350
+ *
351
+ * This function erases the transaction data in storage (if any) and
352
+ * resets the transaction data in memory.
353
+ *
354
+ * \retval #PSA_SUCCESS
355
+ * There was transaction data in storage.
356
+ * \retval #PSA_ERROR_DOES_NOT_EXIST
357
+ * There was no transaction data in storage.
358
+ * \retval #PSA_ERROR_STORAGE_FAILURE
359
+ * It was impossible to determine whether there was transaction data
360
+ * in storage, or the transaction data could not be erased.
361
+ */
362
+ psa_status_t psa_crypto_stop_transaction(void);
363
+
364
+ /** The ITS file identifier for the transaction data.
365
+ *
366
+ * 0xffffffNN = special file; 0x74 = 't' for transaction.
367
+ */
368
+ #define PSA_CRYPTO_ITS_TRANSACTION_UID ((psa_key_id_t) 0xffffff74)
369
+
370
+ #endif /* PSA_CRYPTO_STORAGE_HAS_TRANSACTIONS */
371
+
372
+ #if defined(MBEDTLS_PSA_INJECT_ENTROPY)
373
+ /** Backend side of mbedtls_psa_inject_entropy().
374
+ *
375
+ * This function stores the supplied data into the entropy seed file.
376
+ *
377
+ * \retval #PSA_SUCCESS
378
+ * Success
379
+ * \retval #PSA_ERROR_STORAGE_FAILURE \emptydescription
380
+ * \retval #PSA_ERROR_INSUFFICIENT_STORAGE \emptydescription
381
+ * \retval #PSA_ERROR_NOT_PERMITTED
382
+ * The entropy seed file already exists.
383
+ */
384
+ psa_status_t mbedtls_psa_storage_inject_entropy(const unsigned char *seed,
385
+ size_t seed_size);
386
+ #endif /* MBEDTLS_PSA_INJECT_ENTROPY */
387
+
388
+ #ifdef __cplusplus
389
+ }
390
+ #endif
391
+
392
+ #endif /* PSA_CRYPTO_STORAGE_H */
@@ -0,0 +1,254 @@
1
+ /*
2
+ * PSA ITS simulator over stdio files.
3
+ */
4
+ /*
5
+ * Copyright The Mbed TLS Contributors
6
+ * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
7
+ */
8
+
9
+ #include "common.h"
10
+
11
+ #if defined(MBEDTLS_PSA_ITS_FILE_C)
12
+
13
+ #include "mbedtls/platform.h"
14
+
15
+ #if defined(_WIN32)
16
+ #include <windows.h>
17
+ #endif
18
+
19
+ #include "psa_crypto_its.h"
20
+
21
+ #include <limits.h>
22
+ #include <stdint.h>
23
+ #include <stdio.h>
24
+ #include <string.h>
25
+
26
+ #if !defined(PSA_ITS_STORAGE_PREFIX)
27
+ #define PSA_ITS_STORAGE_PREFIX ""
28
+ #endif
29
+
30
+ #define PSA_ITS_STORAGE_FILENAME_PATTERN "%08x%08x"
31
+ #define PSA_ITS_STORAGE_SUFFIX ".psa_its"
32
+ #define PSA_ITS_STORAGE_FILENAME_LENGTH \
33
+ (sizeof(PSA_ITS_STORAGE_PREFIX) - 1 + /*prefix without terminating 0*/ \
34
+ 16 + /*UID (64-bit number in hex)*/ \
35
+ sizeof(PSA_ITS_STORAGE_SUFFIX) - 1 + /*suffix without terminating 0*/ \
36
+ 1 /*terminating null byte*/)
37
+ #define PSA_ITS_STORAGE_TEMP \
38
+ PSA_ITS_STORAGE_PREFIX "tempfile" PSA_ITS_STORAGE_SUFFIX
39
+
40
+ /* The maximum value of psa_storage_info_t.size */
41
+ #define PSA_ITS_MAX_SIZE 0xffffffff
42
+
43
+ #define PSA_ITS_MAGIC_STRING "PSA\0ITS\0"
44
+ #define PSA_ITS_MAGIC_LENGTH 8
45
+
46
+ /* As rename fails on Windows if the new filepath already exists,
47
+ * use MoveFileExA with the MOVEFILE_REPLACE_EXISTING flag instead.
48
+ * Returns 0 on success, nonzero on failure. */
49
+ #if defined(_WIN32)
50
+ #define rename_replace_existing(oldpath, newpath) \
51
+ (!MoveFileExA(oldpath, newpath, MOVEFILE_REPLACE_EXISTING))
52
+ #else
53
+ #define rename_replace_existing(oldpath, newpath) rename(oldpath, newpath)
54
+ #endif
55
+
56
+ typedef struct {
57
+ uint8_t magic[PSA_ITS_MAGIC_LENGTH];
58
+ uint8_t size[sizeof(uint32_t)];
59
+ uint8_t flags[sizeof(psa_storage_create_flags_t)];
60
+ } psa_its_file_header_t;
61
+
62
+ static void psa_its_fill_filename(psa_storage_uid_t uid, char *filename)
63
+ {
64
+ /* Break up the UID into two 32-bit pieces so as not to rely on
65
+ * long long support in snprintf. */
66
+ mbedtls_snprintf(filename, PSA_ITS_STORAGE_FILENAME_LENGTH,
67
+ "%s" PSA_ITS_STORAGE_FILENAME_PATTERN "%s",
68
+ PSA_ITS_STORAGE_PREFIX,
69
+ (unsigned) (uid >> 32),
70
+ (unsigned) (uid & 0xffffffff),
71
+ PSA_ITS_STORAGE_SUFFIX);
72
+ }
73
+
74
+ static psa_status_t psa_its_read_file(psa_storage_uid_t uid,
75
+ struct psa_storage_info_t *p_info,
76
+ FILE **p_stream)
77
+ {
78
+ char filename[PSA_ITS_STORAGE_FILENAME_LENGTH];
79
+ psa_its_file_header_t header;
80
+ size_t n;
81
+
82
+ *p_stream = NULL;
83
+ psa_its_fill_filename(uid, filename);
84
+ *p_stream = fopen(filename, "rb");
85
+ if (*p_stream == NULL) {
86
+ return PSA_ERROR_DOES_NOT_EXIST;
87
+ }
88
+
89
+ /* Ensure no stdio buffering of secrets, as such buffers cannot be wiped. */
90
+ mbedtls_setbuf(*p_stream, NULL);
91
+
92
+ n = fread(&header, 1, sizeof(header), *p_stream);
93
+ if (n != sizeof(header)) {
94
+ return PSA_ERROR_DATA_CORRUPT;
95
+ }
96
+ if (memcmp(header.magic, PSA_ITS_MAGIC_STRING,
97
+ PSA_ITS_MAGIC_LENGTH) != 0) {
98
+ return PSA_ERROR_DATA_CORRUPT;
99
+ }
100
+
101
+ p_info->size = MBEDTLS_GET_UINT32_LE(header.size, 0);
102
+ p_info->flags = MBEDTLS_GET_UINT32_LE(header.flags, 0);
103
+
104
+ return PSA_SUCCESS;
105
+ }
106
+
107
+ psa_status_t psa_its_get_info(psa_storage_uid_t uid,
108
+ struct psa_storage_info_t *p_info)
109
+ {
110
+ psa_status_t status;
111
+ FILE *stream = NULL;
112
+ status = psa_its_read_file(uid, p_info, &stream);
113
+ if (stream != NULL) {
114
+ fclose(stream);
115
+ }
116
+ return status;
117
+ }
118
+
119
+ psa_status_t psa_its_get(psa_storage_uid_t uid,
120
+ uint32_t data_offset,
121
+ uint32_t data_length,
122
+ void *p_data,
123
+ size_t *p_data_length)
124
+ {
125
+ psa_status_t status;
126
+ FILE *stream = NULL;
127
+ size_t n;
128
+ struct psa_storage_info_t info;
129
+
130
+ status = psa_its_read_file(uid, &info, &stream);
131
+ if (status != PSA_SUCCESS) {
132
+ goto exit;
133
+ }
134
+ status = PSA_ERROR_INVALID_ARGUMENT;
135
+ if (data_offset + data_length < data_offset) {
136
+ goto exit;
137
+ }
138
+ #if SIZE_MAX < 0xffffffff
139
+ if (data_offset + data_length > SIZE_MAX) {
140
+ goto exit;
141
+ }
142
+ #endif
143
+ if (data_offset + data_length > info.size) {
144
+ goto exit;
145
+ }
146
+
147
+ status = PSA_ERROR_STORAGE_FAILURE;
148
+ #if LONG_MAX < 0xffffffff
149
+ while (data_offset > LONG_MAX) {
150
+ if (fseek(stream, LONG_MAX, SEEK_CUR) != 0) {
151
+ goto exit;
152
+ }
153
+ data_offset -= LONG_MAX;
154
+ }
155
+ #endif
156
+ if (fseek(stream, data_offset, SEEK_CUR) != 0) {
157
+ goto exit;
158
+ }
159
+ n = fread(p_data, 1, data_length, stream);
160
+ if (n != data_length) {
161
+ goto exit;
162
+ }
163
+ status = PSA_SUCCESS;
164
+ if (p_data_length != NULL) {
165
+ *p_data_length = n;
166
+ }
167
+
168
+ exit:
169
+ if (stream != NULL) {
170
+ fclose(stream);
171
+ }
172
+ return status;
173
+ }
174
+
175
+ psa_status_t psa_its_set(psa_storage_uid_t uid,
176
+ uint32_t data_length,
177
+ const void *p_data,
178
+ psa_storage_create_flags_t create_flags)
179
+ {
180
+ if (uid == 0) {
181
+ return PSA_ERROR_INVALID_HANDLE;
182
+ }
183
+
184
+ psa_status_t status = PSA_ERROR_STORAGE_FAILURE;
185
+ char filename[PSA_ITS_STORAGE_FILENAME_LENGTH];
186
+ FILE *stream = NULL;
187
+ psa_its_file_header_t header;
188
+ size_t n;
189
+
190
+ memcpy(header.magic, PSA_ITS_MAGIC_STRING, PSA_ITS_MAGIC_LENGTH);
191
+ MBEDTLS_PUT_UINT32_LE(data_length, header.size, 0);
192
+ MBEDTLS_PUT_UINT32_LE(create_flags, header.flags, 0);
193
+
194
+ psa_its_fill_filename(uid, filename);
195
+ stream = fopen(PSA_ITS_STORAGE_TEMP, "wb");
196
+
197
+ if (stream == NULL) {
198
+ goto exit;
199
+ }
200
+
201
+ /* Ensure no stdio buffering of secrets, as such buffers cannot be wiped. */
202
+ mbedtls_setbuf(stream, NULL);
203
+
204
+ status = PSA_ERROR_INSUFFICIENT_STORAGE;
205
+ n = fwrite(&header, 1, sizeof(header), stream);
206
+ if (n != sizeof(header)) {
207
+ goto exit;
208
+ }
209
+ if (data_length != 0) {
210
+ n = fwrite(p_data, 1, data_length, stream);
211
+ if (n != data_length) {
212
+ goto exit;
213
+ }
214
+ }
215
+ status = PSA_SUCCESS;
216
+
217
+ exit:
218
+ if (stream != NULL) {
219
+ int ret = fclose(stream);
220
+ if (status == PSA_SUCCESS && ret != 0) {
221
+ status = PSA_ERROR_INSUFFICIENT_STORAGE;
222
+ }
223
+ }
224
+ if (status == PSA_SUCCESS) {
225
+ if (rename_replace_existing(PSA_ITS_STORAGE_TEMP, filename) != 0) {
226
+ status = PSA_ERROR_STORAGE_FAILURE;
227
+ }
228
+ }
229
+ /* The temporary file may still exist, but only in failure cases where
230
+ * we're already reporting an error. So there's nothing we can do on
231
+ * failure. If the function succeeded, and in some error cases, the
232
+ * temporary file doesn't exist and so remove() is expected to fail.
233
+ * Thus we just ignore the return status of remove(). */
234
+ (void) remove(PSA_ITS_STORAGE_TEMP);
235
+ return status;
236
+ }
237
+
238
+ psa_status_t psa_its_remove(psa_storage_uid_t uid)
239
+ {
240
+ char filename[PSA_ITS_STORAGE_FILENAME_LENGTH];
241
+ FILE *stream;
242
+ psa_its_fill_filename(uid, filename);
243
+ stream = fopen(filename, "rb");
244
+ if (stream == NULL) {
245
+ return PSA_ERROR_DOES_NOT_EXIST;
246
+ }
247
+ fclose(stream);
248
+ if (remove(filename) != 0) {
249
+ return PSA_ERROR_STORAGE_FAILURE;
250
+ }
251
+ return PSA_SUCCESS;
252
+ }
253
+
254
+ #endif /* MBEDTLS_PSA_ITS_FILE_C */