@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,747 @@
1
+ /*
2
+ * PSA cipher driver entry points
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_cipher.h"
14
+ #include "psa_crypto_core.h"
15
+ #include "psa_crypto_random_impl.h"
16
+ #include "constant_time_internal.h"
17
+
18
+ #include "mbedtls/cipher.h"
19
+ #include "mbedtls/error.h"
20
+
21
+ #include <string.h>
22
+
23
+ /* mbedtls_cipher_values_from_psa() below only checks if the proper build symbols
24
+ * are enabled, but it does not provide any compatibility check between them
25
+ * (i.e. if the specified key works with the specified algorithm). This helper
26
+ * function is meant to provide this support.
27
+ * mbedtls_cipher_info_from_psa() might be used for the same purpose, but it
28
+ * requires CIPHER_C to be enabled.
29
+ */
30
+ static psa_status_t mbedtls_cipher_validate_values(
31
+ psa_algorithm_t alg,
32
+ psa_key_type_t key_type)
33
+ {
34
+ /* Reduce code size - hinting to the compiler about what it can assume allows the compiler to
35
+ eliminate bits of the logic below. */
36
+ #if !defined(PSA_WANT_KEY_TYPE_AES)
37
+ MBEDTLS_ASSUME(key_type != PSA_KEY_TYPE_AES);
38
+ #endif
39
+ #if !defined(PSA_WANT_KEY_TYPE_ARIA)
40
+ MBEDTLS_ASSUME(key_type != PSA_KEY_TYPE_ARIA);
41
+ #endif
42
+ #if !defined(PSA_WANT_KEY_TYPE_CAMELLIA)
43
+ MBEDTLS_ASSUME(key_type != PSA_KEY_TYPE_CAMELLIA);
44
+ #endif
45
+ #if !defined(PSA_WANT_KEY_TYPE_CHACHA20)
46
+ MBEDTLS_ASSUME(key_type != PSA_KEY_TYPE_CHACHA20);
47
+ #endif
48
+ #if !defined(PSA_WANT_KEY_TYPE_DES)
49
+ MBEDTLS_ASSUME(key_type != PSA_KEY_TYPE_DES);
50
+ #endif
51
+ #if !defined(PSA_WANT_ALG_CCM)
52
+ MBEDTLS_ASSUME(alg != PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 0));
53
+ #endif
54
+ #if !defined(PSA_WANT_ALG_GCM)
55
+ MBEDTLS_ASSUME(alg != PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_GCM, 0));
56
+ #endif
57
+ #if !defined(PSA_WANT_ALG_STREAM_CIPHER)
58
+ MBEDTLS_ASSUME(alg != PSA_ALG_STREAM_CIPHER);
59
+ #endif
60
+ #if !defined(PSA_WANT_ALG_CHACHA20_POLY1305)
61
+ MBEDTLS_ASSUME(alg != PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CHACHA20_POLY1305, 0));
62
+ #endif
63
+ #if !defined(PSA_WANT_ALG_CCM_STAR_NO_TAG)
64
+ MBEDTLS_ASSUME(alg != PSA_ALG_CCM_STAR_NO_TAG);
65
+ #endif
66
+ #if !defined(PSA_WANT_ALG_CTR)
67
+ MBEDTLS_ASSUME(alg != PSA_ALG_CTR);
68
+ #endif
69
+ #if !defined(PSA_WANT_ALG_CFB)
70
+ MBEDTLS_ASSUME(alg != PSA_ALG_CFB);
71
+ #endif
72
+ #if !defined(PSA_WANT_ALG_OFB)
73
+ MBEDTLS_ASSUME(alg != PSA_ALG_OFB);
74
+ #endif
75
+ #if !defined(PSA_WANT_ALG_ECB_NO_PADDING)
76
+ MBEDTLS_ASSUME(alg != PSA_ALG_ECB_NO_PADDING);
77
+ #endif
78
+ #if !defined(PSA_WANT_ALG_CBC_NO_PADDING)
79
+ MBEDTLS_ASSUME(alg != PSA_ALG_CBC_NO_PADDING);
80
+ #endif
81
+ #if !defined(PSA_WANT_ALG_CBC_PKCS7)
82
+ MBEDTLS_ASSUME(alg != PSA_ALG_CBC_PKCS7);
83
+ #endif
84
+ #if !defined(PSA_WANT_ALG_CMAC)
85
+ MBEDTLS_ASSUME(alg != PSA_ALG_CMAC);
86
+ #endif
87
+
88
+ if (alg == PSA_ALG_STREAM_CIPHER ||
89
+ alg == PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CHACHA20_POLY1305, 0)) {
90
+ if (key_type == PSA_KEY_TYPE_CHACHA20) {
91
+ return PSA_SUCCESS;
92
+ }
93
+ }
94
+
95
+ if (alg == PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 0) ||
96
+ alg == PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_GCM, 0) ||
97
+ alg == PSA_ALG_CCM_STAR_NO_TAG) {
98
+ if (key_type == PSA_KEY_TYPE_AES ||
99
+ key_type == PSA_KEY_TYPE_ARIA ||
100
+ key_type == PSA_KEY_TYPE_CAMELLIA) {
101
+ return PSA_SUCCESS;
102
+ }
103
+ }
104
+
105
+ if (alg == PSA_ALG_CTR ||
106
+ alg == PSA_ALG_CFB ||
107
+ alg == PSA_ALG_OFB ||
108
+ alg == PSA_ALG_XTS ||
109
+ alg == PSA_ALG_ECB_NO_PADDING ||
110
+ alg == PSA_ALG_CBC_NO_PADDING ||
111
+ alg == PSA_ALG_CBC_PKCS7 ||
112
+ alg == PSA_ALG_CMAC) {
113
+ if (key_type == PSA_KEY_TYPE_AES ||
114
+ key_type == PSA_KEY_TYPE_ARIA ||
115
+ key_type == PSA_KEY_TYPE_DES ||
116
+ key_type == PSA_KEY_TYPE_CAMELLIA) {
117
+ return PSA_SUCCESS;
118
+ }
119
+ }
120
+
121
+ return PSA_ERROR_NOT_SUPPORTED;
122
+ }
123
+
124
+ psa_status_t mbedtls_cipher_values_from_psa(
125
+ psa_algorithm_t alg,
126
+ psa_key_type_t key_type,
127
+ size_t *key_bits,
128
+ mbedtls_cipher_mode_t *mode,
129
+ mbedtls_cipher_id_t *cipher_id)
130
+ {
131
+ mbedtls_cipher_id_t cipher_id_tmp;
132
+ /* Only DES modifies key_bits */
133
+ #if !defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES)
134
+ (void) key_bits;
135
+ #endif
136
+
137
+ if (PSA_ALG_IS_AEAD(alg)) {
138
+ alg = PSA_ALG_AEAD_WITH_SHORTENED_TAG(alg, 0);
139
+ }
140
+
141
+ if (PSA_ALG_IS_CIPHER(alg) || PSA_ALG_IS_AEAD(alg)) {
142
+ switch (alg) {
143
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_STREAM_CIPHER)
144
+ case PSA_ALG_STREAM_CIPHER:
145
+ *mode = MBEDTLS_MODE_STREAM;
146
+ break;
147
+ #endif
148
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_CTR)
149
+ case PSA_ALG_CTR:
150
+ *mode = MBEDTLS_MODE_CTR;
151
+ break;
152
+ #endif
153
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_CFB)
154
+ case PSA_ALG_CFB:
155
+ *mode = MBEDTLS_MODE_CFB;
156
+ break;
157
+ #endif
158
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_OFB)
159
+ case PSA_ALG_OFB:
160
+ *mode = MBEDTLS_MODE_OFB;
161
+ break;
162
+ #endif
163
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING)
164
+ case PSA_ALG_ECB_NO_PADDING:
165
+ *mode = MBEDTLS_MODE_ECB;
166
+ break;
167
+ #endif
168
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING)
169
+ case PSA_ALG_CBC_NO_PADDING:
170
+ *mode = MBEDTLS_MODE_CBC;
171
+ break;
172
+ #endif
173
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7)
174
+ case PSA_ALG_CBC_PKCS7:
175
+ *mode = MBEDTLS_MODE_CBC;
176
+ break;
177
+ #endif
178
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_CCM_STAR_NO_TAG)
179
+ case PSA_ALG_CCM_STAR_NO_TAG:
180
+ *mode = MBEDTLS_MODE_CCM_STAR_NO_TAG;
181
+ break;
182
+ #endif
183
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_CCM)
184
+ case PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CCM, 0):
185
+ *mode = MBEDTLS_MODE_CCM;
186
+ break;
187
+ #endif
188
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_GCM)
189
+ case PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_GCM, 0):
190
+ *mode = MBEDTLS_MODE_GCM;
191
+ break;
192
+ #endif
193
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_CHACHA20_POLY1305)
194
+ case PSA_ALG_AEAD_WITH_SHORTENED_TAG(PSA_ALG_CHACHA20_POLY1305, 0):
195
+ *mode = MBEDTLS_MODE_CHACHAPOLY;
196
+ break;
197
+ #endif
198
+ default:
199
+ return PSA_ERROR_NOT_SUPPORTED;
200
+ }
201
+ } else if (alg == PSA_ALG_CMAC) {
202
+ *mode = MBEDTLS_MODE_ECB;
203
+ } else {
204
+ return PSA_ERROR_NOT_SUPPORTED;
205
+ }
206
+
207
+ switch (key_type) {
208
+ #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_AES)
209
+ case PSA_KEY_TYPE_AES:
210
+ cipher_id_tmp = MBEDTLS_CIPHER_ID_AES;
211
+ break;
212
+ #endif
213
+ #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ARIA)
214
+ case PSA_KEY_TYPE_ARIA:
215
+ cipher_id_tmp = MBEDTLS_CIPHER_ID_ARIA;
216
+ break;
217
+ #endif
218
+ #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES)
219
+ case PSA_KEY_TYPE_DES:
220
+ /* key_bits is 64 for Single-DES, 128 for two-key Triple-DES,
221
+ * and 192 for three-key Triple-DES. */
222
+ if (*key_bits == 64) {
223
+ cipher_id_tmp = MBEDTLS_CIPHER_ID_DES;
224
+ } else {
225
+ cipher_id_tmp = MBEDTLS_CIPHER_ID_3DES;
226
+ }
227
+ /* mbedtls doesn't recognize two-key Triple-DES as an algorithm,
228
+ * but two-key Triple-DES is functionally three-key Triple-DES
229
+ * with K1=K3, so that's how we present it to mbedtls. */
230
+ if (*key_bits == 128) {
231
+ *key_bits = 192;
232
+ }
233
+ break;
234
+ #endif
235
+ #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_CAMELLIA)
236
+ case PSA_KEY_TYPE_CAMELLIA:
237
+ cipher_id_tmp = MBEDTLS_CIPHER_ID_CAMELLIA;
238
+ break;
239
+ #endif
240
+ #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_CHACHA20)
241
+ case PSA_KEY_TYPE_CHACHA20:
242
+ cipher_id_tmp = MBEDTLS_CIPHER_ID_CHACHA20;
243
+ break;
244
+ #endif
245
+ default:
246
+ return PSA_ERROR_NOT_SUPPORTED;
247
+ }
248
+ if (cipher_id != NULL) {
249
+ *cipher_id = cipher_id_tmp;
250
+ }
251
+
252
+ return mbedtls_cipher_validate_values(alg, key_type);
253
+ }
254
+
255
+ #if defined(MBEDTLS_CIPHER_C)
256
+ const mbedtls_cipher_info_t *mbedtls_cipher_info_from_psa(
257
+ psa_algorithm_t alg,
258
+ psa_key_type_t key_type,
259
+ size_t key_bits,
260
+ mbedtls_cipher_id_t *cipher_id)
261
+ {
262
+ mbedtls_cipher_mode_t mode;
263
+ psa_status_t status;
264
+ mbedtls_cipher_id_t cipher_id_tmp = MBEDTLS_CIPHER_ID_NONE;
265
+
266
+ status = mbedtls_cipher_values_from_psa(alg, key_type, &key_bits, &mode, &cipher_id_tmp);
267
+ if (status != PSA_SUCCESS) {
268
+ return NULL;
269
+ }
270
+ if (cipher_id != NULL) {
271
+ *cipher_id = cipher_id_tmp;
272
+ }
273
+
274
+ return mbedtls_cipher_info_from_values(cipher_id_tmp, (int) key_bits, mode);
275
+ }
276
+ #endif /* MBEDTLS_CIPHER_C */
277
+
278
+ #if defined(MBEDTLS_PSA_BUILTIN_CIPHER)
279
+
280
+ static psa_status_t psa_cipher_setup(
281
+ mbedtls_psa_cipher_operation_t *operation,
282
+ const psa_key_attributes_t *attributes,
283
+ const uint8_t *key_buffer, size_t key_buffer_size,
284
+ psa_algorithm_t alg,
285
+ mbedtls_operation_t cipher_operation)
286
+ {
287
+ int ret = 0;
288
+ size_t key_bits;
289
+ const mbedtls_cipher_info_t *cipher_info = NULL;
290
+ psa_key_type_t key_type = attributes->type;
291
+
292
+ (void) key_buffer_size;
293
+
294
+ mbedtls_cipher_init(&operation->ctx.cipher);
295
+
296
+ operation->alg = alg;
297
+ key_bits = attributes->bits;
298
+ cipher_info = mbedtls_cipher_info_from_psa(alg, key_type,
299
+ key_bits, NULL);
300
+ if (cipher_info == NULL) {
301
+ return PSA_ERROR_NOT_SUPPORTED;
302
+ }
303
+
304
+ ret = mbedtls_cipher_setup(&operation->ctx.cipher, cipher_info);
305
+ if (ret != 0) {
306
+ goto exit;
307
+ }
308
+
309
+ #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_DES)
310
+ if (key_type == PSA_KEY_TYPE_DES && key_bits == 128) {
311
+ /* Two-key Triple-DES is 3-key Triple-DES with K1=K3 */
312
+ uint8_t keys[24];
313
+ memcpy(keys, key_buffer, 16);
314
+ memcpy(keys + 16, key_buffer, 8);
315
+ ret = mbedtls_cipher_setkey(&operation->ctx.cipher,
316
+ keys,
317
+ 192, cipher_operation);
318
+ } else
319
+ #endif
320
+ {
321
+ ret = mbedtls_cipher_setkey(&operation->ctx.cipher, key_buffer,
322
+ (int) key_bits, cipher_operation);
323
+ }
324
+ if (ret != 0) {
325
+ goto exit;
326
+ }
327
+
328
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING) || \
329
+ defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7)
330
+ switch (alg) {
331
+ case PSA_ALG_CBC_NO_PADDING:
332
+ ret = mbedtls_cipher_set_padding_mode(&operation->ctx.cipher,
333
+ MBEDTLS_PADDING_NONE);
334
+ break;
335
+ case PSA_ALG_CBC_PKCS7:
336
+ ret = mbedtls_cipher_set_padding_mode(&operation->ctx.cipher,
337
+ MBEDTLS_PADDING_PKCS7);
338
+ break;
339
+ default:
340
+ /* The algorithm doesn't involve padding. */
341
+ ret = 0;
342
+ break;
343
+ }
344
+ if (ret != 0) {
345
+ goto exit;
346
+ }
347
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING ||
348
+ MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7 */
349
+
350
+ operation->block_length = (PSA_ALG_IS_STREAM_CIPHER(alg) ? 1 :
351
+ PSA_BLOCK_CIPHER_BLOCK_LENGTH(key_type));
352
+ operation->iv_length = PSA_CIPHER_IV_LENGTH(key_type, alg);
353
+
354
+ exit:
355
+ return mbedtls_to_psa_error(ret);
356
+ }
357
+
358
+ psa_status_t mbedtls_psa_cipher_encrypt_setup(
359
+ mbedtls_psa_cipher_operation_t *operation,
360
+ const psa_key_attributes_t *attributes,
361
+ const uint8_t *key_buffer, size_t key_buffer_size,
362
+ psa_algorithm_t alg)
363
+ {
364
+ return psa_cipher_setup(operation, attributes,
365
+ key_buffer, key_buffer_size,
366
+ alg, MBEDTLS_ENCRYPT);
367
+ }
368
+
369
+ psa_status_t mbedtls_psa_cipher_decrypt_setup(
370
+ mbedtls_psa_cipher_operation_t *operation,
371
+ const psa_key_attributes_t *attributes,
372
+ const uint8_t *key_buffer, size_t key_buffer_size,
373
+ psa_algorithm_t alg)
374
+ {
375
+ return psa_cipher_setup(operation, attributes,
376
+ key_buffer, key_buffer_size,
377
+ alg, MBEDTLS_DECRYPT);
378
+ }
379
+
380
+ psa_status_t mbedtls_psa_cipher_set_iv(
381
+ mbedtls_psa_cipher_operation_t *operation,
382
+ const uint8_t *iv, size_t iv_length)
383
+ {
384
+ if (iv_length != operation->iv_length) {
385
+ return PSA_ERROR_INVALID_ARGUMENT;
386
+ }
387
+
388
+ return mbedtls_to_psa_error(
389
+ mbedtls_cipher_set_iv(&operation->ctx.cipher,
390
+ iv, iv_length));
391
+ }
392
+
393
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING)
394
+ /** Process input for which the algorithm is set to ECB mode.
395
+ *
396
+ * This requires manual processing, since the PSA API is defined as being
397
+ * able to process arbitrary-length calls to psa_cipher_update() with ECB mode,
398
+ * but the underlying mbedtls_cipher_update only takes full blocks.
399
+ *
400
+ * \param ctx The mbedtls cipher context to use. It must have been
401
+ * set up for ECB.
402
+ * \param[in] input The input plaintext or ciphertext to process.
403
+ * \param input_length The number of bytes to process from \p input.
404
+ * This does not need to be aligned to a block boundary.
405
+ * If there is a partial block at the end of the input,
406
+ * it is stored in \p ctx for future processing.
407
+ * \param output The buffer where the output is written. It must be
408
+ * at least `BS * floor((p + input_length) / BS)` bytes
409
+ * long, where `p` is the number of bytes in the
410
+ * unprocessed partial block in \p ctx (with
411
+ * `0 <= p <= BS - 1`) and `BS` is the block size.
412
+ * \param output_length On success, the number of bytes written to \p output.
413
+ * \c 0 on error.
414
+ *
415
+ * \return #PSA_SUCCESS or an error from a hardware accelerator
416
+ */
417
+ static psa_status_t psa_cipher_update_ecb(
418
+ mbedtls_cipher_context_t *ctx,
419
+ const uint8_t *input,
420
+ size_t input_length,
421
+ uint8_t *output,
422
+ size_t *output_length)
423
+ {
424
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
425
+ size_t block_size = mbedtls_cipher_info_get_block_size(ctx->cipher_info);
426
+ size_t internal_output_length = 0;
427
+ *output_length = 0;
428
+
429
+ if (input_length == 0) {
430
+ status = PSA_SUCCESS;
431
+ goto exit;
432
+ }
433
+
434
+ if (ctx->unprocessed_len > 0) {
435
+ /* Fill up to block size, and run the block if there's a full one. */
436
+ size_t bytes_to_copy = block_size - ctx->unprocessed_len;
437
+
438
+ if (input_length < bytes_to_copy) {
439
+ bytes_to_copy = input_length;
440
+ }
441
+
442
+ memcpy(&(ctx->unprocessed_data[ctx->unprocessed_len]),
443
+ input, bytes_to_copy);
444
+ input_length -= bytes_to_copy;
445
+ input += bytes_to_copy;
446
+ ctx->unprocessed_len += bytes_to_copy;
447
+
448
+ if (ctx->unprocessed_len == block_size) {
449
+ status = mbedtls_to_psa_error(
450
+ mbedtls_cipher_update(ctx,
451
+ ctx->unprocessed_data,
452
+ block_size,
453
+ output, &internal_output_length));
454
+
455
+ if (status != PSA_SUCCESS) {
456
+ goto exit;
457
+ }
458
+
459
+ output += internal_output_length;
460
+ *output_length += internal_output_length;
461
+ ctx->unprocessed_len = 0;
462
+ }
463
+ }
464
+
465
+ while (input_length >= block_size) {
466
+ /* Run all full blocks we have, one by one */
467
+ status = mbedtls_to_psa_error(
468
+ mbedtls_cipher_update(ctx, input,
469
+ block_size,
470
+ output, &internal_output_length));
471
+
472
+ if (status != PSA_SUCCESS) {
473
+ goto exit;
474
+ }
475
+
476
+ input_length -= block_size;
477
+ input += block_size;
478
+
479
+ output += internal_output_length;
480
+ *output_length += internal_output_length;
481
+ }
482
+
483
+ if (input_length > 0) {
484
+ /* Save unprocessed bytes for later processing */
485
+ memcpy(&(ctx->unprocessed_data[ctx->unprocessed_len]),
486
+ input, input_length);
487
+ ctx->unprocessed_len += input_length;
488
+ }
489
+
490
+ status = PSA_SUCCESS;
491
+
492
+ exit:
493
+ return status;
494
+ }
495
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING */
496
+
497
+ psa_status_t mbedtls_psa_cipher_update(
498
+ mbedtls_psa_cipher_operation_t *operation,
499
+ const uint8_t *input, size_t input_length,
500
+ uint8_t *output, size_t output_size, size_t *output_length)
501
+ {
502
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
503
+ size_t expected_output_size;
504
+
505
+ if (!PSA_ALG_IS_STREAM_CIPHER(operation->alg)) {
506
+ /* Take the unprocessed partial block left over from previous
507
+ * update calls, if any, plus the input to this call. Remove
508
+ * the last partial block, if any. You get the data that will be
509
+ * output in this call. */
510
+ expected_output_size =
511
+ (operation->ctx.cipher.unprocessed_len + input_length)
512
+ / operation->block_length * operation->block_length;
513
+ } else {
514
+ expected_output_size = input_length;
515
+ }
516
+
517
+ if (output_size < expected_output_size) {
518
+ return PSA_ERROR_BUFFER_TOO_SMALL;
519
+ }
520
+
521
+ #if defined(MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING)
522
+ if (operation->alg == PSA_ALG_ECB_NO_PADDING) {
523
+ /* mbedtls_cipher_update has an API inconsistency: it will only
524
+ * process a single block at a time in ECB mode. Abstract away that
525
+ * inconsistency here to match the PSA API behaviour. */
526
+ status = psa_cipher_update_ecb(&operation->ctx.cipher,
527
+ input,
528
+ input_length,
529
+ output,
530
+ output_length);
531
+ } else
532
+ #endif /* MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING */
533
+ if (input_length == 0) {
534
+ /* There is no input, nothing to be done */
535
+ *output_length = 0;
536
+ status = PSA_SUCCESS;
537
+ } else {
538
+ status = mbedtls_to_psa_error(
539
+ mbedtls_cipher_update(&operation->ctx.cipher, input,
540
+ input_length, output, output_length));
541
+
542
+ if (*output_length > output_size) {
543
+ return PSA_ERROR_CORRUPTION_DETECTED;
544
+ }
545
+ }
546
+
547
+ return status;
548
+ }
549
+
550
+ psa_status_t mbedtls_psa_cipher_finish(
551
+ mbedtls_psa_cipher_operation_t *operation,
552
+ uint8_t *output, size_t output_size, size_t *output_length)
553
+ {
554
+ psa_status_t status = PSA_ERROR_GENERIC_ERROR;
555
+ size_t invalid_padding = 0;
556
+
557
+ /* We will copy output_size bytes from temp_output_buffer to the
558
+ * output buffer. We can't use *output_length to determine how
559
+ * much to copy because we must not leak that value through timing
560
+ * when doing decryption with unpadding. But the underlying function
561
+ * is not guaranteed to write beyond *output_length. To ensure we don't
562
+ * leak the former content of the stack to the caller, wipe that
563
+ * former content. */
564
+ uint8_t temp_output_buffer[MBEDTLS_MAX_BLOCK_LENGTH] = { 0 };
565
+ if (output_size > sizeof(temp_output_buffer)) {
566
+ output_size = sizeof(temp_output_buffer);
567
+ }
568
+
569
+ if (operation->ctx.cipher.unprocessed_len != 0) {
570
+ if (operation->alg == PSA_ALG_ECB_NO_PADDING ||
571
+ operation->alg == PSA_ALG_CBC_NO_PADDING) {
572
+ status = PSA_ERROR_INVALID_ARGUMENT;
573
+ goto exit;
574
+ }
575
+ }
576
+
577
+ status = mbedtls_to_psa_error(
578
+ mbedtls_cipher_finish_padded(&operation->ctx.cipher,
579
+ temp_output_buffer,
580
+ output_length,
581
+ &invalid_padding));
582
+ if (status != PSA_SUCCESS) {
583
+ goto exit;
584
+ }
585
+
586
+ if (output_size == 0) {
587
+ ; /* Nothing to copy. Note that output may be NULL in this case. */
588
+ } else {
589
+ /* Do not use the value of *output_length to determine how much
590
+ * to copy. When decrypting a padded cipher, the output length is
591
+ * sensitive, and leaking it could allow a padding oracle attack. */
592
+ memcpy(output, temp_output_buffer, output_size);
593
+ }
594
+
595
+ status = mbedtls_ct_error_if_else_0(invalid_padding,
596
+ PSA_ERROR_INVALID_PADDING);
597
+ mbedtls_ct_condition_t buffer_too_small =
598
+ mbedtls_ct_uint_lt(output_size, *output_length);
599
+ status = mbedtls_ct_error_if(buffer_too_small,
600
+ PSA_ERROR_BUFFER_TOO_SMALL,
601
+ status);
602
+
603
+ exit:
604
+ mbedtls_platform_zeroize(temp_output_buffer,
605
+ sizeof(temp_output_buffer));
606
+ return status;
607
+ }
608
+
609
+ psa_status_t mbedtls_psa_cipher_abort(
610
+ mbedtls_psa_cipher_operation_t *operation)
611
+ {
612
+ /* Sanity check (shouldn't happen: operation->alg should
613
+ * always have been initialized to a valid value). */
614
+ if (!PSA_ALG_IS_CIPHER(operation->alg)) {
615
+ return PSA_ERROR_BAD_STATE;
616
+ }
617
+
618
+ mbedtls_cipher_free(&operation->ctx.cipher);
619
+
620
+ return PSA_SUCCESS;
621
+ }
622
+
623
+ psa_status_t mbedtls_psa_cipher_encrypt(
624
+ const psa_key_attributes_t *attributes,
625
+ const uint8_t *key_buffer,
626
+ size_t key_buffer_size,
627
+ psa_algorithm_t alg,
628
+ const uint8_t *iv,
629
+ size_t iv_length,
630
+ const uint8_t *input,
631
+ size_t input_length,
632
+ uint8_t *output,
633
+ size_t output_size,
634
+ size_t *output_length)
635
+ {
636
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
637
+ mbedtls_psa_cipher_operation_t operation = MBEDTLS_PSA_CIPHER_OPERATION_INIT;
638
+ size_t update_output_length, finish_output_length;
639
+
640
+ status = mbedtls_psa_cipher_encrypt_setup(&operation, attributes,
641
+ key_buffer, key_buffer_size,
642
+ alg);
643
+ if (status != PSA_SUCCESS) {
644
+ goto exit;
645
+ }
646
+
647
+ if (iv_length > 0) {
648
+ status = mbedtls_psa_cipher_set_iv(&operation, iv, iv_length);
649
+ if (status != PSA_SUCCESS) {
650
+ goto exit;
651
+ }
652
+ }
653
+
654
+ status = mbedtls_psa_cipher_update(&operation, input, input_length,
655
+ output, output_size,
656
+ &update_output_length);
657
+ if (status != PSA_SUCCESS) {
658
+ goto exit;
659
+ }
660
+
661
+ status = mbedtls_psa_cipher_finish(
662
+ &operation,
663
+ mbedtls_buffer_offset(output, update_output_length),
664
+ output_size - update_output_length, &finish_output_length);
665
+ if (status != PSA_SUCCESS) {
666
+ goto exit;
667
+ }
668
+
669
+ *output_length = update_output_length + finish_output_length;
670
+
671
+ exit:
672
+ if (status == PSA_SUCCESS) {
673
+ status = mbedtls_psa_cipher_abort(&operation);
674
+ } else {
675
+ mbedtls_psa_cipher_abort(&operation);
676
+ }
677
+
678
+ return status;
679
+ }
680
+
681
+ psa_status_t mbedtls_psa_cipher_decrypt(
682
+ const psa_key_attributes_t *attributes,
683
+ const uint8_t *key_buffer,
684
+ size_t key_buffer_size,
685
+ psa_algorithm_t alg,
686
+ const uint8_t *input,
687
+ size_t input_length,
688
+ uint8_t *output,
689
+ size_t output_size,
690
+ size_t *output_length)
691
+ {
692
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
693
+ mbedtls_psa_cipher_operation_t operation = MBEDTLS_PSA_CIPHER_OPERATION_INIT;
694
+ size_t olength, accumulated_length;
695
+
696
+ status = mbedtls_psa_cipher_decrypt_setup(&operation, attributes,
697
+ key_buffer, key_buffer_size,
698
+ alg);
699
+ if (status != PSA_SUCCESS) {
700
+ goto exit;
701
+ }
702
+
703
+ if (operation.iv_length > 0) {
704
+ status = mbedtls_psa_cipher_set_iv(&operation,
705
+ input, operation.iv_length);
706
+ if (status != PSA_SUCCESS) {
707
+ goto exit;
708
+ }
709
+ }
710
+
711
+ status = mbedtls_psa_cipher_update(
712
+ &operation,
713
+ mbedtls_buffer_offset_const(input, operation.iv_length),
714
+ input_length - operation.iv_length,
715
+ output, output_size, &olength);
716
+ if (status != PSA_SUCCESS) {
717
+ goto exit;
718
+ }
719
+
720
+ accumulated_length = olength;
721
+
722
+ status = mbedtls_psa_cipher_finish(
723
+ &operation,
724
+ mbedtls_buffer_offset(output, accumulated_length),
725
+ output_size - accumulated_length, &olength);
726
+
727
+ *output_length = accumulated_length + olength;
728
+
729
+ exit:
730
+ /* C99 doesn't allow a declaration to follow a label */;
731
+ psa_status_t abort_status = mbedtls_psa_cipher_abort(&operation);
732
+ /* Normally abort shouldn't fail unless the operation is in a bad
733
+ * state, in which case we'd expect finish to fail with the same error.
734
+ * So it doesn't matter much which call's error code we pick when both
735
+ * fail. However, in unauthenticated decryption specifically, the
736
+ * distinction between PSA_SUCCESS and PSA_ERROR_INVALID_PADDING is
737
+ * security-sensitive (risk of a padding oracle attack), so here we
738
+ * must not have a code path that depends on the value of status. */
739
+ if (abort_status != PSA_SUCCESS) {
740
+ status = abort_status;
741
+ }
742
+
743
+ return status;
744
+ }
745
+ #endif /* MBEDTLS_PSA_BUILTIN_CIPHER */
746
+
747
+ #endif /* MBEDTLS_PSA_CRYPTO_C */