@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,1250 @@
1
+ /**
2
+ * \file cipher.h
3
+ *
4
+ * \brief This file contains an abstraction interface for use with the cipher
5
+ * primitives provided by the library. It provides a common interface to all of
6
+ * the available cipher operations.
7
+ *
8
+ * \author Adriaan de Jong <dejong@fox-it.com>
9
+ */
10
+ /*
11
+ * Copyright The Mbed TLS Contributors
12
+ * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
13
+ */
14
+
15
+ #ifndef MBEDTLS_CIPHER_H
16
+ #define MBEDTLS_CIPHER_H
17
+ #include "mbedtls/private_access.h"
18
+
19
+ #include "mbedtls/build_info.h"
20
+
21
+ #include <stddef.h>
22
+ #include "mbedtls/platform_util.h"
23
+
24
+ #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
25
+ #define MBEDTLS_CIPHER_MODE_AEAD
26
+ #endif
27
+
28
+ #if defined(MBEDTLS_CIPHER_MODE_CBC)
29
+ #define MBEDTLS_CIPHER_MODE_WITH_PADDING
30
+ #endif
31
+
32
+ #if defined(MBEDTLS_CIPHER_NULL_CIPHER) || \
33
+ defined(MBEDTLS_CHACHA20_C)
34
+ #define MBEDTLS_CIPHER_MODE_STREAM
35
+ #endif
36
+
37
+ /** The selected feature is not available. */
38
+ #define MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE -0x6080
39
+ /** Bad input parameters. */
40
+ #define MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA -0x6100
41
+ /** Failed to allocate memory. */
42
+ #define MBEDTLS_ERR_CIPHER_ALLOC_FAILED -0x6180
43
+ /** Input data contains invalid padding and is rejected. */
44
+ #define MBEDTLS_ERR_CIPHER_INVALID_PADDING -0x6200
45
+ /** Decryption of block requires a full block. */
46
+ #define MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED -0x6280
47
+ /** Authentication failed (for AEAD modes). */
48
+ #define MBEDTLS_ERR_CIPHER_AUTH_FAILED -0x6300
49
+ /** The context is invalid. For example, because it was freed. */
50
+ #define MBEDTLS_ERR_CIPHER_INVALID_CONTEXT -0x6380
51
+
52
+ #define MBEDTLS_CIPHER_VARIABLE_IV_LEN 0x01 /**< Cipher accepts IVs of variable length. */
53
+ #define MBEDTLS_CIPHER_VARIABLE_KEY_LEN 0x02 /**< Cipher accepts keys of variable length. */
54
+
55
+ #ifdef __cplusplus
56
+ extern "C" {
57
+ #endif
58
+
59
+ /**
60
+ * \brief Supported cipher types.
61
+ *
62
+ * \warning DES/3DES are considered weak ciphers and their use
63
+ * constitutes a security risk. We recommend considering stronger
64
+ * ciphers instead.
65
+ */
66
+ typedef enum {
67
+ MBEDTLS_CIPHER_ID_NONE = 0, /**< Placeholder to mark the end of cipher ID lists. */
68
+ MBEDTLS_CIPHER_ID_NULL, /**< The identity cipher, treated as a stream cipher. */
69
+ MBEDTLS_CIPHER_ID_AES, /**< The AES cipher. */
70
+ MBEDTLS_CIPHER_ID_DES, /**< The DES cipher. \warning DES is considered weak. */
71
+ MBEDTLS_CIPHER_ID_3DES, /**< The Triple DES cipher. \warning 3DES is considered weak. */
72
+ MBEDTLS_CIPHER_ID_CAMELLIA, /**< The Camellia cipher. */
73
+ MBEDTLS_CIPHER_ID_ARIA, /**< The Aria cipher. */
74
+ MBEDTLS_CIPHER_ID_CHACHA20, /**< The ChaCha20 cipher. */
75
+ } mbedtls_cipher_id_t;
76
+
77
+ /**
78
+ * \brief Supported {cipher type, cipher mode} pairs.
79
+ *
80
+ * \warning DES/3DES are considered weak ciphers and their use
81
+ * constitutes a security risk. We recommend considering stronger
82
+ * ciphers instead.
83
+ */
84
+ typedef enum {
85
+ MBEDTLS_CIPHER_NONE = 0, /**< Placeholder to mark the end of cipher-pair lists. */
86
+ MBEDTLS_CIPHER_NULL, /**< The identity stream cipher. */
87
+ MBEDTLS_CIPHER_AES_128_ECB, /**< AES cipher with 128-bit ECB mode. */
88
+ MBEDTLS_CIPHER_AES_192_ECB, /**< AES cipher with 192-bit ECB mode. */
89
+ MBEDTLS_CIPHER_AES_256_ECB, /**< AES cipher with 256-bit ECB mode. */
90
+ MBEDTLS_CIPHER_AES_128_CBC, /**< AES cipher with 128-bit CBC mode. */
91
+ MBEDTLS_CIPHER_AES_192_CBC, /**< AES cipher with 192-bit CBC mode. */
92
+ MBEDTLS_CIPHER_AES_256_CBC, /**< AES cipher with 256-bit CBC mode. */
93
+ MBEDTLS_CIPHER_AES_128_CFB128, /**< AES cipher with 128-bit CFB128 mode. */
94
+ MBEDTLS_CIPHER_AES_192_CFB128, /**< AES cipher with 192-bit CFB128 mode. */
95
+ MBEDTLS_CIPHER_AES_256_CFB128, /**< AES cipher with 256-bit CFB128 mode. */
96
+ MBEDTLS_CIPHER_AES_128_CTR, /**< AES cipher with 128-bit CTR mode. */
97
+ MBEDTLS_CIPHER_AES_192_CTR, /**< AES cipher with 192-bit CTR mode. */
98
+ MBEDTLS_CIPHER_AES_256_CTR, /**< AES cipher with 256-bit CTR mode. */
99
+ MBEDTLS_CIPHER_AES_128_GCM, /**< AES cipher with 128-bit GCM mode. */
100
+ MBEDTLS_CIPHER_AES_192_GCM, /**< AES cipher with 192-bit GCM mode. */
101
+ MBEDTLS_CIPHER_AES_256_GCM, /**< AES cipher with 256-bit GCM mode. */
102
+ MBEDTLS_CIPHER_CAMELLIA_128_ECB, /**< Camellia cipher with 128-bit ECB mode. */
103
+ MBEDTLS_CIPHER_CAMELLIA_192_ECB, /**< Camellia cipher with 192-bit ECB mode. */
104
+ MBEDTLS_CIPHER_CAMELLIA_256_ECB, /**< Camellia cipher with 256-bit ECB mode. */
105
+ MBEDTLS_CIPHER_CAMELLIA_128_CBC, /**< Camellia cipher with 128-bit CBC mode. */
106
+ MBEDTLS_CIPHER_CAMELLIA_192_CBC, /**< Camellia cipher with 192-bit CBC mode. */
107
+ MBEDTLS_CIPHER_CAMELLIA_256_CBC, /**< Camellia cipher with 256-bit CBC mode. */
108
+ MBEDTLS_CIPHER_CAMELLIA_128_CFB128, /**< Camellia cipher with 128-bit CFB128 mode. */
109
+ MBEDTLS_CIPHER_CAMELLIA_192_CFB128, /**< Camellia cipher with 192-bit CFB128 mode. */
110
+ MBEDTLS_CIPHER_CAMELLIA_256_CFB128, /**< Camellia cipher with 256-bit CFB128 mode. */
111
+ MBEDTLS_CIPHER_CAMELLIA_128_CTR, /**< Camellia cipher with 128-bit CTR mode. */
112
+ MBEDTLS_CIPHER_CAMELLIA_192_CTR, /**< Camellia cipher with 192-bit CTR mode. */
113
+ MBEDTLS_CIPHER_CAMELLIA_256_CTR, /**< Camellia cipher with 256-bit CTR mode. */
114
+ MBEDTLS_CIPHER_CAMELLIA_128_GCM, /**< Camellia cipher with 128-bit GCM mode. */
115
+ MBEDTLS_CIPHER_CAMELLIA_192_GCM, /**< Camellia cipher with 192-bit GCM mode. */
116
+ MBEDTLS_CIPHER_CAMELLIA_256_GCM, /**< Camellia cipher with 256-bit GCM mode. */
117
+ MBEDTLS_CIPHER_DES_ECB, /**< DES cipher with ECB mode. \warning DES is considered weak. */
118
+ MBEDTLS_CIPHER_DES_CBC, /**< DES cipher with CBC mode. \warning DES is considered weak. */
119
+ MBEDTLS_CIPHER_DES_EDE_ECB, /**< DES cipher with EDE ECB mode. \warning 3DES is considered weak. */
120
+ MBEDTLS_CIPHER_DES_EDE_CBC, /**< DES cipher with EDE CBC mode. \warning 3DES is considered weak. */
121
+ MBEDTLS_CIPHER_DES_EDE3_ECB, /**< DES cipher with EDE3 ECB mode. \warning 3DES is considered weak. */
122
+ MBEDTLS_CIPHER_DES_EDE3_CBC, /**< DES cipher with EDE3 CBC mode. \warning 3DES is considered weak. */
123
+ MBEDTLS_CIPHER_AES_128_CCM, /**< AES cipher with 128-bit CCM mode. */
124
+ MBEDTLS_CIPHER_AES_192_CCM, /**< AES cipher with 192-bit CCM mode. */
125
+ MBEDTLS_CIPHER_AES_256_CCM, /**< AES cipher with 256-bit CCM mode. */
126
+ MBEDTLS_CIPHER_AES_128_CCM_STAR_NO_TAG, /**< AES cipher with 128-bit CCM_STAR_NO_TAG mode. */
127
+ MBEDTLS_CIPHER_AES_192_CCM_STAR_NO_TAG, /**< AES cipher with 192-bit CCM_STAR_NO_TAG mode. */
128
+ MBEDTLS_CIPHER_AES_256_CCM_STAR_NO_TAG, /**< AES cipher with 256-bit CCM_STAR_NO_TAG mode. */
129
+ MBEDTLS_CIPHER_CAMELLIA_128_CCM, /**< Camellia cipher with 128-bit CCM mode. */
130
+ MBEDTLS_CIPHER_CAMELLIA_192_CCM, /**< Camellia cipher with 192-bit CCM mode. */
131
+ MBEDTLS_CIPHER_CAMELLIA_256_CCM, /**< Camellia cipher with 256-bit CCM mode. */
132
+ MBEDTLS_CIPHER_CAMELLIA_128_CCM_STAR_NO_TAG, /**< Camellia cipher with 128-bit CCM_STAR_NO_TAG mode. */
133
+ MBEDTLS_CIPHER_CAMELLIA_192_CCM_STAR_NO_TAG, /**< Camellia cipher with 192-bit CCM_STAR_NO_TAG mode. */
134
+ MBEDTLS_CIPHER_CAMELLIA_256_CCM_STAR_NO_TAG, /**< Camellia cipher with 256-bit CCM_STAR_NO_TAG mode. */
135
+ MBEDTLS_CIPHER_ARIA_128_ECB, /**< Aria cipher with 128-bit key and ECB mode. */
136
+ MBEDTLS_CIPHER_ARIA_192_ECB, /**< Aria cipher with 192-bit key and ECB mode. */
137
+ MBEDTLS_CIPHER_ARIA_256_ECB, /**< Aria cipher with 256-bit key and ECB mode. */
138
+ MBEDTLS_CIPHER_ARIA_128_CBC, /**< Aria cipher with 128-bit key and CBC mode. */
139
+ MBEDTLS_CIPHER_ARIA_192_CBC, /**< Aria cipher with 192-bit key and CBC mode. */
140
+ MBEDTLS_CIPHER_ARIA_256_CBC, /**< Aria cipher with 256-bit key and CBC mode. */
141
+ MBEDTLS_CIPHER_ARIA_128_CFB128, /**< Aria cipher with 128-bit key and CFB-128 mode. */
142
+ MBEDTLS_CIPHER_ARIA_192_CFB128, /**< Aria cipher with 192-bit key and CFB-128 mode. */
143
+ MBEDTLS_CIPHER_ARIA_256_CFB128, /**< Aria cipher with 256-bit key and CFB-128 mode. */
144
+ MBEDTLS_CIPHER_ARIA_128_CTR, /**< Aria cipher with 128-bit key and CTR mode. */
145
+ MBEDTLS_CIPHER_ARIA_192_CTR, /**< Aria cipher with 192-bit key and CTR mode. */
146
+ MBEDTLS_CIPHER_ARIA_256_CTR, /**< Aria cipher with 256-bit key and CTR mode. */
147
+ MBEDTLS_CIPHER_ARIA_128_GCM, /**< Aria cipher with 128-bit key and GCM mode. */
148
+ MBEDTLS_CIPHER_ARIA_192_GCM, /**< Aria cipher with 192-bit key and GCM mode. */
149
+ MBEDTLS_CIPHER_ARIA_256_GCM, /**< Aria cipher with 256-bit key and GCM mode. */
150
+ MBEDTLS_CIPHER_ARIA_128_CCM, /**< Aria cipher with 128-bit key and CCM mode. */
151
+ MBEDTLS_CIPHER_ARIA_192_CCM, /**< Aria cipher with 192-bit key and CCM mode. */
152
+ MBEDTLS_CIPHER_ARIA_256_CCM, /**< Aria cipher with 256-bit key and CCM mode. */
153
+ MBEDTLS_CIPHER_ARIA_128_CCM_STAR_NO_TAG, /**< Aria cipher with 128-bit key and CCM_STAR_NO_TAG mode. */
154
+ MBEDTLS_CIPHER_ARIA_192_CCM_STAR_NO_TAG, /**< Aria cipher with 192-bit key and CCM_STAR_NO_TAG mode. */
155
+ MBEDTLS_CIPHER_ARIA_256_CCM_STAR_NO_TAG, /**< Aria cipher with 256-bit key and CCM_STAR_NO_TAG mode. */
156
+ MBEDTLS_CIPHER_AES_128_OFB, /**< AES 128-bit cipher in OFB mode. */
157
+ MBEDTLS_CIPHER_AES_192_OFB, /**< AES 192-bit cipher in OFB mode. */
158
+ MBEDTLS_CIPHER_AES_256_OFB, /**< AES 256-bit cipher in OFB mode. */
159
+ MBEDTLS_CIPHER_AES_128_XTS, /**< AES 128-bit cipher in XTS block mode. */
160
+ MBEDTLS_CIPHER_AES_256_XTS, /**< AES 256-bit cipher in XTS block mode. */
161
+ MBEDTLS_CIPHER_CHACHA20, /**< ChaCha20 stream cipher. */
162
+ MBEDTLS_CIPHER_CHACHA20_POLY1305, /**< ChaCha20-Poly1305 AEAD cipher. */
163
+ MBEDTLS_CIPHER_AES_128_KW, /**< AES cipher with 128-bit NIST KW mode. */
164
+ MBEDTLS_CIPHER_AES_192_KW, /**< AES cipher with 192-bit NIST KW mode. */
165
+ MBEDTLS_CIPHER_AES_256_KW, /**< AES cipher with 256-bit NIST KW mode. */
166
+ MBEDTLS_CIPHER_AES_128_KWP, /**< AES cipher with 128-bit NIST KWP mode. */
167
+ MBEDTLS_CIPHER_AES_192_KWP, /**< AES cipher with 192-bit NIST KWP mode. */
168
+ MBEDTLS_CIPHER_AES_256_KWP, /**< AES cipher with 256-bit NIST KWP mode. */
169
+ } mbedtls_cipher_type_t;
170
+
171
+ /** Supported cipher modes. */
172
+ typedef enum {
173
+ MBEDTLS_MODE_NONE = 0, /**< None. */
174
+ MBEDTLS_MODE_ECB, /**< The ECB cipher mode. */
175
+ MBEDTLS_MODE_CBC, /**< The CBC cipher mode. */
176
+ MBEDTLS_MODE_CFB, /**< The CFB cipher mode. */
177
+ MBEDTLS_MODE_OFB, /**< The OFB cipher mode. */
178
+ MBEDTLS_MODE_CTR, /**< The CTR cipher mode. */
179
+ MBEDTLS_MODE_GCM, /**< The GCM cipher mode. */
180
+ MBEDTLS_MODE_STREAM, /**< The stream cipher mode. */
181
+ MBEDTLS_MODE_CCM, /**< The CCM cipher mode. */
182
+ MBEDTLS_MODE_CCM_STAR_NO_TAG, /**< The CCM*-no-tag cipher mode. */
183
+ MBEDTLS_MODE_XTS, /**< The XTS cipher mode. */
184
+ MBEDTLS_MODE_CHACHAPOLY, /**< The ChaCha-Poly cipher mode. */
185
+ MBEDTLS_MODE_KW, /**< The SP800-38F KW mode */
186
+ MBEDTLS_MODE_KWP, /**< The SP800-38F KWP mode */
187
+ } mbedtls_cipher_mode_t;
188
+
189
+ /** Supported cipher padding types. */
190
+ typedef enum {
191
+ MBEDTLS_PADDING_PKCS7 = 0, /**< PKCS7 padding (default). */
192
+ MBEDTLS_PADDING_ONE_AND_ZEROS, /**< ISO/IEC 7816-4 padding. */
193
+ MBEDTLS_PADDING_ZEROS_AND_LEN, /**< ANSI X.923 padding. */
194
+ MBEDTLS_PADDING_ZEROS, /**< Zero padding (not reversible). */
195
+ MBEDTLS_PADDING_NONE, /**< Never pad (full blocks only). */
196
+ } mbedtls_cipher_padding_t;
197
+
198
+ /** Type of operation. */
199
+ typedef enum {
200
+ MBEDTLS_OPERATION_NONE = -1,
201
+ MBEDTLS_DECRYPT = 0,
202
+ MBEDTLS_ENCRYPT,
203
+ } mbedtls_operation_t;
204
+
205
+ enum {
206
+ /** Undefined key length. */
207
+ MBEDTLS_KEY_LENGTH_NONE = 0,
208
+ /** Key length, in bits (including parity), for DES keys. \warning DES is considered weak. */
209
+ MBEDTLS_KEY_LENGTH_DES = 64,
210
+ /** Key length in bits, including parity, for DES in two-key EDE. \warning 3DES is considered weak. */
211
+ MBEDTLS_KEY_LENGTH_DES_EDE = 128,
212
+ /** Key length in bits, including parity, for DES in three-key EDE. \warning 3DES is considered weak. */
213
+ MBEDTLS_KEY_LENGTH_DES_EDE3 = 192,
214
+ };
215
+
216
+ /** Maximum length of any IV, in Bytes. */
217
+ /* This should ideally be derived automatically from list of ciphers.
218
+ * This should be kept in sync with MBEDTLS_SSL_MAX_IV_LENGTH defined
219
+ * in library/ssl_misc.h. */
220
+ #define MBEDTLS_MAX_IV_LENGTH 16
221
+
222
+ /** Maximum block size of any cipher, in Bytes. */
223
+ /* This should ideally be derived automatically from list of ciphers.
224
+ * This should be kept in sync with MBEDTLS_SSL_MAX_BLOCK_LENGTH defined
225
+ * in library/ssl_misc.h. */
226
+ #define MBEDTLS_MAX_BLOCK_LENGTH 16
227
+
228
+ /** Maximum key length, in Bytes. */
229
+ /* This should ideally be derived automatically from list of ciphers.
230
+ * For now, only check whether XTS is enabled which uses 64 Byte keys,
231
+ * and use 32 Bytes as an upper bound for the maximum key length otherwise.
232
+ * This should be kept in sync with MBEDTLS_SSL_MAX_BLOCK_LENGTH defined
233
+ * in library/ssl_misc.h, which however deliberately ignores the case of XTS
234
+ * since the latter isn't used in SSL/TLS. */
235
+ #if defined(MBEDTLS_CIPHER_MODE_XTS)
236
+ #define MBEDTLS_MAX_KEY_LENGTH 64
237
+ #else
238
+ #define MBEDTLS_MAX_KEY_LENGTH 32
239
+ #endif /* MBEDTLS_CIPHER_MODE_XTS */
240
+
241
+ /**
242
+ * Base cipher information (opaque struct).
243
+ */
244
+ typedef struct mbedtls_cipher_base_t mbedtls_cipher_base_t;
245
+
246
+ /**
247
+ * CMAC context (opaque struct).
248
+ */
249
+ typedef struct mbedtls_cmac_context_t mbedtls_cmac_context_t;
250
+
251
+ /**
252
+ * Cipher information. Allows calling cipher functions
253
+ * in a generic way.
254
+ *
255
+ * \note The library does not support custom cipher info structures,
256
+ * only built-in structures returned by the functions
257
+ * mbedtls_cipher_info_from_string(),
258
+ * mbedtls_cipher_info_from_type(),
259
+ * mbedtls_cipher_info_from_values(),
260
+ * mbedtls_cipher_info_from_psa().
261
+ *
262
+ * \note Some fields store a value that has been right-shifted to save
263
+ * code-size, so should not be used directly. The accessor
264
+ * functions adjust for this and return the "natural" value.
265
+ */
266
+ typedef struct mbedtls_cipher_info_t {
267
+ /** Name of the cipher. */
268
+ const char *MBEDTLS_PRIVATE(name);
269
+
270
+ /** The block size, in bytes. */
271
+ unsigned int MBEDTLS_PRIVATE(block_size) : 5;
272
+
273
+ /** IV or nonce size, in bytes (right shifted by #MBEDTLS_IV_SIZE_SHIFT).
274
+ * For ciphers that accept variable IV sizes,
275
+ * this is the recommended size.
276
+ */
277
+ unsigned int MBEDTLS_PRIVATE(iv_size) : 3;
278
+
279
+ /** The cipher key length, in bits (right shifted by #MBEDTLS_KEY_BITLEN_SHIFT).
280
+ * This is the default length for variable sized ciphers.
281
+ * Includes parity bits for ciphers like DES.
282
+ */
283
+ unsigned int MBEDTLS_PRIVATE(key_bitlen) : 4;
284
+
285
+ /** The cipher mode (as per mbedtls_cipher_mode_t).
286
+ * For example, MBEDTLS_MODE_CBC.
287
+ */
288
+ unsigned int MBEDTLS_PRIVATE(mode) : 4;
289
+
290
+ /** Full cipher identifier (as per mbedtls_cipher_type_t).
291
+ * For example, MBEDTLS_CIPHER_AES_256_CBC.
292
+ *
293
+ * This could be 7 bits, but 8 bits retains byte alignment for the
294
+ * next field, which reduces code size to access that field.
295
+ */
296
+ unsigned int MBEDTLS_PRIVATE(type) : 8;
297
+
298
+ /** Bitflag comprised of MBEDTLS_CIPHER_VARIABLE_IV_LEN and
299
+ * MBEDTLS_CIPHER_VARIABLE_KEY_LEN indicating whether the
300
+ * cipher supports variable IV or variable key sizes, respectively.
301
+ */
302
+ unsigned int MBEDTLS_PRIVATE(flags) : 2;
303
+
304
+ /** Index to LUT for base cipher information and functions. */
305
+ unsigned int MBEDTLS_PRIVATE(base_idx) : 5;
306
+
307
+ } mbedtls_cipher_info_t;
308
+
309
+ /* For internal use only.
310
+ * These are used to more compactly represent the fields above. */
311
+ #define MBEDTLS_KEY_BITLEN_SHIFT 6
312
+ #define MBEDTLS_IV_SIZE_SHIFT 2
313
+ /**
314
+ * Generic cipher context.
315
+ */
316
+ typedef struct mbedtls_cipher_context_t {
317
+ /** Information about the associated cipher. */
318
+ const mbedtls_cipher_info_t *MBEDTLS_PRIVATE(cipher_info);
319
+
320
+ /** Key length to use. */
321
+ int MBEDTLS_PRIVATE(key_bitlen);
322
+
323
+ /** Operation that the key of the context has been
324
+ * initialized for.
325
+ */
326
+ mbedtls_operation_t MBEDTLS_PRIVATE(operation);
327
+
328
+ #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
329
+ /** Padding functions to use, if relevant for
330
+ * the specific cipher mode.
331
+ */
332
+ void(*MBEDTLS_PRIVATE(add_padding))(unsigned char *output, size_t olen,
333
+ size_t data_len);
334
+ /* Report invalid-padding condition through the output parameter
335
+ * invalid_padding. To minimize changes in Mbed TLS 3.6, where this
336
+ * declaration is in a public header, use the public type size_t
337
+ * rather than the internal type mbedtls_ct_condition_t. */
338
+ int(*MBEDTLS_PRIVATE(get_padding))(unsigned char *input, size_t ilen,
339
+ size_t *data_len,
340
+ size_t *invalid_padding);
341
+ #endif
342
+
343
+ /** Buffer for input that has not been processed yet. */
344
+ unsigned char MBEDTLS_PRIVATE(unprocessed_data)[MBEDTLS_MAX_BLOCK_LENGTH];
345
+
346
+ /** Number of Bytes that have not been processed yet. */
347
+ size_t MBEDTLS_PRIVATE(unprocessed_len);
348
+
349
+ /** Current IV or NONCE_COUNTER for CTR-mode, data unit (or sector) number
350
+ * for XTS-mode. */
351
+ unsigned char MBEDTLS_PRIVATE(iv)[MBEDTLS_MAX_IV_LENGTH];
352
+
353
+ /** IV size in Bytes, for ciphers with variable-length IVs. */
354
+ size_t MBEDTLS_PRIVATE(iv_size);
355
+
356
+ /** The cipher-specific context. */
357
+ void *MBEDTLS_PRIVATE(cipher_ctx);
358
+
359
+ #if defined(MBEDTLS_CMAC_C)
360
+ /** CMAC-specific context. */
361
+ mbedtls_cmac_context_t *MBEDTLS_PRIVATE(cmac_ctx);
362
+ #endif
363
+
364
+ #if defined(MBEDTLS_USE_PSA_CRYPTO) && !defined(MBEDTLS_DEPRECATED_REMOVED)
365
+ /** Indicates whether the cipher operations should be performed
366
+ * by Mbed TLS' own crypto library or an external implementation
367
+ * of the PSA Crypto API.
368
+ * This is unset if the cipher context was established through
369
+ * mbedtls_cipher_setup(), and set if it was established through
370
+ * mbedtls_cipher_setup_psa().
371
+ */
372
+ unsigned char MBEDTLS_PRIVATE(psa_enabled);
373
+ #endif /* MBEDTLS_USE_PSA_CRYPTO && !MBEDTLS_DEPRECATED_REMOVED */
374
+
375
+ } mbedtls_cipher_context_t;
376
+
377
+ /**
378
+ * \brief This function retrieves the list of ciphers supported
379
+ * by the generic cipher module.
380
+ *
381
+ * For any cipher identifier in the returned list, you can
382
+ * obtain the corresponding generic cipher information structure
383
+ * via mbedtls_cipher_info_from_type(), which can then be used
384
+ * to prepare a cipher context via mbedtls_cipher_setup().
385
+ *
386
+ *
387
+ * \return A statically-allocated array of cipher identifiers
388
+ * of type cipher_type_t. The last entry is zero.
389
+ */
390
+ const int *mbedtls_cipher_list(void);
391
+
392
+ /**
393
+ * \brief This function retrieves the cipher-information
394
+ * structure associated with the given cipher name.
395
+ *
396
+ * \param cipher_name Name of the cipher to search for. This must not be
397
+ * \c NULL.
398
+ *
399
+ * \return The cipher information structure associated with the
400
+ * given \p cipher_name.
401
+ * \return \c NULL if the associated cipher information is not found.
402
+ */
403
+ const mbedtls_cipher_info_t *mbedtls_cipher_info_from_string(const char *cipher_name);
404
+
405
+ /**
406
+ * \brief This function retrieves the cipher-information
407
+ * structure associated with the given cipher type.
408
+ *
409
+ * \param cipher_type Type of the cipher to search for.
410
+ *
411
+ * \return The cipher information structure associated with the
412
+ * given \p cipher_type.
413
+ * \return \c NULL if the associated cipher information is not found.
414
+ */
415
+ const mbedtls_cipher_info_t *mbedtls_cipher_info_from_type(const mbedtls_cipher_type_t cipher_type);
416
+
417
+ /**
418
+ * \brief This function retrieves the cipher-information
419
+ * structure associated with the given cipher ID,
420
+ * key size and mode.
421
+ *
422
+ * \param cipher_id The ID of the cipher to search for. For example,
423
+ * #MBEDTLS_CIPHER_ID_AES.
424
+ * \param key_bitlen The length of the key in bits.
425
+ * \param mode The cipher mode. For example, #MBEDTLS_MODE_CBC.
426
+ *
427
+ * \return The cipher information structure associated with the
428
+ * given \p cipher_id.
429
+ * \return \c NULL if the associated cipher information is not found.
430
+ */
431
+ const mbedtls_cipher_info_t *mbedtls_cipher_info_from_values(const mbedtls_cipher_id_t cipher_id,
432
+ int key_bitlen,
433
+ const mbedtls_cipher_mode_t mode);
434
+
435
+ /**
436
+ * \brief Retrieve the identifier for a cipher info structure.
437
+ *
438
+ * \param[in] info The cipher info structure to query.
439
+ * This may be \c NULL.
440
+ *
441
+ * \return The full cipher identifier (\c MBEDTLS_CIPHER_xxx).
442
+ * \return #MBEDTLS_CIPHER_NONE if \p info is \c NULL.
443
+ */
444
+ static inline mbedtls_cipher_type_t mbedtls_cipher_info_get_type(
445
+ const mbedtls_cipher_info_t *info)
446
+ {
447
+ if (info == NULL) {
448
+ return MBEDTLS_CIPHER_NONE;
449
+ } else {
450
+ return (mbedtls_cipher_type_t) info->MBEDTLS_PRIVATE(type);
451
+ }
452
+ }
453
+
454
+ /**
455
+ * \brief Retrieve the operation mode for a cipher info structure.
456
+ *
457
+ * \param[in] info The cipher info structure to query.
458
+ * This may be \c NULL.
459
+ *
460
+ * \return The cipher mode (\c MBEDTLS_MODE_xxx).
461
+ * \return #MBEDTLS_MODE_NONE if \p info is \c NULL.
462
+ */
463
+ static inline mbedtls_cipher_mode_t mbedtls_cipher_info_get_mode(
464
+ const mbedtls_cipher_info_t *info)
465
+ {
466
+ if (info == NULL) {
467
+ return MBEDTLS_MODE_NONE;
468
+ } else {
469
+ return (mbedtls_cipher_mode_t) info->MBEDTLS_PRIVATE(mode);
470
+ }
471
+ }
472
+
473
+ /**
474
+ * \brief Retrieve the key size for a cipher info structure.
475
+ *
476
+ * \param[in] info The cipher info structure to query.
477
+ * This may be \c NULL.
478
+ *
479
+ * \return The key length in bits.
480
+ * For variable-sized ciphers, this is the default length.
481
+ * For DES, this includes the parity bits.
482
+ * \return \c 0 if \p info is \c NULL.
483
+ */
484
+ static inline size_t mbedtls_cipher_info_get_key_bitlen(
485
+ const mbedtls_cipher_info_t *info)
486
+ {
487
+ if (info == NULL) {
488
+ return 0;
489
+ } else {
490
+ return ((size_t) info->MBEDTLS_PRIVATE(key_bitlen)) << MBEDTLS_KEY_BITLEN_SHIFT;
491
+ }
492
+ }
493
+
494
+ /**
495
+ * \brief Retrieve the human-readable name for a
496
+ * cipher info structure.
497
+ *
498
+ * \param[in] info The cipher info structure to query.
499
+ * This may be \c NULL.
500
+ *
501
+ * \return The cipher name, which is a human readable string,
502
+ * with static storage duration.
503
+ * \return \c NULL if \p info is \c NULL.
504
+ */
505
+ static inline const char *mbedtls_cipher_info_get_name(
506
+ const mbedtls_cipher_info_t *info)
507
+ {
508
+ if (info == NULL) {
509
+ return NULL;
510
+ } else {
511
+ return info->MBEDTLS_PRIVATE(name);
512
+ }
513
+ }
514
+
515
+ /**
516
+ * \brief This function returns the size of the IV or nonce
517
+ * for the cipher info structure, in bytes.
518
+ *
519
+ * \param info The cipher info structure. This may be \c NULL.
520
+ *
521
+ * \return The recommended IV size.
522
+ * \return \c 0 for ciphers not using an IV or a nonce.
523
+ * \return \c 0 if \p info is \c NULL.
524
+ */
525
+ static inline size_t mbedtls_cipher_info_get_iv_size(
526
+ const mbedtls_cipher_info_t *info)
527
+ {
528
+ if (info == NULL) {
529
+ return 0;
530
+ }
531
+
532
+ return ((size_t) info->MBEDTLS_PRIVATE(iv_size)) << MBEDTLS_IV_SIZE_SHIFT;
533
+ }
534
+
535
+ /**
536
+ * \brief This function returns the block size of the given
537
+ * cipher info structure in bytes.
538
+ *
539
+ * \param info The cipher info structure. This may be \c NULL.
540
+ *
541
+ * \return The block size of the cipher.
542
+ * \return \c 1 if the cipher is a stream cipher.
543
+ * \return \c 0 if \p info is \c NULL.
544
+ */
545
+ static inline size_t mbedtls_cipher_info_get_block_size(
546
+ const mbedtls_cipher_info_t *info)
547
+ {
548
+ if (info == NULL) {
549
+ return 0;
550
+ }
551
+
552
+ return (size_t) (info->MBEDTLS_PRIVATE(block_size));
553
+ }
554
+
555
+ /**
556
+ * \brief This function returns a non-zero value if the key length for
557
+ * the given cipher is variable.
558
+ *
559
+ * \param info The cipher info structure. This may be \c NULL.
560
+ *
561
+ * \return Non-zero if the key length is variable, \c 0 otherwise.
562
+ * \return \c 0 if the given pointer is \c NULL.
563
+ */
564
+ static inline int mbedtls_cipher_info_has_variable_key_bitlen(
565
+ const mbedtls_cipher_info_t *info)
566
+ {
567
+ if (info == NULL) {
568
+ return 0;
569
+ }
570
+
571
+ return info->MBEDTLS_PRIVATE(flags) & MBEDTLS_CIPHER_VARIABLE_KEY_LEN;
572
+ }
573
+
574
+ /**
575
+ * \brief This function returns a non-zero value if the IV size for
576
+ * the given cipher is variable.
577
+ *
578
+ * \param info The cipher info structure. This may be \c NULL.
579
+ *
580
+ * \return Non-zero if the IV size is variable, \c 0 otherwise.
581
+ * \return \c 0 if the given pointer is \c NULL.
582
+ */
583
+ static inline int mbedtls_cipher_info_has_variable_iv_size(
584
+ const mbedtls_cipher_info_t *info)
585
+ {
586
+ if (info == NULL) {
587
+ return 0;
588
+ }
589
+
590
+ return info->MBEDTLS_PRIVATE(flags) & MBEDTLS_CIPHER_VARIABLE_IV_LEN;
591
+ }
592
+
593
+ /**
594
+ * \brief This function initializes a \p ctx as NONE.
595
+ *
596
+ * \param ctx The context to be initialized. This must not be \c NULL.
597
+ */
598
+ void mbedtls_cipher_init(mbedtls_cipher_context_t *ctx);
599
+
600
+ /**
601
+ * \brief This function frees and clears the cipher-specific
602
+ * context of \p ctx. Freeing \p ctx itself remains the
603
+ * responsibility of the caller.
604
+ *
605
+ * \param ctx The context to be freed. If this is \c NULL, the
606
+ * function has no effect, otherwise this must point to an
607
+ * initialized context.
608
+ */
609
+ void mbedtls_cipher_free(mbedtls_cipher_context_t *ctx);
610
+
611
+
612
+ /**
613
+ * \brief This function prepares a cipher context for
614
+ * use with the given cipher primitive.
615
+ *
616
+ * \note After calling this function, you should call
617
+ * mbedtls_cipher_setkey() and, if the mode uses padding,
618
+ * mbedtls_cipher_set_padding_mode(), then for each
619
+ * message to encrypt or decrypt with this key, either:
620
+ * - mbedtls_cipher_crypt() for one-shot processing with
621
+ * non-AEAD modes;
622
+ * - mbedtls_cipher_auth_encrypt_ext() or
623
+ * mbedtls_cipher_auth_decrypt_ext() for one-shot
624
+ * processing with AEAD modes or NIST_KW;
625
+ * - for multi-part processing, see the documentation of
626
+ * mbedtls_cipher_reset().
627
+ *
628
+ * \param ctx The context to prepare. This must be initialized by
629
+ * a call to mbedtls_cipher_init() first.
630
+ * \param cipher_info The cipher to use.
631
+ *
632
+ * \return \c 0 on success.
633
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
634
+ * parameter-verification failure.
635
+ * \return #MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
636
+ * cipher-specific context fails.
637
+ */
638
+ int mbedtls_cipher_setup(mbedtls_cipher_context_t *ctx,
639
+ const mbedtls_cipher_info_t *cipher_info);
640
+
641
+ #if defined(MBEDTLS_USE_PSA_CRYPTO)
642
+ #if !defined(MBEDTLS_DEPRECATED_REMOVED)
643
+ /**
644
+ * \brief This function initializes a cipher context for
645
+ * PSA-based use with the given cipher primitive.
646
+ *
647
+ * \deprecated This function is deprecated and will be removed in a
648
+ * future version of the library.
649
+ * Please use psa_aead_xxx() / psa_cipher_xxx() directly
650
+ * instead.
651
+ *
652
+ * \note See #MBEDTLS_USE_PSA_CRYPTO for information on PSA.
653
+ *
654
+ * \param ctx The context to initialize. May not be \c NULL.
655
+ * \param cipher_info The cipher to use.
656
+ * \param taglen For AEAD ciphers, the length in bytes of the
657
+ * authentication tag to use. Subsequent uses of
658
+ * mbedtls_cipher_auth_encrypt_ext() or
659
+ * mbedtls_cipher_auth_decrypt_ext() must provide
660
+ * the same tag length.
661
+ * For non-AEAD ciphers, the value must be \c 0.
662
+ *
663
+ * \return \c 0 on success.
664
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
665
+ * parameter-verification failure.
666
+ * \return #MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
667
+ * cipher-specific context fails.
668
+ */
669
+ int MBEDTLS_DEPRECATED mbedtls_cipher_setup_psa(mbedtls_cipher_context_t *ctx,
670
+ const mbedtls_cipher_info_t *cipher_info,
671
+ size_t taglen);
672
+ #endif /* MBEDTLS_DEPRECATED_REMOVED */
673
+ #endif /* MBEDTLS_USE_PSA_CRYPTO */
674
+
675
+ /**
676
+ * \brief This function returns the block size of the given cipher
677
+ * in bytes.
678
+ *
679
+ * \param ctx The context of the cipher.
680
+ *
681
+ * \return The block size of the underlying cipher.
682
+ * \return \c 1 if the cipher is a stream cipher.
683
+ * \return \c 0 if \p ctx has not been initialized.
684
+ */
685
+ static inline unsigned int mbedtls_cipher_get_block_size(
686
+ const mbedtls_cipher_context_t *ctx)
687
+ {
688
+ if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
689
+ return 0;
690
+ }
691
+
692
+ return (unsigned int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(block_size);
693
+ }
694
+
695
+ /**
696
+ * \brief This function returns the mode of operation for
697
+ * the cipher. For example, MBEDTLS_MODE_CBC.
698
+ *
699
+ * \param ctx The context of the cipher. This must be initialized.
700
+ *
701
+ * \return The mode of operation.
702
+ * \return #MBEDTLS_MODE_NONE if \p ctx has not been initialized.
703
+ */
704
+ static inline mbedtls_cipher_mode_t mbedtls_cipher_get_cipher_mode(
705
+ const mbedtls_cipher_context_t *ctx)
706
+ {
707
+ if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
708
+ return MBEDTLS_MODE_NONE;
709
+ }
710
+
711
+ return (mbedtls_cipher_mode_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(mode);
712
+ }
713
+
714
+ /**
715
+ * \brief This function returns the size of the IV or nonce
716
+ * of the cipher, in Bytes.
717
+ *
718
+ * \param ctx The context of the cipher. This must be initialized.
719
+ *
720
+ * \return The recommended IV size if no IV has been set.
721
+ * \return \c 0 for ciphers not using an IV or a nonce.
722
+ * \return The actual size if an IV has been set.
723
+ */
724
+ static inline int mbedtls_cipher_get_iv_size(
725
+ const mbedtls_cipher_context_t *ctx)
726
+ {
727
+ if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
728
+ return 0;
729
+ }
730
+
731
+ if (ctx->MBEDTLS_PRIVATE(iv_size) != 0) {
732
+ return (int) ctx->MBEDTLS_PRIVATE(iv_size);
733
+ }
734
+
735
+ return (int) (((int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(iv_size)) <<
736
+ MBEDTLS_IV_SIZE_SHIFT);
737
+ }
738
+
739
+ /**
740
+ * \brief This function returns the type of the given cipher.
741
+ *
742
+ * \param ctx The context of the cipher. This must be initialized.
743
+ *
744
+ * \return The type of the cipher.
745
+ * \return #MBEDTLS_CIPHER_NONE if \p ctx has not been initialized.
746
+ */
747
+ static inline mbedtls_cipher_type_t mbedtls_cipher_get_type(
748
+ const mbedtls_cipher_context_t *ctx)
749
+ {
750
+ if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
751
+ return MBEDTLS_CIPHER_NONE;
752
+ }
753
+
754
+ return (mbedtls_cipher_type_t) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(type);
755
+ }
756
+
757
+ /**
758
+ * \brief This function returns the name of the given cipher
759
+ * as a string.
760
+ *
761
+ * \param ctx The context of the cipher. This must be initialized.
762
+ *
763
+ * \return The name of the cipher.
764
+ * \return NULL if \p ctx has not been not initialized.
765
+ */
766
+ static inline const char *mbedtls_cipher_get_name(
767
+ const mbedtls_cipher_context_t *ctx)
768
+ {
769
+ if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
770
+ return 0;
771
+ }
772
+
773
+ return ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(name);
774
+ }
775
+
776
+ /**
777
+ * \brief This function returns the key length of the cipher.
778
+ *
779
+ * \param ctx The context of the cipher. This must be initialized.
780
+ *
781
+ * \return The key length of the cipher in bits.
782
+ * \return #MBEDTLS_KEY_LENGTH_NONE if \p ctx has not been
783
+ * initialized.
784
+ */
785
+ static inline int mbedtls_cipher_get_key_bitlen(
786
+ const mbedtls_cipher_context_t *ctx)
787
+ {
788
+ if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
789
+ return MBEDTLS_KEY_LENGTH_NONE;
790
+ }
791
+
792
+ return (int) ctx->MBEDTLS_PRIVATE(cipher_info)->MBEDTLS_PRIVATE(key_bitlen) <<
793
+ MBEDTLS_KEY_BITLEN_SHIFT;
794
+ }
795
+
796
+ /**
797
+ * \brief This function returns the operation of the given cipher.
798
+ *
799
+ * \param ctx The context of the cipher. This must be initialized.
800
+ *
801
+ * \return The type of operation: #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT.
802
+ * \return #MBEDTLS_OPERATION_NONE if \p ctx has not been initialized.
803
+ */
804
+ static inline mbedtls_operation_t mbedtls_cipher_get_operation(
805
+ const mbedtls_cipher_context_t *ctx)
806
+ {
807
+ if (ctx->MBEDTLS_PRIVATE(cipher_info) == NULL) {
808
+ return MBEDTLS_OPERATION_NONE;
809
+ }
810
+
811
+ return ctx->MBEDTLS_PRIVATE(operation);
812
+ }
813
+
814
+ /**
815
+ * \brief This function sets the key to use with the given context.
816
+ *
817
+ * \param ctx The generic cipher context. This must be initialized and
818
+ * bound to a cipher information structure.
819
+ * \param key The key to use. This must be a readable buffer of at
820
+ * least \p key_bitlen Bits.
821
+ * \param key_bitlen The key length to use, in Bits.
822
+ * \param operation The operation that the key will be used for:
823
+ * #MBEDTLS_ENCRYPT or #MBEDTLS_DECRYPT.
824
+ *
825
+ * \return \c 0 on success.
826
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
827
+ * parameter-verification failure.
828
+ * \return A cipher-specific error code on failure.
829
+ */
830
+ int mbedtls_cipher_setkey(mbedtls_cipher_context_t *ctx,
831
+ const unsigned char *key,
832
+ int key_bitlen,
833
+ const mbedtls_operation_t operation);
834
+
835
+ #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
836
+ /**
837
+ * \brief This function sets the padding mode, for cipher modes
838
+ * that use padding.
839
+ *
840
+ *
841
+ * \param ctx The generic cipher context. This must be initialized and
842
+ * bound to a cipher information structure.
843
+ * \param mode The padding mode.
844
+ *
845
+ * \return \c 0 on success.
846
+ * \return #MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
847
+ * if the selected padding mode is not supported.
848
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if the cipher mode
849
+ * does not support padding.
850
+ */
851
+ int mbedtls_cipher_set_padding_mode(mbedtls_cipher_context_t *ctx,
852
+ mbedtls_cipher_padding_t mode);
853
+ #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */
854
+
855
+ /**
856
+ * \brief This function sets the initialization vector (IV)
857
+ * or nonce.
858
+ *
859
+ * \note Some ciphers do not use IVs nor nonce. For these
860
+ * ciphers, this function has no effect.
861
+ *
862
+ * \note For #MBEDTLS_CIPHER_CHACHA20, the nonce length must
863
+ * be 12, and the initial counter value is 0.
864
+ *
865
+ * \note For #MBEDTLS_CIPHER_CHACHA20_POLY1305, the nonce length
866
+ * must be 12.
867
+ *
868
+ * \param ctx The generic cipher context. This must be initialized and
869
+ * bound to a cipher information structure.
870
+ * \param iv The IV to use, or NONCE_COUNTER for CTR-mode ciphers. This
871
+ * must be a readable buffer of at least \p iv_len Bytes.
872
+ * \param iv_len The IV length for ciphers with variable-size IV.
873
+ * This parameter is discarded by ciphers with fixed-size IV.
874
+ *
875
+ * \return \c 0 on success.
876
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
877
+ * parameter-verification failure.
878
+ */
879
+ int mbedtls_cipher_set_iv(mbedtls_cipher_context_t *ctx,
880
+ const unsigned char *iv,
881
+ size_t iv_len);
882
+
883
+ /**
884
+ * \brief This function resets the cipher state.
885
+ *
886
+ * \note With non-AEAD ciphers, the order of calls for each message
887
+ * is as follows:
888
+ * 1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce;
889
+ * 2. mbedtls_cipher_reset();
890
+ * 3. mbedtls_cipher_update() zero, one or more times;
891
+ * 4. mbedtls_cipher_finish_padded() (recommended for decryption
892
+ * if the mode uses padding) or mbedtls_cipher_finish().
893
+ * .
894
+ * This sequence can be repeated to encrypt or decrypt multiple
895
+ * messages with the same key.
896
+ *
897
+ * \note With AEAD ciphers, the order of calls for each message
898
+ * is as follows:
899
+ * 1. mbedtls_cipher_set_iv() if the mode uses an IV/nonce;
900
+ * 2. mbedtls_cipher_reset();
901
+ * 3. mbedtls_cipher_update_ad();
902
+ * 4. mbedtls_cipher_update() zero, one or more times;
903
+ * 5. mbedtls_cipher_finish() (or mbedtls_cipher_finish_padded());
904
+ * 6. mbedtls_cipher_check_tag() (for decryption) or
905
+ * mbedtls_cipher_write_tag() (for encryption).
906
+ * .
907
+ * This sequence can be repeated to encrypt or decrypt multiple
908
+ * messages with the same key.
909
+ *
910
+ * \param ctx The generic cipher context. This must be bound to a key.
911
+ *
912
+ * \return \c 0 on success.
913
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
914
+ * parameter-verification failure.
915
+ */
916
+ int mbedtls_cipher_reset(mbedtls_cipher_context_t *ctx);
917
+
918
+ #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
919
+ /**
920
+ * \brief This function adds additional data for AEAD ciphers.
921
+ * Currently supported with GCM and ChaCha20+Poly1305.
922
+ *
923
+ * \param ctx The generic cipher context. This must be initialized.
924
+ * \param ad The additional data to use. This must be a readable
925
+ * buffer of at least \p ad_len Bytes.
926
+ * \param ad_len The length of \p ad in Bytes.
927
+ *
928
+ * \return \c 0 on success.
929
+ * \return A specific error code on failure.
930
+ */
931
+ int mbedtls_cipher_update_ad(mbedtls_cipher_context_t *ctx,
932
+ const unsigned char *ad, size_t ad_len);
933
+ #endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */
934
+
935
+ /**
936
+ * \brief The generic cipher update function. It encrypts or
937
+ * decrypts using the given cipher context. Writes as
938
+ * many block-sized blocks of data as possible to output.
939
+ * Any data that cannot be written immediately is either
940
+ * added to the next block, or flushed when
941
+ * mbedtls_cipher_finish() or mbedtls_cipher_finish_padded()
942
+ * is called.
943
+ * Exception: For MBEDTLS_MODE_ECB, expects a single block
944
+ * in size. For example, 16 Bytes for AES.
945
+ *
946
+ * \param ctx The generic cipher context. This must be initialized and
947
+ * bound to a key.
948
+ * \param input The buffer holding the input data. This must be a
949
+ * readable buffer of at least \p ilen Bytes.
950
+ * \param ilen The length of the input data.
951
+ * \param output The buffer for the output data. This must be able to
952
+ * hold at least `ilen + block_size`. This must not be the
953
+ * same buffer as \p input.
954
+ * \param olen The length of the output data, to be updated with the
955
+ * actual number of Bytes written. This must not be
956
+ * \c NULL.
957
+ *
958
+ * \return \c 0 on success.
959
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
960
+ * parameter-verification failure.
961
+ * \return #MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE on an
962
+ * unsupported mode for a cipher.
963
+ * \return A cipher-specific error code on failure.
964
+ */
965
+ int mbedtls_cipher_update(mbedtls_cipher_context_t *ctx,
966
+ const unsigned char *input,
967
+ size_t ilen, unsigned char *output,
968
+ size_t *olen);
969
+
970
+ /**
971
+ * \brief The generic cipher finalization function. If data still
972
+ * needs to be flushed from an incomplete block, the data
973
+ * contained in it is padded to the size of
974
+ * the last block, and written to the \p output buffer.
975
+ *
976
+ * \warning This function reports invalid padding through an error
977
+ * code. Adversaries may be able to decrypt encrypted
978
+ * data if they can submit chosen ciphertexts and
979
+ * detect whether it has valid padding or not,
980
+ * either through direct observation or through a side
981
+ * channel such as timing. This is known as a
982
+ * padding oracle attack.
983
+ * Therefore applications that call this function for
984
+ * decryption with a cipher that involves padding
985
+ * should take care around error handling. Preferably,
986
+ * such applications should use
987
+ * mbedtls_cipher_finish_padded() instead of this function.
988
+ *
989
+ * \param ctx The generic cipher context. This must be initialized and
990
+ * bound to a key.
991
+ * \param output The buffer to write data to. This needs to be a writable
992
+ * buffer of at least block_size Bytes.
993
+ * \param olen The length of the data written to the \p output buffer.
994
+ * This may not be \c NULL.
995
+ * Note that when decrypting in a mode with padding,
996
+ * the actual output length is sensitive and may be
997
+ * used to mount a padding oracle attack (see warning
998
+ * above), although less efficiently than through
999
+ * the invalid-padding condition.
1000
+ *
1001
+ * \return \c 0 on success.
1002
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1003
+ * parameter-verification failure.
1004
+ * \return #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption
1005
+ * expecting a full block but not receiving one.
1006
+ * \return #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
1007
+ * while decrypting. Note that invalid-padding errors
1008
+ * should be handled carefully; see the warning above.
1009
+ * \return A cipher-specific error code on failure.
1010
+ */
1011
+ int mbedtls_cipher_finish(mbedtls_cipher_context_t *ctx,
1012
+ unsigned char *output, size_t *olen);
1013
+
1014
+ /**
1015
+ * \brief The generic cipher finalization function. If data still
1016
+ * needs to be flushed from an incomplete block, the data
1017
+ * contained in it is padded to the size of
1018
+ * the last block, and written to the \p output buffer.
1019
+ *
1020
+ * \note This function is similar to mbedtls_cipher_finish().
1021
+ * The only difference is that it reports invalid padding
1022
+ * decryption differently, through the \p invalid_padding
1023
+ * parameter rather than an error code.
1024
+ * For encryption, and in modes without padding (including
1025
+ * all authenticated modes), this function is identical
1026
+ * to mbedtls_cipher_finish().
1027
+ *
1028
+ * \param[in,out] ctx The generic cipher context. This must be initialized and
1029
+ * bound to a key.
1030
+ * \param[out] output The buffer to write data to. This needs to be a writable
1031
+ * buffer of at least block_size Bytes.
1032
+ * \param[out] olen The length of the data written to the \p output buffer.
1033
+ * This may not be \c NULL.
1034
+ * Note that when decrypting in a mode with padding,
1035
+ * the actual output length is sensitive and may be
1036
+ * used to mount a padding oracle attack (see warning
1037
+ * on mbedtls_cipher_finish()).
1038
+ * \param[out] invalid_padding
1039
+ * If this function returns \c 0 on decryption,
1040
+ * \p *invalid_padding is \c 0 if the ciphertext was
1041
+ * valid, and all-bits-one if the ciphertext had invalid
1042
+ * padding.
1043
+ * On encryption, or in a mode without padding (including
1044
+ * all authenticated modes), \p *invalid_padding is \c 0
1045
+ * on success.
1046
+ * The value in \p *invalid_padding is unspecified if
1047
+ * this function returns a nonzero status.
1048
+ *
1049
+ * \return \c 0 on success.
1050
+ * Also \c 0 for decryption with invalid padding.
1051
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1052
+ * parameter-verification failure.
1053
+ * \return #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption
1054
+ * expecting a full block but not receiving one.
1055
+ * \return A cipher-specific error code on failure.
1056
+ */
1057
+ int mbedtls_cipher_finish_padded(mbedtls_cipher_context_t *ctx,
1058
+ unsigned char *output, size_t *olen,
1059
+ size_t *invalid_padding);
1060
+
1061
+ #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
1062
+ /**
1063
+ * \brief This function writes a tag for AEAD ciphers.
1064
+ * Currently supported with GCM and ChaCha20+Poly1305.
1065
+ * This must be called after mbedtls_cipher_finish()
1066
+ * or mbedtls_cipher_finish_padded().
1067
+ *
1068
+ * \param ctx The generic cipher context. This must be initialized,
1069
+ * bound to a key, and have just completed a cipher
1070
+ * operation through mbedtls_cipher_finish() the tag for
1071
+ * which should be written.
1072
+ * \param tag The buffer to write the tag to. This must be a writable
1073
+ * buffer of at least \p tag_len Bytes.
1074
+ * \param tag_len The length of the tag to write.
1075
+ *
1076
+ * \return \c 0 on success.
1077
+ * \return A specific error code on failure.
1078
+ */
1079
+ int mbedtls_cipher_write_tag(mbedtls_cipher_context_t *ctx,
1080
+ unsigned char *tag, size_t tag_len);
1081
+
1082
+ /**
1083
+ * \brief This function checks the tag for AEAD ciphers.
1084
+ * Currently supported with GCM and ChaCha20+Poly1305.
1085
+ * This must be called after mbedtls_cipher_finish()
1086
+ * or mbedtls_cipher_finish_padded().
1087
+ *
1088
+ * \param ctx The generic cipher context. This must be initialized.
1089
+ * \param tag The buffer holding the tag. This must be a readable
1090
+ * buffer of at least \p tag_len Bytes.
1091
+ * \param tag_len The length of the tag to check.
1092
+ *
1093
+ * \return \c 0 on success.
1094
+ * \return A specific error code on failure.
1095
+ */
1096
+ int mbedtls_cipher_check_tag(mbedtls_cipher_context_t *ctx,
1097
+ const unsigned char *tag, size_t tag_len);
1098
+ #endif /* MBEDTLS_GCM_C || MBEDTLS_CHACHAPOLY_C */
1099
+
1100
+ /**
1101
+ * \brief The generic all-in-one encryption/decryption function,
1102
+ * for all ciphers except AEAD constructs.
1103
+ *
1104
+ * \param ctx The generic cipher context. This must be initialized.
1105
+ * \param iv The IV to use, or NONCE_COUNTER for CTR-mode ciphers.
1106
+ * This must be a readable buffer of at least \p iv_len
1107
+ * Bytes.
1108
+ * \param iv_len The IV length for ciphers with variable-size IV.
1109
+ * This parameter is discarded by ciphers with fixed-size
1110
+ * IV.
1111
+ * \param input The buffer holding the input data. This must be a
1112
+ * readable buffer of at least \p ilen Bytes.
1113
+ * \param ilen The length of the input data in Bytes.
1114
+ * \param output The buffer for the output data. This must be able to
1115
+ * hold at least `ilen + block_size`. This must not be the
1116
+ * same buffer as \p input.
1117
+ * \param olen The length of the output data, to be updated with the
1118
+ * actual number of Bytes written. This must not be
1119
+ * \c NULL.
1120
+ *
1121
+ * \note Some ciphers do not use IVs nor nonce. For these
1122
+ * ciphers, use \p iv = NULL and \p iv_len = 0.
1123
+ *
1124
+ * \return \c 0 on success.
1125
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1126
+ * parameter-verification failure.
1127
+ * \return #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED on decryption
1128
+ * expecting a full block but not receiving one.
1129
+ * \return #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
1130
+ * while decrypting.
1131
+ * \return A cipher-specific error code on failure.
1132
+ */
1133
+ int mbedtls_cipher_crypt(mbedtls_cipher_context_t *ctx,
1134
+ const unsigned char *iv, size_t iv_len,
1135
+ const unsigned char *input, size_t ilen,
1136
+ unsigned char *output, size_t *olen);
1137
+
1138
+ #if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C)
1139
+ /**
1140
+ * \brief The authenticated encryption (AEAD/NIST_KW) function.
1141
+ *
1142
+ * \note For AEAD modes, the tag will be appended to the
1143
+ * ciphertext, as recommended by RFC 5116.
1144
+ * (NIST_KW doesn't have a separate tag.)
1145
+ *
1146
+ * \param ctx The generic cipher context. This must be initialized and
1147
+ * bound to a key, with an AEAD algorithm or NIST_KW.
1148
+ * \param iv The nonce to use. This must be a readable buffer of
1149
+ * at least \p iv_len Bytes and may be \c NULL if \p
1150
+ * iv_len is \c 0.
1151
+ * \param iv_len The length of the nonce. For AEAD ciphers, this must
1152
+ * satisfy the constraints imposed by the cipher used.
1153
+ * For NIST_KW, this must be \c 0.
1154
+ * \param ad The additional data to authenticate. This must be a
1155
+ * readable buffer of at least \p ad_len Bytes, and may
1156
+ * be \c NULL is \p ad_len is \c 0.
1157
+ * \param ad_len The length of \p ad. For NIST_KW, this must be \c 0.
1158
+ * \param input The buffer holding the input data. This must be a
1159
+ * readable buffer of at least \p ilen Bytes, and may be
1160
+ * \c NULL if \p ilen is \c 0.
1161
+ * \param ilen The length of the input data.
1162
+ * \param output The buffer for the output data. This must be a
1163
+ * writable buffer of at least \p output_len Bytes, and
1164
+ * must not be \c NULL.
1165
+ * \param output_len The length of the \p output buffer in Bytes. For AEAD
1166
+ * ciphers, this must be at least \p ilen + \p tag_len.
1167
+ * For NIST_KW, this must be at least \p ilen + 8
1168
+ * (rounded up to a multiple of 8 if KWP is used);
1169
+ * \p ilen + 15 is always a safe value.
1170
+ * \param olen This will be filled with the actual number of Bytes
1171
+ * written to the \p output buffer. This must point to a
1172
+ * writable object of type \c size_t.
1173
+ * \param tag_len The desired length of the authentication tag. For AEAD
1174
+ * ciphers, this must match the constraints imposed by
1175
+ * the cipher used, and in particular must not be \c 0.
1176
+ * For NIST_KW, this must be \c 0.
1177
+ *
1178
+ * \return \c 0 on success.
1179
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1180
+ * parameter-verification failure.
1181
+ * \return A cipher-specific error code on failure.
1182
+ */
1183
+ int mbedtls_cipher_auth_encrypt_ext(mbedtls_cipher_context_t *ctx,
1184
+ const unsigned char *iv, size_t iv_len,
1185
+ const unsigned char *ad, size_t ad_len,
1186
+ const unsigned char *input, size_t ilen,
1187
+ unsigned char *output, size_t output_len,
1188
+ size_t *olen, size_t tag_len);
1189
+
1190
+ /**
1191
+ * \brief The authenticated encryption (AEAD/NIST_KW) function.
1192
+ *
1193
+ * \note If the data is not authentic, then the output buffer
1194
+ * is zeroed out to prevent the unauthentic plaintext being
1195
+ * used, making this interface safer.
1196
+ *
1197
+ * \note For AEAD modes, the tag must be appended to the
1198
+ * ciphertext, as recommended by RFC 5116.
1199
+ * (NIST_KW doesn't have a separate tag.)
1200
+ *
1201
+ * \param ctx The generic cipher context. This must be initialized and
1202
+ * bound to a key, with an AEAD algorithm or NIST_KW.
1203
+ * \param iv The nonce to use. This must be a readable buffer of
1204
+ * at least \p iv_len Bytes and may be \c NULL if \p
1205
+ * iv_len is \c 0.
1206
+ * \param iv_len The length of the nonce. For AEAD ciphers, this must
1207
+ * satisfy the constraints imposed by the cipher used.
1208
+ * For NIST_KW, this must be \c 0.
1209
+ * \param ad The additional data to authenticate. This must be a
1210
+ * readable buffer of at least \p ad_len Bytes, and may
1211
+ * be \c NULL is \p ad_len is \c 0.
1212
+ * \param ad_len The length of \p ad. For NIST_KW, this must be \c 0.
1213
+ * \param input The buffer holding the input data. This must be a
1214
+ * readable buffer of at least \p ilen Bytes, and may be
1215
+ * \c NULL if \p ilen is \c 0.
1216
+ * \param ilen The length of the input data. For AEAD ciphers this
1217
+ * must be at least \p tag_len. For NIST_KW this must be
1218
+ * at least \c 8.
1219
+ * \param output The buffer for the output data. This must be a
1220
+ * writable buffer of at least \p output_len Bytes, and
1221
+ * may be \c NULL if \p output_len is \c 0.
1222
+ * \param output_len The length of the \p output buffer in Bytes. For AEAD
1223
+ * ciphers, this must be at least \p ilen - \p tag_len.
1224
+ * For NIST_KW, this must be at least \p ilen - 8.
1225
+ * \param olen This will be filled with the actual number of Bytes
1226
+ * written to the \p output buffer. This must point to a
1227
+ * writable object of type \c size_t.
1228
+ * \param tag_len The actual length of the authentication tag. For AEAD
1229
+ * ciphers, this must match the constraints imposed by
1230
+ * the cipher used, and in particular must not be \c 0.
1231
+ * For NIST_KW, this must be \c 0.
1232
+ *
1233
+ * \return \c 0 on success.
1234
+ * \return #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on
1235
+ * parameter-verification failure.
1236
+ * \return #MBEDTLS_ERR_CIPHER_AUTH_FAILED if data is not authentic.
1237
+ * \return A cipher-specific error code on failure.
1238
+ */
1239
+ int mbedtls_cipher_auth_decrypt_ext(mbedtls_cipher_context_t *ctx,
1240
+ const unsigned char *iv, size_t iv_len,
1241
+ const unsigned char *ad, size_t ad_len,
1242
+ const unsigned char *input, size_t ilen,
1243
+ unsigned char *output, size_t output_len,
1244
+ size_t *olen, size_t tag_len);
1245
+ #endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */
1246
+ #ifdef __cplusplus
1247
+ }
1248
+ #endif
1249
+
1250
+ #endif /* MBEDTLS_CIPHER_H */