@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,321 @@
1
+ /*
2
+ * PSA RSA layer on top of Mbed TLS crypto
3
+ */
4
+ /*
5
+ * Copyright The Mbed TLS Contributors
6
+ * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
7
+ */
8
+
9
+ #ifndef PSA_CRYPTO_RSA_H
10
+ #define PSA_CRYPTO_RSA_H
11
+
12
+ #include <psa/crypto.h>
13
+ #include <mbedtls/rsa.h>
14
+
15
+ /** Load the contents of a key buffer into an internal RSA representation
16
+ *
17
+ * \param[in] type The type of key contained in \p data.
18
+ * \param[in] data The buffer from which to load the representation.
19
+ * \param[in] data_length The size in bytes of \p data.
20
+ * \param[out] p_rsa Returns a pointer to an RSA context on success.
21
+ * The caller is responsible for freeing both the
22
+ * contents of the context and the context itself
23
+ * when done.
24
+ */
25
+ psa_status_t mbedtls_psa_rsa_load_representation(psa_key_type_t type,
26
+ const uint8_t *data,
27
+ size_t data_length,
28
+ mbedtls_rsa_context **p_rsa);
29
+
30
+ /** Import an RSA key in binary format.
31
+ *
32
+ * \note The signature of this function is that of a PSA driver
33
+ * import_key entry point. This function behaves as an import_key
34
+ * entry point as defined in the PSA driver interface specification for
35
+ * transparent drivers.
36
+ *
37
+ * \param[in] attributes The attributes for the key to import.
38
+ * \param[in] data The buffer containing the key data in import
39
+ * format.
40
+ * \param[in] data_length Size of the \p data buffer in bytes.
41
+ * \param[out] key_buffer The buffer containing the key data in output
42
+ * format.
43
+ * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes. This
44
+ * size is greater or equal to \p data_length.
45
+ * \param[out] key_buffer_length The length of the data written in \p
46
+ * key_buffer in bytes.
47
+ * \param[out] bits The key size in number of bits.
48
+ *
49
+ * \retval #PSA_SUCCESS The RSA key was imported successfully.
50
+ * \retval #PSA_ERROR_INVALID_ARGUMENT
51
+ * The key data is not correctly formatted.
52
+ * \retval #PSA_ERROR_NOT_SUPPORTED \emptydescription
53
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY \emptydescription
54
+ * \retval #PSA_ERROR_CORRUPTION_DETECTED \emptydescription
55
+ */
56
+ psa_status_t mbedtls_psa_rsa_import_key(
57
+ const psa_key_attributes_t *attributes,
58
+ const uint8_t *data, size_t data_length,
59
+ uint8_t *key_buffer, size_t key_buffer_size,
60
+ size_t *key_buffer_length, size_t *bits);
61
+
62
+ /** Export an RSA key to export representation
63
+ *
64
+ * \param[in] type The type of key (public/private) to export
65
+ * \param[in] rsa The internal RSA representation from which to export
66
+ * \param[out] data The buffer to export to
67
+ * \param[in] data_size The length of the buffer to export to
68
+ * \param[out] data_length The amount of bytes written to \p data
69
+ */
70
+ psa_status_t mbedtls_psa_rsa_export_key(psa_key_type_t type,
71
+ mbedtls_rsa_context *rsa,
72
+ uint8_t *data,
73
+ size_t data_size,
74
+ size_t *data_length);
75
+
76
+ /** Export a public RSA key or the public part of an RSA key pair in binary
77
+ * format.
78
+ *
79
+ * \note The signature of this function is that of a PSA driver
80
+ * export_public_key entry point. This function behaves as an
81
+ * export_public_key entry point as defined in the PSA driver interface
82
+ * specification.
83
+ *
84
+ * \param[in] attributes The attributes for the key to export.
85
+ * \param[in] key_buffer Material or context of the key to export.
86
+ * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes.
87
+ * \param[out] data Buffer where the key data is to be written.
88
+ * \param[in] data_size Size of the \p data buffer in bytes.
89
+ * \param[out] data_length On success, the number of bytes written in
90
+ * \p data.
91
+ *
92
+ * \retval #PSA_SUCCESS The RSA public key was exported successfully.
93
+ * \retval #PSA_ERROR_NOT_SUPPORTED \emptydescription
94
+ * \retval #PSA_ERROR_COMMUNICATION_FAILURE \emptydescription
95
+ * \retval #PSA_ERROR_HARDWARE_FAILURE \emptydescription
96
+ * \retval #PSA_ERROR_CORRUPTION_DETECTED \emptydescription
97
+ * \retval #PSA_ERROR_STORAGE_FAILURE \emptydescription
98
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY \emptydescription
99
+ */
100
+ psa_status_t mbedtls_psa_rsa_export_public_key(
101
+ const psa_key_attributes_t *attributes,
102
+ const uint8_t *key_buffer, size_t key_buffer_size,
103
+ uint8_t *data, size_t data_size, size_t *data_length);
104
+
105
+ /**
106
+ * \brief Generate an RSA key.
107
+ *
108
+ * \param[in] attributes The attributes for the RSA key to generate.
109
+ * \param[in] custom_data The public exponent to use.
110
+ * This can be a null pointer if
111
+ * \c params_data_length is 0.
112
+ * \param custom_data_length Length of \p custom_data in bytes.
113
+ * This can be 0, in which case the
114
+ * public exponent will be 65537.
115
+ * \param[out] key_buffer Buffer where the key data is to be written.
116
+ * \param[in] key_buffer_size Size of \p key_buffer in bytes.
117
+ * \param[out] key_buffer_length On success, the number of bytes written in
118
+ * \p key_buffer.
119
+ *
120
+ * \retval #PSA_SUCCESS
121
+ * The key was successfully generated.
122
+ * \retval #PSA_ERROR_NOT_SUPPORTED
123
+ * Key length or type not supported.
124
+ * \retval #PSA_ERROR_BUFFER_TOO_SMALL
125
+ * The size of \p key_buffer is too small.
126
+ */
127
+ psa_status_t mbedtls_psa_rsa_generate_key(
128
+ const psa_key_attributes_t *attributes,
129
+ const uint8_t *custom_data, size_t custom_data_length,
130
+ uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length);
131
+
132
+ /** Sign an already-calculated hash with an RSA private key.
133
+ *
134
+ * \note The signature of this function is that of a PSA driver
135
+ * sign_hash entry point. This function behaves as a sign_hash
136
+ * entry point as defined in the PSA driver interface specification for
137
+ * transparent drivers.
138
+ *
139
+ * \param[in] attributes The attributes of the RSA key to use for the
140
+ * operation.
141
+ * \param[in] key_buffer The buffer containing the RSA key context.
142
+ * format.
143
+ * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes.
144
+ * \param[in] alg A signature algorithm that is compatible with
145
+ * an RSA key.
146
+ * \param[in] hash The hash or message to sign.
147
+ * \param[in] hash_length Size of the \p hash buffer in bytes.
148
+ * \param[out] signature Buffer where the signature is to be written.
149
+ * \param[in] signature_size Size of the \p signature buffer in bytes.
150
+ * \param[out] signature_length On success, the number of bytes
151
+ * that make up the returned signature value.
152
+ *
153
+ * \retval #PSA_SUCCESS \emptydescription
154
+ * \retval #PSA_ERROR_BUFFER_TOO_SMALL
155
+ * The size of the \p signature buffer is too small. You can
156
+ * determine a sufficient buffer size by calling
157
+ * #PSA_SIGN_OUTPUT_SIZE(\c PSA_KEY_TYPE_RSA_KEY_PAIR, \c key_bits,
158
+ * \p alg) where \c key_bits is the bit-size of the RSA key.
159
+ * \retval #PSA_ERROR_NOT_SUPPORTED \emptydescription
160
+ * \retval #PSA_ERROR_INVALID_ARGUMENT \emptydescription
161
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY \emptydescription
162
+ * \retval #PSA_ERROR_CORRUPTION_DETECTED \emptydescription
163
+ * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY \emptydescription
164
+ */
165
+ psa_status_t mbedtls_psa_rsa_sign_hash(
166
+ const psa_key_attributes_t *attributes,
167
+ const uint8_t *key_buffer, size_t key_buffer_size,
168
+ psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
169
+ uint8_t *signature, size_t signature_size, size_t *signature_length);
170
+
171
+ /**
172
+ * \brief Verify the signature a hash or short message using a public RSA key.
173
+ *
174
+ * \note The signature of this function is that of a PSA driver
175
+ * verify_hash entry point. This function behaves as a verify_hash
176
+ * entry point as defined in the PSA driver interface specification for
177
+ * transparent drivers.
178
+ *
179
+ * \param[in] attributes The attributes of the RSA key to use for the
180
+ * operation.
181
+ * \param[in] key_buffer The buffer containing the RSA key context.
182
+ * format.
183
+ * \param[in] key_buffer_size Size of the \p key_buffer buffer in bytes.
184
+ * \param[in] alg A signature algorithm that is compatible with
185
+ * an RSA key.
186
+ * \param[in] hash The hash or message whose signature is to be
187
+ * verified.
188
+ * \param[in] hash_length Size of the \p hash buffer in bytes.
189
+ * \param[in] signature Buffer containing the signature to verify.
190
+ * \param[in] signature_length Size of the \p signature buffer in bytes.
191
+ *
192
+ * \retval #PSA_SUCCESS
193
+ * The signature is valid.
194
+ * \retval #PSA_ERROR_INVALID_SIGNATURE
195
+ * The calculation was performed successfully, but the passed
196
+ * signature is not a valid signature.
197
+ * \retval #PSA_ERROR_NOT_SUPPORTED \emptydescription
198
+ * \retval #PSA_ERROR_INVALID_ARGUMENT \emptydescription
199
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY \emptydescription
200
+ */
201
+ psa_status_t mbedtls_psa_rsa_verify_hash(
202
+ const psa_key_attributes_t *attributes,
203
+ const uint8_t *key_buffer, size_t key_buffer_size,
204
+ psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
205
+ const uint8_t *signature, size_t signature_length);
206
+
207
+ /**
208
+ * \brief Encrypt a short message with a public key.
209
+ *
210
+ * \param attributes The attributes for the key to import.
211
+ * \param key_buffer Buffer where the key data is to be written.
212
+ * \param key_buffer_size Size of the \p key_buffer buffer in bytes.
213
+ * \param input_length Size of the \p input buffer in bytes.
214
+ * \param[in] salt A salt or label, if supported by the
215
+ * encryption algorithm.
216
+ * If the algorithm does not support a
217
+ * salt, pass \c NULL.
218
+ * If the algorithm supports an optional
219
+ * salt and you do not want to pass a salt,
220
+ * pass \c NULL.
221
+ *
222
+ * - For #PSA_ALG_RSA_PKCS1V15_CRYPT, no salt is
223
+ * supported.
224
+ * \param salt_length Size of the \p salt buffer in bytes.
225
+ * If \p salt is \c NULL, pass 0.
226
+ * \param[out] output Buffer where the encrypted message is to
227
+ * be written.
228
+ * \param output_size Size of the \p output buffer in bytes.
229
+ * \param[out] output_length On success, the number of bytes
230
+ * that make up the returned output.
231
+ *
232
+ * \retval #PSA_SUCCESS \emptydescription
233
+ * \retval #PSA_ERROR_BUFFER_TOO_SMALL
234
+ * The size of the \p output buffer is too small. You can
235
+ * determine a sufficient buffer size by calling
236
+ * #PSA_ASYMMETRIC_ENCRYPT_OUTPUT_SIZE(\c key_type, \c key_bits, \p alg)
237
+ * where \c key_type and \c key_bits are the type and bit-size
238
+ * respectively of \p key.
239
+ * \retval #PSA_ERROR_NOT_SUPPORTED \emptydescription
240
+ * \retval #PSA_ERROR_INVALID_ARGUMENT \emptydescription
241
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY \emptydescription
242
+ * \retval #PSA_ERROR_COMMUNICATION_FAILURE \emptydescription
243
+ * \retval #PSA_ERROR_HARDWARE_FAILURE \emptydescription
244
+ * \retval #PSA_ERROR_CORRUPTION_DETECTED \emptydescription
245
+ * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY \emptydescription
246
+ * \retval #PSA_ERROR_BAD_STATE
247
+ * The library has not been previously initialized by psa_crypto_init().
248
+ * It is implementation-dependent whether a failure to initialize
249
+ * results in this error code.
250
+ */
251
+ psa_status_t mbedtls_psa_asymmetric_encrypt(const psa_key_attributes_t *attributes,
252
+ const uint8_t *key_buffer,
253
+ size_t key_buffer_size,
254
+ psa_algorithm_t alg,
255
+ const uint8_t *input,
256
+ size_t input_length,
257
+ const uint8_t *salt,
258
+ size_t salt_length,
259
+ uint8_t *output,
260
+ size_t output_size,
261
+ size_t *output_length);
262
+
263
+ /**
264
+ * \brief Decrypt a short message with a private key.
265
+ *
266
+ * \param attributes The attributes for the key to import.
267
+ * \param key_buffer Buffer where the key data is to be written.
268
+ * \param key_buffer_size Size of the \p key_buffer buffer in bytes.
269
+ * \param[in] input The message to decrypt.
270
+ * \param input_length Size of the \p input buffer in bytes.
271
+ * \param[in] salt A salt or label, if supported by the
272
+ * encryption algorithm.
273
+ * If the algorithm does not support a
274
+ * salt, pass \c NULL.
275
+ * If the algorithm supports an optional
276
+ * salt and you do not want to pass a salt,
277
+ * pass \c NULL.
278
+ *
279
+ * - For #PSA_ALG_RSA_PKCS1V15_CRYPT, no salt is
280
+ * supported.
281
+ * \param salt_length Size of the \p salt buffer in bytes.
282
+ * If \p salt is \c NULL, pass 0.
283
+ * \param[out] output Buffer where the decrypted message is to
284
+ * be written.
285
+ * \param output_size Size of the \c output buffer in bytes.
286
+ * \param[out] output_length On success, the number of bytes
287
+ * that make up the returned output.
288
+ *
289
+ * \retval #PSA_SUCCESS \emptydescription
290
+ * \retval #PSA_ERROR_BUFFER_TOO_SMALL
291
+ * The size of the \p output buffer is too small. You can
292
+ * determine a sufficient buffer size by calling
293
+ * #PSA_ASYMMETRIC_DECRYPT_OUTPUT_SIZE(\c key_type, \c key_bits, \p alg)
294
+ * where \c key_type and \c key_bits are the type and bit-size
295
+ * respectively of \p key.
296
+ * \retval #PSA_ERROR_NOT_SUPPORTED \emptydescription
297
+ * \retval #PSA_ERROR_INVALID_ARGUMENT \emptydescription
298
+ * \retval #PSA_ERROR_INSUFFICIENT_MEMORY \emptydescription
299
+ * \retval #PSA_ERROR_COMMUNICATION_FAILURE \emptydescription
300
+ * \retval #PSA_ERROR_HARDWARE_FAILURE \emptydescription
301
+ * \retval #PSA_ERROR_CORRUPTION_DETECTED \emptydescription
302
+ * \retval #PSA_ERROR_INSUFFICIENT_ENTROPY \emptydescription
303
+ * \retval #PSA_ERROR_INVALID_PADDING \emptydescription
304
+ * \retval #PSA_ERROR_BAD_STATE
305
+ * The library has not been previously initialized by psa_crypto_init().
306
+ * It is implementation-dependent whether a failure to initialize
307
+ * results in this error code.
308
+ */
309
+ psa_status_t mbedtls_psa_asymmetric_decrypt(const psa_key_attributes_t *attributes,
310
+ const uint8_t *key_buffer,
311
+ size_t key_buffer_size,
312
+ psa_algorithm_t alg,
313
+ const uint8_t *input,
314
+ size_t input_length,
315
+ const uint8_t *salt,
316
+ size_t salt_length,
317
+ uint8_t *output,
318
+ size_t output_size,
319
+ size_t *output_length);
320
+
321
+ #endif /* PSA_CRYPTO_RSA_H */
@@ -0,0 +1,373 @@
1
+ /*
2
+ * PSA crypto support for secure element drivers
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_CRYPTO_SE_C)
12
+
13
+ #include <stdint.h>
14
+ #include <string.h>
15
+
16
+ #include "psa/crypto_se_driver.h"
17
+
18
+ #include "psa_crypto_se.h"
19
+
20
+ #if defined(MBEDTLS_PSA_ITS_FILE_C)
21
+ #include "psa_crypto_its.h"
22
+ #else /* Native ITS implementation */
23
+ #include "psa/error.h"
24
+ #include "psa/internal_trusted_storage.h"
25
+ #endif
26
+
27
+ #include "mbedtls/platform.h"
28
+
29
+
30
+
31
+ /****************************************************************/
32
+ /* Driver lookup */
33
+ /****************************************************************/
34
+
35
+ /* This structure is identical to psa_drv_se_context_t declared in
36
+ * `crypto_se_driver.h`, except that some parts are writable here
37
+ * (non-const, or pointer to non-const). */
38
+ typedef struct {
39
+ void *persistent_data;
40
+ size_t persistent_data_size;
41
+ uintptr_t transient_data;
42
+ } psa_drv_se_internal_context_t;
43
+
44
+ struct psa_se_drv_table_entry_s {
45
+ psa_key_location_t location;
46
+ const psa_drv_se_t *methods;
47
+ union {
48
+ psa_drv_se_internal_context_t internal;
49
+ psa_drv_se_context_t context;
50
+ } u;
51
+ };
52
+
53
+ static psa_se_drv_table_entry_t driver_table[PSA_MAX_SE_DRIVERS];
54
+
55
+ psa_se_drv_table_entry_t *psa_get_se_driver_entry(
56
+ psa_key_lifetime_t lifetime)
57
+ {
58
+ size_t i;
59
+ psa_key_location_t location = PSA_KEY_LIFETIME_GET_LOCATION(lifetime);
60
+ /* In the driver table, location=0 means an entry that isn't used.
61
+ * No driver has a location of 0 because it's a reserved value
62
+ * (which designates transparent keys). Make sure we never return
63
+ * a driver entry for location 0. */
64
+ if (location == 0) {
65
+ return NULL;
66
+ }
67
+ for (i = 0; i < PSA_MAX_SE_DRIVERS; i++) {
68
+ if (driver_table[i].location == location) {
69
+ return &driver_table[i];
70
+ }
71
+ }
72
+ return NULL;
73
+ }
74
+
75
+ const psa_drv_se_t *psa_get_se_driver_methods(
76
+ const psa_se_drv_table_entry_t *driver)
77
+ {
78
+ return driver->methods;
79
+ }
80
+
81
+ psa_drv_se_context_t *psa_get_se_driver_context(
82
+ psa_se_drv_table_entry_t *driver)
83
+ {
84
+ return &driver->u.context;
85
+ }
86
+
87
+ int psa_get_se_driver(psa_key_lifetime_t lifetime,
88
+ const psa_drv_se_t **p_methods,
89
+ psa_drv_se_context_t **p_drv_context)
90
+ {
91
+ psa_se_drv_table_entry_t *driver = psa_get_se_driver_entry(lifetime);
92
+ if (p_methods != NULL) {
93
+ *p_methods = (driver ? driver->methods : NULL);
94
+ }
95
+ if (p_drv_context != NULL) {
96
+ *p_drv_context = (driver ? &driver->u.context : NULL);
97
+ }
98
+ return driver != NULL;
99
+ }
100
+
101
+
102
+
103
+ /****************************************************************/
104
+ /* Persistent data management */
105
+ /****************************************************************/
106
+
107
+ static psa_status_t psa_get_se_driver_its_file_uid(
108
+ const psa_se_drv_table_entry_t *driver,
109
+ psa_storage_uid_t *uid)
110
+ {
111
+ if (driver->location > PSA_MAX_SE_LOCATION) {
112
+ return PSA_ERROR_NOT_SUPPORTED;
113
+ }
114
+
115
+ /* ITS file sizes are limited to 32 bits. */
116
+ if (driver->u.internal.persistent_data_size > UINT32_MAX) {
117
+ return PSA_ERROR_NOT_SUPPORTED;
118
+ }
119
+
120
+ /* See the documentation of PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE. */
121
+ *uid = PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE + driver->location;
122
+ return PSA_SUCCESS;
123
+ }
124
+
125
+ psa_status_t psa_load_se_persistent_data(
126
+ const psa_se_drv_table_entry_t *driver)
127
+ {
128
+ psa_status_t status;
129
+ psa_storage_uid_t uid;
130
+ size_t length;
131
+
132
+ status = psa_get_se_driver_its_file_uid(driver, &uid);
133
+ if (status != PSA_SUCCESS) {
134
+ return status;
135
+ }
136
+
137
+ /* Read the amount of persistent data that the driver requests.
138
+ * If the data in storage is larger, it is truncated. If the data
139
+ * in storage is smaller, silently keep what is already at the end
140
+ * of the output buffer. */
141
+ /* psa_get_se_driver_its_file_uid ensures that the size_t
142
+ * persistent_data_size is in range, but compilers don't know that,
143
+ * so cast to reassure them. */
144
+ return psa_its_get(uid, 0,
145
+ (uint32_t) driver->u.internal.persistent_data_size,
146
+ driver->u.internal.persistent_data,
147
+ &length);
148
+ }
149
+
150
+ psa_status_t psa_save_se_persistent_data(
151
+ const psa_se_drv_table_entry_t *driver)
152
+ {
153
+ psa_status_t status;
154
+ psa_storage_uid_t uid;
155
+
156
+ status = psa_get_se_driver_its_file_uid(driver, &uid);
157
+ if (status != PSA_SUCCESS) {
158
+ return status;
159
+ }
160
+
161
+ /* psa_get_se_driver_its_file_uid ensures that the size_t
162
+ * persistent_data_size is in range, but compilers don't know that,
163
+ * so cast to reassure them. */
164
+ return psa_its_set(uid,
165
+ (uint32_t) driver->u.internal.persistent_data_size,
166
+ driver->u.internal.persistent_data,
167
+ 0);
168
+ }
169
+
170
+ psa_status_t psa_destroy_se_persistent_data(psa_key_location_t location)
171
+ {
172
+ psa_storage_uid_t uid;
173
+ if (location > PSA_MAX_SE_LOCATION) {
174
+ return PSA_ERROR_NOT_SUPPORTED;
175
+ }
176
+ uid = PSA_CRYPTO_SE_DRIVER_ITS_UID_BASE + location;
177
+ return psa_its_remove(uid);
178
+ }
179
+
180
+ psa_status_t psa_find_se_slot_for_key(
181
+ const psa_key_attributes_t *attributes,
182
+ psa_key_creation_method_t method,
183
+ psa_se_drv_table_entry_t *driver,
184
+ psa_key_slot_number_t *slot_number)
185
+ {
186
+ psa_status_t status;
187
+ psa_key_location_t key_location =
188
+ PSA_KEY_LIFETIME_GET_LOCATION(psa_get_key_lifetime(attributes));
189
+
190
+ /* If the location is wrong, it's a bug in the library. */
191
+ if (driver->location != key_location) {
192
+ return PSA_ERROR_CORRUPTION_DETECTED;
193
+ }
194
+
195
+ /* If the driver doesn't support key creation in any way, give up now. */
196
+ if (driver->methods->key_management == NULL) {
197
+ return PSA_ERROR_NOT_SUPPORTED;
198
+ }
199
+
200
+ if (psa_get_key_slot_number(attributes, slot_number) == PSA_SUCCESS) {
201
+ /* The application wants to use a specific slot. Allow it if
202
+ * the driver supports it. On a system with isolation,
203
+ * the crypto service must check that the application is
204
+ * permitted to request this slot. */
205
+ psa_drv_se_validate_slot_number_t p_validate_slot_number =
206
+ driver->methods->key_management->p_validate_slot_number;
207
+ if (p_validate_slot_number == NULL) {
208
+ return PSA_ERROR_NOT_SUPPORTED;
209
+ }
210
+ status = p_validate_slot_number(&driver->u.context,
211
+ driver->u.internal.persistent_data,
212
+ attributes, method,
213
+ *slot_number);
214
+ } else if (method == PSA_KEY_CREATION_REGISTER) {
215
+ /* The application didn't specify a slot number. This doesn't
216
+ * make sense when registering a slot. */
217
+ return PSA_ERROR_INVALID_ARGUMENT;
218
+ } else {
219
+ /* The application didn't tell us which slot to use. Let the driver
220
+ * choose. This is the normal case. */
221
+ psa_drv_se_allocate_key_t p_allocate =
222
+ driver->methods->key_management->p_allocate;
223
+ if (p_allocate == NULL) {
224
+ return PSA_ERROR_NOT_SUPPORTED;
225
+ }
226
+ status = p_allocate(&driver->u.context,
227
+ driver->u.internal.persistent_data,
228
+ attributes, method,
229
+ slot_number);
230
+ }
231
+ return status;
232
+ }
233
+
234
+ psa_status_t psa_destroy_se_key(psa_se_drv_table_entry_t *driver,
235
+ psa_key_slot_number_t slot_number)
236
+ {
237
+ psa_status_t status;
238
+ psa_status_t storage_status;
239
+ /* Normally a missing method would mean that the action is not
240
+ * supported. But psa_destroy_key() is not supposed to return
241
+ * PSA_ERROR_NOT_SUPPORTED: if you can create a key, you should
242
+ * be able to destroy it. The only use case for a driver that
243
+ * does not have a way to destroy keys at all is if the keys are
244
+ * locked in a read-only state: we can use the keys but not
245
+ * destroy them. Hence, if the driver doesn't support destroying
246
+ * keys, it's really a lack of permission. */
247
+ if (driver->methods->key_management == NULL ||
248
+ driver->methods->key_management->p_destroy == NULL) {
249
+ return PSA_ERROR_NOT_PERMITTED;
250
+ }
251
+ status = driver->methods->key_management->p_destroy(
252
+ &driver->u.context,
253
+ driver->u.internal.persistent_data,
254
+ slot_number);
255
+ storage_status = psa_save_se_persistent_data(driver);
256
+ return status == PSA_SUCCESS ? storage_status : status;
257
+ }
258
+
259
+ psa_status_t psa_init_all_se_drivers(void)
260
+ {
261
+ size_t i;
262
+ for (i = 0; i < PSA_MAX_SE_DRIVERS; i++) {
263
+ psa_se_drv_table_entry_t *driver = &driver_table[i];
264
+ if (driver->location == 0) {
265
+ continue; /* skipping unused entry */
266
+ }
267
+ const psa_drv_se_t *methods = psa_get_se_driver_methods(driver);
268
+ if (methods->p_init != NULL) {
269
+ psa_status_t status = methods->p_init(
270
+ &driver->u.context,
271
+ driver->u.internal.persistent_data,
272
+ driver->location);
273
+ if (status != PSA_SUCCESS) {
274
+ return status;
275
+ }
276
+ status = psa_save_se_persistent_data(driver);
277
+ if (status != PSA_SUCCESS) {
278
+ return status;
279
+ }
280
+ }
281
+ }
282
+ return PSA_SUCCESS;
283
+ }
284
+
285
+
286
+
287
+ /****************************************************************/
288
+ /* Driver registration */
289
+ /****************************************************************/
290
+
291
+ psa_status_t psa_register_se_driver(
292
+ psa_key_location_t location,
293
+ const psa_drv_se_t *methods)
294
+ {
295
+ size_t i;
296
+ psa_status_t status;
297
+
298
+ if (methods->hal_version != PSA_DRV_SE_HAL_VERSION) {
299
+ return PSA_ERROR_NOT_SUPPORTED;
300
+ }
301
+ /* Driver table entries are 0-initialized. 0 is not a valid driver
302
+ * location because it means a transparent key. */
303
+ MBEDTLS_STATIC_ASSERT(PSA_KEY_LOCATION_LOCAL_STORAGE == 0,
304
+ "Secure element support requires 0 to mean a local key");
305
+
306
+ if (location == PSA_KEY_LOCATION_LOCAL_STORAGE) {
307
+ return PSA_ERROR_INVALID_ARGUMENT;
308
+ }
309
+ if (location > PSA_MAX_SE_LOCATION) {
310
+ return PSA_ERROR_NOT_SUPPORTED;
311
+ }
312
+
313
+ for (i = 0; i < PSA_MAX_SE_DRIVERS; i++) {
314
+ if (driver_table[i].location == 0) {
315
+ break;
316
+ }
317
+ /* Check that location isn't already in use up to the first free
318
+ * entry. Since entries are created in order and never deleted,
319
+ * there can't be a used entry after the first free entry. */
320
+ if (driver_table[i].location == location) {
321
+ return PSA_ERROR_ALREADY_EXISTS;
322
+ }
323
+ }
324
+ if (i == PSA_MAX_SE_DRIVERS) {
325
+ return PSA_ERROR_INSUFFICIENT_MEMORY;
326
+ }
327
+
328
+ driver_table[i].location = location;
329
+ driver_table[i].methods = methods;
330
+ driver_table[i].u.internal.persistent_data_size =
331
+ methods->persistent_data_size;
332
+
333
+ if (methods->persistent_data_size != 0) {
334
+ driver_table[i].u.internal.persistent_data =
335
+ mbedtls_calloc(1, methods->persistent_data_size);
336
+ if (driver_table[i].u.internal.persistent_data == NULL) {
337
+ status = PSA_ERROR_INSUFFICIENT_MEMORY;
338
+ goto error;
339
+ }
340
+ /* Load the driver's persistent data. On first use, the persistent
341
+ * data does not exist in storage, and is initialized to
342
+ * all-bits-zero by the calloc call just above. */
343
+ status = psa_load_se_persistent_data(&driver_table[i]);
344
+ if (status != PSA_SUCCESS && status != PSA_ERROR_DOES_NOT_EXIST) {
345
+ goto error;
346
+ }
347
+ }
348
+
349
+ return PSA_SUCCESS;
350
+
351
+ error:
352
+ memset(&driver_table[i], 0, sizeof(driver_table[i]));
353
+ return status;
354
+ }
355
+
356
+ void psa_unregister_all_se_drivers(void)
357
+ {
358
+ size_t i;
359
+ for (i = 0; i < PSA_MAX_SE_DRIVERS; i++) {
360
+ if (driver_table[i].u.internal.persistent_data != NULL) {
361
+ mbedtls_free(driver_table[i].u.internal.persistent_data);
362
+ }
363
+ }
364
+ memset(driver_table, 0, sizeof(driver_table));
365
+ }
366
+
367
+
368
+
369
+ /****************************************************************/
370
+ /* The end */
371
+ /****************************************************************/
372
+
373
+ #endif /* MBEDTLS_PSA_CRYPTO_SE_C */