@scriptc/runtime 0.0.0 → 0.0.1

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 +5036 -0
  43. package/src/scr_stream.c +2877 -0
  44. package/src/scr_string.c +1176 -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,714 @@
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
+ #include "common.h"
10
+
11
+ #if defined(MBEDTLS_PSA_CRYPTO_C)
12
+
13
+ #include <psa/crypto.h>
14
+ #include "psa/crypto_values.h"
15
+ #include "psa_crypto_core.h"
16
+ #include "psa_crypto_random_impl.h"
17
+ #include "psa_crypto_rsa.h"
18
+ #include "psa_crypto_hash.h"
19
+ #include "mbedtls/psa_util.h"
20
+
21
+ #include <stdlib.h>
22
+ #include <string.h>
23
+ #include "mbedtls/platform.h"
24
+
25
+ #include <mbedtls/rsa.h>
26
+ #include <mbedtls/error.h>
27
+ #include "rsa_internal.h"
28
+ #include "constant_time_internal.h"
29
+
30
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \
31
+ defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) || \
32
+ defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || \
33
+ defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) || \
34
+ defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_IMPORT) || \
35
+ defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_EXPORT) || \
36
+ defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY)
37
+
38
+ /* Mbed TLS doesn't support non-byte-aligned key sizes (i.e. key sizes
39
+ * that are not a multiple of 8) well. For example, there is only
40
+ * mbedtls_rsa_get_len(), which returns a number of bytes, and no
41
+ * way to return the exact bit size of a key.
42
+ * To keep things simple, reject non-byte-aligned key sizes. */
43
+ static psa_status_t psa_check_rsa_key_byte_aligned(
44
+ const mbedtls_rsa_context *rsa)
45
+ {
46
+ mbedtls_mpi n;
47
+ psa_status_t status;
48
+ mbedtls_mpi_init(&n);
49
+ status = mbedtls_to_psa_error(
50
+ mbedtls_rsa_export(rsa, &n, NULL, NULL, NULL, NULL));
51
+ if (status == PSA_SUCCESS) {
52
+ if (mbedtls_mpi_bitlen(&n) % 8 != 0) {
53
+ status = PSA_ERROR_NOT_SUPPORTED;
54
+ }
55
+ }
56
+ mbedtls_mpi_free(&n);
57
+ return status;
58
+ }
59
+
60
+ psa_status_t mbedtls_psa_rsa_load_representation(
61
+ psa_key_type_t type, const uint8_t *data, size_t data_length,
62
+ mbedtls_rsa_context **p_rsa)
63
+ {
64
+ psa_status_t status;
65
+ size_t bits;
66
+
67
+ *p_rsa = mbedtls_calloc(1, sizeof(mbedtls_rsa_context));
68
+ if (*p_rsa == NULL) {
69
+ return PSA_ERROR_INSUFFICIENT_MEMORY;
70
+ }
71
+ mbedtls_rsa_init(*p_rsa);
72
+
73
+ /* Parse the data. */
74
+ if (PSA_KEY_TYPE_IS_KEY_PAIR(type)) {
75
+ status = mbedtls_to_psa_error(mbedtls_rsa_parse_key(*p_rsa, data, data_length));
76
+ } else {
77
+ status = mbedtls_to_psa_error(mbedtls_rsa_parse_pubkey(*p_rsa, data, data_length));
78
+ }
79
+ if (status != PSA_SUCCESS) {
80
+ goto exit;
81
+ }
82
+
83
+ /* The size of an RSA key doesn't have to be a multiple of 8. Mbed TLS
84
+ * supports non-byte-aligned key sizes, but not well. For example,
85
+ * mbedtls_rsa_get_len() returns the key size in bytes, not in bits. */
86
+ bits = PSA_BYTES_TO_BITS(mbedtls_rsa_get_len(*p_rsa));
87
+ if (bits > PSA_VENDOR_RSA_MAX_KEY_BITS) {
88
+ status = PSA_ERROR_NOT_SUPPORTED;
89
+ goto exit;
90
+ }
91
+ status = psa_check_rsa_key_byte_aligned(*p_rsa);
92
+ if (status != PSA_SUCCESS) {
93
+ goto exit;
94
+ }
95
+
96
+ exit:
97
+ return status;
98
+ }
99
+ #endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) ||
100
+ * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) ||
101
+ * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) ||
102
+ * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) ||
103
+ * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_IMPORT) ||
104
+ * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_EXPORT) ||
105
+ * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */
106
+
107
+ #if (defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_IMPORT) && \
108
+ defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_EXPORT)) || \
109
+ defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY)
110
+ psa_status_t mbedtls_psa_rsa_import_key(
111
+ const psa_key_attributes_t *attributes,
112
+ const uint8_t *data, size_t data_length,
113
+ uint8_t *key_buffer, size_t key_buffer_size,
114
+ size_t *key_buffer_length, size_t *bits)
115
+ {
116
+ psa_status_t status;
117
+ mbedtls_rsa_context *rsa = NULL;
118
+
119
+ /* Parse input */
120
+ status = mbedtls_psa_rsa_load_representation(attributes->type,
121
+ data,
122
+ data_length,
123
+ &rsa);
124
+ if (status != PSA_SUCCESS) {
125
+ goto exit;
126
+ }
127
+
128
+ *bits = (psa_key_bits_t) PSA_BYTES_TO_BITS(mbedtls_rsa_get_len(rsa));
129
+
130
+ /* Re-export the data to PSA export format, such that we can store export
131
+ * representation in the key slot. Export representation in case of RSA is
132
+ * the smallest representation that's allowed as input, so a straight-up
133
+ * allocation of the same size as the input buffer will be large enough. */
134
+ status = mbedtls_psa_rsa_export_key(attributes->type,
135
+ rsa,
136
+ key_buffer,
137
+ key_buffer_size,
138
+ key_buffer_length);
139
+ exit:
140
+ /* Always free the RSA object */
141
+ mbedtls_rsa_free(rsa);
142
+ mbedtls_free(rsa);
143
+
144
+ return status;
145
+ }
146
+ #endif /* (defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_IMPORT) &&
147
+ * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_EXPORT)) ||
148
+ * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */
149
+
150
+ #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_EXPORT) || \
151
+ defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY)
152
+ psa_status_t mbedtls_psa_rsa_export_key(psa_key_type_t type,
153
+ mbedtls_rsa_context *rsa,
154
+ uint8_t *data,
155
+ size_t data_size,
156
+ size_t *data_length)
157
+ {
158
+ int ret;
159
+ uint8_t *end = data + data_size;
160
+
161
+ /* PSA Crypto API defines the format of an RSA key as a DER-encoded
162
+ * representation of the non-encrypted PKCS#1 RSAPrivateKey for a
163
+ * private key and of the RFC3279 RSAPublicKey for a public key. */
164
+ if (PSA_KEY_TYPE_IS_KEY_PAIR(type)) {
165
+ ret = mbedtls_rsa_write_key(rsa, data, &end);
166
+ } else {
167
+ ret = mbedtls_rsa_write_pubkey(rsa, data, &end);
168
+ }
169
+
170
+ if (ret < 0) {
171
+ /* Clean up in case pk_write failed halfway through. */
172
+ memset(data, 0, data_size);
173
+ return mbedtls_to_psa_error(ret);
174
+ }
175
+
176
+ /* The mbedtls_pk_xxx functions write to the end of the buffer.
177
+ * Move the data to the beginning and erase remaining data
178
+ * at the original location. */
179
+ if (2 * (size_t) ret <= data_size) {
180
+ memcpy(data, data + data_size - ret, ret);
181
+ memset(data + data_size - ret, 0, ret);
182
+ } else if ((size_t) ret < data_size) {
183
+ memmove(data, data + data_size - ret, ret);
184
+ memset(data + ret, 0, data_size - ret);
185
+ }
186
+
187
+ *data_length = ret;
188
+ return PSA_SUCCESS;
189
+ }
190
+
191
+ psa_status_t mbedtls_psa_rsa_export_public_key(
192
+ const psa_key_attributes_t *attributes,
193
+ const uint8_t *key_buffer, size_t key_buffer_size,
194
+ uint8_t *data, size_t data_size, size_t *data_length)
195
+ {
196
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
197
+ mbedtls_rsa_context *rsa = NULL;
198
+
199
+ status = mbedtls_psa_rsa_load_representation(
200
+ attributes->type, key_buffer, key_buffer_size, &rsa);
201
+ if (status == PSA_SUCCESS) {
202
+ status = mbedtls_psa_rsa_export_key(PSA_KEY_TYPE_RSA_PUBLIC_KEY,
203
+ rsa,
204
+ data,
205
+ data_size,
206
+ data_length);
207
+ }
208
+
209
+ mbedtls_rsa_free(rsa);
210
+ mbedtls_free(rsa);
211
+
212
+ return status;
213
+ }
214
+ #endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_EXPORT) ||
215
+ * defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_PUBLIC_KEY) */
216
+
217
+ #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_GENERATE)
218
+ static psa_status_t psa_rsa_read_exponent(const uint8_t *e_bytes,
219
+ size_t e_length,
220
+ int *exponent)
221
+ {
222
+ size_t i;
223
+ uint32_t acc = 0;
224
+
225
+ /* Mbed TLS encodes the public exponent as an int. For simplicity, only
226
+ * support values that fit in a 32-bit integer, which is larger than
227
+ * int on just about every platform anyway. */
228
+ if (e_length > sizeof(acc)) {
229
+ return PSA_ERROR_NOT_SUPPORTED;
230
+ }
231
+ for (i = 0; i < e_length; i++) {
232
+ acc = (acc << 8) | e_bytes[i];
233
+ }
234
+ if (acc > INT_MAX) {
235
+ return PSA_ERROR_NOT_SUPPORTED;
236
+ }
237
+ *exponent = acc;
238
+ return PSA_SUCCESS;
239
+ }
240
+
241
+ psa_status_t mbedtls_psa_rsa_generate_key(
242
+ const psa_key_attributes_t *attributes,
243
+ const uint8_t *custom_data, size_t custom_data_length,
244
+ uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length)
245
+ {
246
+ psa_status_t status;
247
+ mbedtls_rsa_context rsa;
248
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
249
+ int exponent = 65537;
250
+
251
+ if (custom_data_length != 0) {
252
+ status = psa_rsa_read_exponent(custom_data, custom_data_length,
253
+ &exponent);
254
+ if (status != PSA_SUCCESS) {
255
+ return status;
256
+ }
257
+ }
258
+
259
+ mbedtls_rsa_init(&rsa);
260
+ ret = mbedtls_rsa_gen_key(&rsa,
261
+ mbedtls_psa_get_random,
262
+ MBEDTLS_PSA_RANDOM_STATE,
263
+ (unsigned int) attributes->bits,
264
+ exponent);
265
+ if (ret != 0) {
266
+ mbedtls_rsa_free(&rsa);
267
+ return mbedtls_to_psa_error(ret);
268
+ }
269
+
270
+ status = mbedtls_psa_rsa_export_key(attributes->type,
271
+ &rsa, key_buffer, key_buffer_size,
272
+ key_buffer_length);
273
+ mbedtls_rsa_free(&rsa);
274
+
275
+ return status;
276
+ }
277
+ #endif /* defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_RSA_KEY_PAIR_GENERATE) */
278
+
279
+ /****************************************************************/
280
+ /* Sign/verify hashes */
281
+ /****************************************************************/
282
+
283
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) || \
284
+ defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS)
285
+
286
+ /* Decode the hash algorithm from alg and store the mbedtls encoding in
287
+ * md_alg. Verify that the hash length is acceptable. */
288
+ static psa_status_t psa_rsa_decode_md_type(psa_algorithm_t alg,
289
+ size_t hash_length,
290
+ mbedtls_md_type_t *md_alg)
291
+ {
292
+ psa_algorithm_t hash_alg = PSA_ALG_SIGN_GET_HASH(alg);
293
+ *md_alg = mbedtls_md_type_from_psa_alg(hash_alg);
294
+
295
+ /* The Mbed TLS RSA module uses an unsigned int for hash length
296
+ * parameters. Validate that it fits so that we don't risk an
297
+ * overflow later. */
298
+ #if SIZE_MAX > UINT_MAX
299
+ if (hash_length > UINT_MAX) {
300
+ return PSA_ERROR_INVALID_ARGUMENT;
301
+ }
302
+ #endif
303
+
304
+ /* For signatures using a hash, the hash length must be correct. */
305
+ if (alg != PSA_ALG_RSA_PKCS1V15_SIGN_RAW) {
306
+ if (*md_alg == MBEDTLS_MD_NONE) {
307
+ return PSA_ERROR_NOT_SUPPORTED;
308
+ }
309
+ if (mbedtls_md_get_size_from_type(*md_alg) != hash_length) {
310
+ return PSA_ERROR_INVALID_ARGUMENT;
311
+ }
312
+ }
313
+
314
+ return PSA_SUCCESS;
315
+ }
316
+
317
+ psa_status_t mbedtls_psa_rsa_sign_hash(
318
+ const psa_key_attributes_t *attributes,
319
+ const uint8_t *key_buffer, size_t key_buffer_size,
320
+ psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
321
+ uint8_t *signature, size_t signature_size, size_t *signature_length)
322
+ {
323
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
324
+ mbedtls_rsa_context *rsa = NULL;
325
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
326
+ mbedtls_md_type_t md_alg;
327
+
328
+ status = mbedtls_psa_rsa_load_representation(attributes->type,
329
+ key_buffer,
330
+ key_buffer_size,
331
+ &rsa);
332
+ if (status != PSA_SUCCESS) {
333
+ goto exit;
334
+ }
335
+
336
+ status = psa_rsa_decode_md_type(alg, hash_length, &md_alg);
337
+ if (status != PSA_SUCCESS) {
338
+ goto exit;
339
+ }
340
+
341
+ if (signature_size < mbedtls_rsa_get_len(rsa)) {
342
+ status = PSA_ERROR_BUFFER_TOO_SMALL;
343
+ goto exit;
344
+ }
345
+
346
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN)
347
+ if (PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg)) {
348
+ ret = mbedtls_rsa_set_padding(rsa, MBEDTLS_RSA_PKCS_V15,
349
+ MBEDTLS_MD_NONE);
350
+ if (ret == 0) {
351
+ ret = mbedtls_rsa_pkcs1_sign(rsa,
352
+ mbedtls_psa_get_random,
353
+ MBEDTLS_PSA_RANDOM_STATE,
354
+ md_alg,
355
+ (unsigned int) hash_length,
356
+ hash,
357
+ signature);
358
+ }
359
+ } else
360
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN */
361
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS)
362
+ if (PSA_ALG_IS_RSA_PSS(alg)) {
363
+ ret = mbedtls_rsa_set_padding(rsa, MBEDTLS_RSA_PKCS_V21, md_alg);
364
+
365
+ if (ret == 0) {
366
+ ret = mbedtls_rsa_rsassa_pss_sign(rsa,
367
+ mbedtls_psa_get_random,
368
+ MBEDTLS_PSA_RANDOM_STATE,
369
+ MBEDTLS_MD_NONE,
370
+ (unsigned int) hash_length,
371
+ hash,
372
+ signature);
373
+ }
374
+ } else
375
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS */
376
+ {
377
+ status = PSA_ERROR_INVALID_ARGUMENT;
378
+ goto exit;
379
+ }
380
+
381
+ if (ret == 0) {
382
+ *signature_length = mbedtls_rsa_get_len(rsa);
383
+ }
384
+ status = mbedtls_to_psa_error(ret);
385
+
386
+ exit:
387
+ mbedtls_rsa_free(rsa);
388
+ mbedtls_free(rsa);
389
+
390
+ return status;
391
+ }
392
+
393
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS)
394
+ static int rsa_pss_expected_salt_len(psa_algorithm_t alg,
395
+ const mbedtls_rsa_context *rsa,
396
+ size_t hash_length)
397
+ {
398
+ if (PSA_ALG_IS_RSA_PSS_ANY_SALT(alg)) {
399
+ return MBEDTLS_RSA_SALT_LEN_ANY;
400
+ }
401
+ /* Otherwise: standard salt length, i.e. largest possible salt length
402
+ * up to the hash length. */
403
+ int klen = (int) mbedtls_rsa_get_len(rsa); // known to fit
404
+ int hlen = (int) hash_length; // known to fit
405
+ int room = klen - 2 - hlen;
406
+ if (room < 0) {
407
+ return 0; // there is no valid signature in this case anyway
408
+ } else if (room > hlen) {
409
+ return hlen;
410
+ } else {
411
+ return room;
412
+ }
413
+ }
414
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS */
415
+
416
+ psa_status_t mbedtls_psa_rsa_verify_hash(
417
+ const psa_key_attributes_t *attributes,
418
+ const uint8_t *key_buffer, size_t key_buffer_size,
419
+ psa_algorithm_t alg, const uint8_t *hash, size_t hash_length,
420
+ const uint8_t *signature, size_t signature_length)
421
+ {
422
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
423
+ mbedtls_rsa_context *rsa = NULL;
424
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
425
+ mbedtls_md_type_t md_alg;
426
+
427
+ status = mbedtls_psa_rsa_load_representation(attributes->type,
428
+ key_buffer,
429
+ key_buffer_size,
430
+ &rsa);
431
+ if (status != PSA_SUCCESS) {
432
+ goto exit;
433
+ }
434
+
435
+ status = psa_rsa_decode_md_type(alg, hash_length, &md_alg);
436
+ if (status != PSA_SUCCESS) {
437
+ goto exit;
438
+ }
439
+
440
+ if (signature_length != mbedtls_rsa_get_len(rsa)) {
441
+ status = PSA_ERROR_INVALID_SIGNATURE;
442
+ goto exit;
443
+ }
444
+
445
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN)
446
+ if (PSA_ALG_IS_RSA_PKCS1V15_SIGN(alg)) {
447
+ ret = mbedtls_rsa_set_padding(rsa, MBEDTLS_RSA_PKCS_V15,
448
+ MBEDTLS_MD_NONE);
449
+ if (ret == 0) {
450
+ ret = mbedtls_rsa_pkcs1_verify(rsa,
451
+ md_alg,
452
+ (unsigned int) hash_length,
453
+ hash,
454
+ signature);
455
+ }
456
+ } else
457
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN */
458
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS)
459
+ if (PSA_ALG_IS_RSA_PSS(alg)) {
460
+ ret = mbedtls_rsa_set_padding(rsa, MBEDTLS_RSA_PKCS_V21, md_alg);
461
+ if (ret == 0) {
462
+ int slen = rsa_pss_expected_salt_len(alg, rsa, hash_length);
463
+ ret = mbedtls_rsa_rsassa_pss_verify_ext(rsa,
464
+ md_alg,
465
+ (unsigned) hash_length,
466
+ hash,
467
+ md_alg,
468
+ slen,
469
+ signature);
470
+ }
471
+ } else
472
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS */
473
+ {
474
+ status = PSA_ERROR_INVALID_ARGUMENT;
475
+ goto exit;
476
+ }
477
+
478
+ /* Mbed TLS distinguishes "invalid padding" from "valid padding but
479
+ * the rest of the signature is invalid". This has little use in
480
+ * practice and PSA doesn't report this distinction. */
481
+ status = (ret == MBEDTLS_ERR_RSA_INVALID_PADDING) ?
482
+ PSA_ERROR_INVALID_SIGNATURE :
483
+ mbedtls_to_psa_error(ret);
484
+
485
+ exit:
486
+ mbedtls_rsa_free(rsa);
487
+ mbedtls_free(rsa);
488
+
489
+ return status;
490
+ }
491
+
492
+ #endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_SIGN) ||
493
+ * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PSS) */
494
+
495
+ /****************************************************************/
496
+ /* Asymmetric cryptography */
497
+ /****************************************************************/
498
+
499
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
500
+ static int psa_rsa_oaep_set_padding_mode(psa_algorithm_t alg,
501
+ mbedtls_rsa_context *rsa)
502
+ {
503
+ psa_algorithm_t hash_alg = PSA_ALG_RSA_OAEP_GET_HASH(alg);
504
+ mbedtls_md_type_t md_alg = mbedtls_md_type_from_psa_alg(hash_alg);
505
+
506
+ /* Just to get the error status right, as rsa_set_padding() doesn't
507
+ * distinguish between "bad RSA algorithm" and "unknown hash". */
508
+ if (mbedtls_md_info_from_type(md_alg) == NULL) {
509
+ return PSA_ERROR_NOT_SUPPORTED;
510
+ }
511
+
512
+ return mbedtls_rsa_set_padding(rsa, MBEDTLS_RSA_PKCS_V21, md_alg);
513
+ }
514
+ #endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */
515
+
516
+ psa_status_t mbedtls_psa_asymmetric_encrypt(const psa_key_attributes_t *attributes,
517
+ const uint8_t *key_buffer,
518
+ size_t key_buffer_size,
519
+ psa_algorithm_t alg,
520
+ const uint8_t *input,
521
+ size_t input_length,
522
+ const uint8_t *salt,
523
+ size_t salt_length,
524
+ uint8_t *output,
525
+ size_t output_size,
526
+ size_t *output_length)
527
+ {
528
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
529
+ (void) key_buffer;
530
+ (void) key_buffer_size;
531
+ (void) input;
532
+ (void) input_length;
533
+ (void) salt;
534
+ (void) salt_length;
535
+ (void) output;
536
+ (void) output_size;
537
+ (void) output_length;
538
+
539
+ if (PSA_KEY_TYPE_IS_RSA(attributes->type)) {
540
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \
541
+ defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
542
+ mbedtls_rsa_context *rsa = NULL;
543
+ status = mbedtls_psa_rsa_load_representation(attributes->type,
544
+ key_buffer,
545
+ key_buffer_size,
546
+ &rsa);
547
+ if (status != PSA_SUCCESS) {
548
+ goto rsa_exit;
549
+ }
550
+
551
+ if (output_size < mbedtls_rsa_get_len(rsa)) {
552
+ status = PSA_ERROR_BUFFER_TOO_SMALL;
553
+ goto rsa_exit;
554
+ }
555
+ #endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) ||
556
+ * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */
557
+ if (alg == PSA_ALG_RSA_PKCS1V15_CRYPT) {
558
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT)
559
+ status = mbedtls_to_psa_error(
560
+ mbedtls_rsa_pkcs1_encrypt(rsa,
561
+ mbedtls_psa_get_random,
562
+ MBEDTLS_PSA_RANDOM_STATE,
563
+ input_length,
564
+ input,
565
+ output));
566
+ #else
567
+ status = PSA_ERROR_NOT_SUPPORTED;
568
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT */
569
+ } else
570
+ if (PSA_ALG_IS_RSA_OAEP(alg)) {
571
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
572
+ status = mbedtls_to_psa_error(
573
+ psa_rsa_oaep_set_padding_mode(alg, rsa));
574
+ if (status != PSA_SUCCESS) {
575
+ goto rsa_exit;
576
+ }
577
+
578
+ status = mbedtls_to_psa_error(
579
+ mbedtls_rsa_rsaes_oaep_encrypt(rsa,
580
+ mbedtls_psa_get_random,
581
+ MBEDTLS_PSA_RANDOM_STATE,
582
+ salt, salt_length,
583
+ input_length,
584
+ input,
585
+ output));
586
+ #else
587
+ status = PSA_ERROR_NOT_SUPPORTED;
588
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP */
589
+ } else {
590
+ status = PSA_ERROR_INVALID_ARGUMENT;
591
+ }
592
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \
593
+ defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
594
+ rsa_exit:
595
+ if (status == PSA_SUCCESS) {
596
+ *output_length = mbedtls_rsa_get_len(rsa);
597
+ }
598
+
599
+ mbedtls_rsa_free(rsa);
600
+ mbedtls_free(rsa);
601
+ #endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) ||
602
+ * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */
603
+ } else {
604
+ status = PSA_ERROR_NOT_SUPPORTED;
605
+ }
606
+
607
+ return status;
608
+ }
609
+
610
+ psa_status_t mbedtls_psa_asymmetric_decrypt(const psa_key_attributes_t *attributes,
611
+ const uint8_t *key_buffer,
612
+ size_t key_buffer_size,
613
+ psa_algorithm_t alg,
614
+ const uint8_t *input,
615
+ size_t input_length,
616
+ const uint8_t *salt,
617
+ size_t salt_length,
618
+ uint8_t *output,
619
+ size_t output_size,
620
+ size_t *output_length)
621
+ {
622
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
623
+ (void) key_buffer;
624
+ (void) key_buffer_size;
625
+ (void) input;
626
+ (void) input_length;
627
+ (void) salt;
628
+ (void) salt_length;
629
+ (void) output;
630
+ (void) output_size;
631
+ (void) output_length;
632
+
633
+ *output_length = 0;
634
+
635
+ if (attributes->type == PSA_KEY_TYPE_RSA_KEY_PAIR) {
636
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \
637
+ defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
638
+ mbedtls_rsa_context *rsa = NULL;
639
+ status = mbedtls_psa_rsa_load_representation(attributes->type,
640
+ key_buffer,
641
+ key_buffer_size,
642
+ &rsa);
643
+ if (status != PSA_SUCCESS) {
644
+ goto rsa_exit;
645
+ }
646
+
647
+ if (input_length != mbedtls_rsa_get_len(rsa)) {
648
+ status = PSA_ERROR_INVALID_ARGUMENT;
649
+ goto rsa_exit;
650
+ }
651
+ #endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) ||
652
+ * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */
653
+
654
+ if (alg == PSA_ALG_RSA_PKCS1V15_CRYPT) {
655
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT)
656
+ int combined_ret = mbedtls_rsa_rsaes_pkcs1_v15_decrypt(
657
+ rsa, mbedtls_psa_get_random, MBEDTLS_PSA_RANDOM_STATE,
658
+ output_length, input, output, output_size);
659
+
660
+ /* Translate error codes from legacy to PSA.
661
+ * Success vs INVALID_PADDING vs OUTPUT_TOO_LARGE is sensitive
662
+ * (padding oracle attack), so we take care to translate that
663
+ * part in constant time.
664
+ */
665
+ int problem;
666
+ int public_ret = mbedtls_rsa_decrypt_decompose_ret(
667
+ MBEDTLS_ERR_RSA_INVALID_PADDING, PSA_ERROR_INVALID_PADDING,
668
+ MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE, PSA_ERROR_BUFFER_TOO_SMALL,
669
+ combined_ret, &problem);
670
+ status = mbedtls_to_psa_error(public_ret);
671
+ status |= problem;
672
+ #else
673
+ status = PSA_ERROR_NOT_SUPPORTED;
674
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT */
675
+ } else
676
+ if (PSA_ALG_IS_RSA_OAEP(alg)) {
677
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
678
+ status = mbedtls_to_psa_error(
679
+ psa_rsa_oaep_set_padding_mode(alg, rsa));
680
+ if (status != PSA_SUCCESS) {
681
+ goto rsa_exit;
682
+ }
683
+
684
+ status = mbedtls_to_psa_error(
685
+ mbedtls_rsa_rsaes_oaep_decrypt(rsa,
686
+ mbedtls_psa_get_random,
687
+ MBEDTLS_PSA_RANDOM_STATE,
688
+ salt, salt_length,
689
+ output_length,
690
+ input,
691
+ output,
692
+ output_size));
693
+ #else
694
+ status = PSA_ERROR_NOT_SUPPORTED;
695
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP */
696
+ } else {
697
+ status = PSA_ERROR_INVALID_ARGUMENT;
698
+ }
699
+
700
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) || \
701
+ defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
702
+ rsa_exit:
703
+ mbedtls_rsa_free(rsa);
704
+ mbedtls_free(rsa);
705
+ #endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_PKCS1V15_CRYPT) ||
706
+ * defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */
707
+ } else {
708
+ status = PSA_ERROR_NOT_SUPPORTED;
709
+ }
710
+
711
+ return status;
712
+ }
713
+
714
+ #endif /* MBEDTLS_PSA_CRYPTO_C */