@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,789 @@
1
+ /*
2
+ * The LM-OTS one-time public-key signature scheme
3
+ *
4
+ * Copyright The Mbed TLS Contributors
5
+ * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
6
+ */
7
+
8
+ /*
9
+ * The following sources were referenced in the design of this implementation
10
+ * of the LM-OTS algorithm:
11
+ *
12
+ * [1] IETF RFC8554
13
+ * D. McGrew, M. Curcio, S.Fluhrer
14
+ * https://datatracker.ietf.org/doc/html/rfc8554
15
+ *
16
+ * [2] NIST Special Publication 800-208
17
+ * David A. Cooper et. al.
18
+ * https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-208.pdf
19
+ */
20
+
21
+ #include "common.h"
22
+
23
+ #if defined(MBEDTLS_LMS_C)
24
+
25
+ #include <string.h>
26
+
27
+ #include "lmots.h"
28
+
29
+ #include "mbedtls/lms.h"
30
+ #include "mbedtls/platform_util.h"
31
+ #include "mbedtls/error.h"
32
+ #include "psa_util_internal.h"
33
+
34
+ #include "psa/crypto.h"
35
+
36
+ /* Define a local translating function to save code size by not using too many
37
+ * arguments in each translating place. */
38
+ static int local_err_translation(psa_status_t status)
39
+ {
40
+ return psa_status_to_mbedtls(status, psa_to_lms_errors,
41
+ ARRAY_LENGTH(psa_to_lms_errors),
42
+ psa_generic_status_to_mbedtls);
43
+ }
44
+ #define PSA_TO_MBEDTLS_ERR(status) local_err_translation(status)
45
+
46
+ #define PUBLIC_KEY_TYPE_OFFSET (0)
47
+ #define PUBLIC_KEY_I_KEY_ID_OFFSET (PUBLIC_KEY_TYPE_OFFSET + \
48
+ MBEDTLS_LMOTS_TYPE_LEN)
49
+ #define PUBLIC_KEY_Q_LEAF_ID_OFFSET (PUBLIC_KEY_I_KEY_ID_OFFSET + \
50
+ MBEDTLS_LMOTS_I_KEY_ID_LEN)
51
+ #define PUBLIC_KEY_KEY_HASH_OFFSET (PUBLIC_KEY_Q_LEAF_ID_OFFSET + \
52
+ MBEDTLS_LMOTS_Q_LEAF_ID_LEN)
53
+
54
+ /* We only support parameter sets that use 8-bit digits, as it does not require
55
+ * translation logic between digits and bytes */
56
+ #define W_WINTERNITZ_PARAMETER (8u)
57
+ #define CHECKSUM_LEN (2)
58
+ #define I_DIGIT_IDX_LEN (2)
59
+ #define J_HASH_IDX_LEN (1)
60
+ #define D_CONST_LEN (2)
61
+
62
+ #define DIGIT_MAX_VALUE ((1u << W_WINTERNITZ_PARAMETER) - 1u)
63
+
64
+ #define D_CONST_LEN (2)
65
+ static const unsigned char D_PUBLIC_CONSTANT_BYTES[D_CONST_LEN] = { 0x80, 0x80 };
66
+ static const unsigned char D_MESSAGE_CONSTANT_BYTES[D_CONST_LEN] = { 0x81, 0x81 };
67
+
68
+ #if defined(MBEDTLS_TEST_HOOKS)
69
+ int (*mbedtls_lmots_sign_private_key_invalidated_hook)(unsigned char *) = NULL;
70
+ #endif /* defined(MBEDTLS_TEST_HOOKS) */
71
+
72
+ /* Calculate the checksum digits that are appended to the end of the LMOTS digit
73
+ * string. See NIST SP800-208 section 3.1 or RFC8554 Algorithm 2 for details of
74
+ * the checksum algorithm.
75
+ *
76
+ * params The LMOTS parameter set, I and q values which
77
+ * describe the key being used.
78
+ *
79
+ * digest The digit string to create the digest from. As
80
+ * this does not contain a checksum, it is the same
81
+ * size as a hash output.
82
+ */
83
+ static unsigned short lmots_checksum_calculate(const mbedtls_lmots_parameters_t *params,
84
+ const unsigned char *digest)
85
+ {
86
+ size_t idx;
87
+ unsigned sum = 0;
88
+
89
+ for (idx = 0; idx < MBEDTLS_LMOTS_N_HASH_LEN(params->type); idx++) {
90
+ sum += DIGIT_MAX_VALUE - digest[idx];
91
+ }
92
+
93
+ return sum;
94
+ }
95
+
96
+ /* Create the string of digest digits (in the base determined by the Winternitz
97
+ * parameter with the checksum appended to the end (Q || cksm(Q)). See NIST
98
+ * SP800-208 section 3.1 or RFC8554 Algorithm 3 step 5 (also used in Algorithm
99
+ * 4b step 3) for details.
100
+ *
101
+ * params The LMOTS parameter set, I and q values which
102
+ * describe the key being used.
103
+ *
104
+ * msg The message that will be hashed to create the
105
+ * digest.
106
+ *
107
+ * msg_size The size of the message.
108
+ *
109
+ * C_random_value The random value that will be combined with the
110
+ * message digest. This is always the same size as a
111
+ * hash output for whichever hash algorithm is
112
+ * determined by the parameter set.
113
+ *
114
+ * output An output containing the digit string (+
115
+ * checksum) of length P digits (in the case of
116
+ * MBEDTLS_LMOTS_SHA256_N32_W8, this means it is of
117
+ * size P bytes).
118
+ */
119
+ static int create_digit_array_with_checksum(const mbedtls_lmots_parameters_t *params,
120
+ const unsigned char *msg,
121
+ size_t msg_len,
122
+ const unsigned char *C_random_value,
123
+ unsigned char *out)
124
+ {
125
+ psa_hash_operation_t op = PSA_HASH_OPERATION_INIT;
126
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
127
+ size_t output_hash_len;
128
+ unsigned short checksum;
129
+
130
+ status = psa_hash_setup(&op, PSA_ALG_SHA_256);
131
+ if (status != PSA_SUCCESS) {
132
+ goto exit;
133
+ }
134
+
135
+ status = psa_hash_update(&op, params->I_key_identifier,
136
+ MBEDTLS_LMOTS_I_KEY_ID_LEN);
137
+ if (status != PSA_SUCCESS) {
138
+ goto exit;
139
+ }
140
+
141
+ status = psa_hash_update(&op, params->q_leaf_identifier,
142
+ MBEDTLS_LMOTS_Q_LEAF_ID_LEN);
143
+ if (status != PSA_SUCCESS) {
144
+ goto exit;
145
+ }
146
+
147
+ status = psa_hash_update(&op, D_MESSAGE_CONSTANT_BYTES, D_CONST_LEN);
148
+ if (status != PSA_SUCCESS) {
149
+ goto exit;
150
+ }
151
+
152
+ status = psa_hash_update(&op, C_random_value,
153
+ MBEDTLS_LMOTS_C_RANDOM_VALUE_LEN(params->type));
154
+ if (status != PSA_SUCCESS) {
155
+ goto exit;
156
+ }
157
+
158
+ status = psa_hash_update(&op, msg, msg_len);
159
+ if (status != PSA_SUCCESS) {
160
+ goto exit;
161
+ }
162
+
163
+ status = psa_hash_finish(&op, out,
164
+ MBEDTLS_LMOTS_N_HASH_LEN(params->type),
165
+ &output_hash_len);
166
+ if (status != PSA_SUCCESS) {
167
+ goto exit;
168
+ }
169
+
170
+ checksum = lmots_checksum_calculate(params, out);
171
+ MBEDTLS_PUT_UINT16_BE(checksum, out, MBEDTLS_LMOTS_N_HASH_LEN(params->type));
172
+
173
+ exit:
174
+ psa_hash_abort(&op);
175
+
176
+ return PSA_TO_MBEDTLS_ERR(status);
177
+ }
178
+
179
+ /* Hash each element of the string of digits (+ checksum), producing a hash
180
+ * output for each element. This is used in several places (by varying the
181
+ * hash_idx_min/max_values) in order to calculate a public key from a private
182
+ * key (RFC8554 Algorithm 1 step 4), in order to sign a message (RFC8554
183
+ * Algorithm 3 step 5), and to calculate a public key candidate from a
184
+ * signature and message (RFC8554 Algorithm 4b step 3).
185
+ *
186
+ * params The LMOTS parameter set, I and q values which
187
+ * describe the key being used.
188
+ *
189
+ * x_digit_array The array of digits (of size P, 34 in the case of
190
+ * MBEDTLS_LMOTS_SHA256_N32_W8).
191
+ *
192
+ * hash_idx_min_values An array of the starting values of the j iterator
193
+ * for each of the members of the digit array. If
194
+ * this value in NULL, then all iterators will start
195
+ * at 0.
196
+ *
197
+ * hash_idx_max_values An array of the upper bound values of the j
198
+ * iterator for each of the members of the digit
199
+ * array. If this value in NULL, then iterator is
200
+ * bounded to be less than 2^w - 1 (255 in the case
201
+ * of MBEDTLS_LMOTS_SHA256_N32_W8)
202
+ *
203
+ * output An array containing a hash output for each member
204
+ * of the digit string P. In the case of
205
+ * MBEDTLS_LMOTS_SHA256_N32_W8, this is of size 32 *
206
+ * 34.
207
+ */
208
+ static int hash_digit_array(const mbedtls_lmots_parameters_t *params,
209
+ const unsigned char *x_digit_array,
210
+ const unsigned char *hash_idx_min_values,
211
+ const unsigned char *hash_idx_max_values,
212
+ unsigned char *output)
213
+ {
214
+ unsigned int i_digit_idx;
215
+ unsigned char i_digit_idx_bytes[I_DIGIT_IDX_LEN];
216
+ unsigned int j_hash_idx;
217
+ unsigned char j_hash_idx_bytes[J_HASH_IDX_LEN];
218
+ unsigned int j_hash_idx_min;
219
+ unsigned int j_hash_idx_max;
220
+ psa_hash_operation_t op = PSA_HASH_OPERATION_INIT;
221
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
222
+ size_t output_hash_len;
223
+ unsigned char tmp_hash[MBEDTLS_LMOTS_N_HASH_LEN_MAX];
224
+
225
+ for (i_digit_idx = 0;
226
+ i_digit_idx < MBEDTLS_LMOTS_P_SIG_DIGIT_COUNT(params->type);
227
+ i_digit_idx++) {
228
+
229
+ memcpy(tmp_hash,
230
+ &x_digit_array[i_digit_idx * MBEDTLS_LMOTS_N_HASH_LEN(params->type)],
231
+ MBEDTLS_LMOTS_N_HASH_LEN(params->type));
232
+
233
+ j_hash_idx_min = hash_idx_min_values != NULL ?
234
+ hash_idx_min_values[i_digit_idx] : 0;
235
+ j_hash_idx_max = hash_idx_max_values != NULL ?
236
+ hash_idx_max_values[i_digit_idx] : DIGIT_MAX_VALUE;
237
+
238
+ for (j_hash_idx = j_hash_idx_min;
239
+ j_hash_idx < j_hash_idx_max;
240
+ j_hash_idx++) {
241
+ status = psa_hash_setup(&op, PSA_ALG_SHA_256);
242
+ if (status != PSA_SUCCESS) {
243
+ goto exit;
244
+ }
245
+
246
+ status = psa_hash_update(&op,
247
+ params->I_key_identifier,
248
+ MBEDTLS_LMOTS_I_KEY_ID_LEN);
249
+ if (status != PSA_SUCCESS) {
250
+ goto exit;
251
+ }
252
+
253
+ status = psa_hash_update(&op,
254
+ params->q_leaf_identifier,
255
+ MBEDTLS_LMOTS_Q_LEAF_ID_LEN);
256
+ if (status != PSA_SUCCESS) {
257
+ goto exit;
258
+ }
259
+
260
+ MBEDTLS_PUT_UINT16_BE(i_digit_idx, i_digit_idx_bytes, 0);
261
+ status = psa_hash_update(&op, i_digit_idx_bytes, I_DIGIT_IDX_LEN);
262
+ if (status != PSA_SUCCESS) {
263
+ goto exit;
264
+ }
265
+
266
+ j_hash_idx_bytes[0] = (uint8_t) j_hash_idx;
267
+ status = psa_hash_update(&op, j_hash_idx_bytes, J_HASH_IDX_LEN);
268
+ if (status != PSA_SUCCESS) {
269
+ goto exit;
270
+ }
271
+
272
+ status = psa_hash_update(&op, tmp_hash,
273
+ MBEDTLS_LMOTS_N_HASH_LEN(params->type));
274
+ if (status != PSA_SUCCESS) {
275
+ goto exit;
276
+ }
277
+
278
+ status = psa_hash_finish(&op, tmp_hash, sizeof(tmp_hash),
279
+ &output_hash_len);
280
+ if (status != PSA_SUCCESS) {
281
+ goto exit;
282
+ }
283
+
284
+ psa_hash_abort(&op);
285
+ }
286
+
287
+ memcpy(&output[i_digit_idx * MBEDTLS_LMOTS_N_HASH_LEN(params->type)],
288
+ tmp_hash, MBEDTLS_LMOTS_N_HASH_LEN(params->type));
289
+ }
290
+
291
+ exit:
292
+ psa_hash_abort(&op);
293
+ mbedtls_platform_zeroize(tmp_hash, sizeof(tmp_hash));
294
+
295
+ return PSA_TO_MBEDTLS_ERR(status);
296
+ }
297
+
298
+ /* Combine the hashes of the digit array into a public key. This is used in
299
+ * in order to calculate a public key from a private key (RFC8554 Algorithm 1
300
+ * step 4), and to calculate a public key candidate from a signature and message
301
+ * (RFC8554 Algorithm 4b step 3).
302
+ *
303
+ * params The LMOTS parameter set, I and q values which describe
304
+ * the key being used.
305
+ * y_hashed_digits The array of hashes, one hash for each digit of the
306
+ * symbol array (which is of size P, 34 in the case of
307
+ * MBEDTLS_LMOTS_SHA256_N32_W8)
308
+ *
309
+ * pub_key The output public key (or candidate public key in
310
+ * case this is being run as part of signature
311
+ * verification), in the form of a hash output.
312
+ */
313
+ static int public_key_from_hashed_digit_array(const mbedtls_lmots_parameters_t *params,
314
+ const unsigned char *y_hashed_digits,
315
+ unsigned char *pub_key)
316
+ {
317
+ psa_hash_operation_t op = PSA_HASH_OPERATION_INIT;
318
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
319
+ size_t output_hash_len;
320
+
321
+ status = psa_hash_setup(&op, PSA_ALG_SHA_256);
322
+ if (status != PSA_SUCCESS) {
323
+ goto exit;
324
+ }
325
+
326
+ status = psa_hash_update(&op,
327
+ params->I_key_identifier,
328
+ MBEDTLS_LMOTS_I_KEY_ID_LEN);
329
+ if (status != PSA_SUCCESS) {
330
+ goto exit;
331
+ }
332
+
333
+ status = psa_hash_update(&op, params->q_leaf_identifier,
334
+ MBEDTLS_LMOTS_Q_LEAF_ID_LEN);
335
+ if (status != PSA_SUCCESS) {
336
+ goto exit;
337
+ }
338
+
339
+ status = psa_hash_update(&op, D_PUBLIC_CONSTANT_BYTES, D_CONST_LEN);
340
+ if (status != PSA_SUCCESS) {
341
+ goto exit;
342
+ }
343
+
344
+ status = psa_hash_update(&op, y_hashed_digits,
345
+ MBEDTLS_LMOTS_P_SIG_DIGIT_COUNT(params->type) *
346
+ MBEDTLS_LMOTS_N_HASH_LEN(params->type));
347
+ if (status != PSA_SUCCESS) {
348
+ goto exit;
349
+ }
350
+
351
+ status = psa_hash_finish(&op, pub_key,
352
+ MBEDTLS_LMOTS_N_HASH_LEN(params->type),
353
+ &output_hash_len);
354
+ if (status != PSA_SUCCESS) {
355
+
356
+ exit:
357
+ psa_hash_abort(&op);
358
+ }
359
+
360
+ return PSA_TO_MBEDTLS_ERR(status);
361
+ }
362
+
363
+ #if !defined(MBEDTLS_DEPRECATED_REMOVED)
364
+ int mbedtls_lms_error_from_psa(psa_status_t status)
365
+ {
366
+ switch (status) {
367
+ case PSA_SUCCESS:
368
+ return 0;
369
+ case PSA_ERROR_HARDWARE_FAILURE:
370
+ return MBEDTLS_ERR_PLATFORM_HW_ACCEL_FAILED;
371
+ case PSA_ERROR_NOT_SUPPORTED:
372
+ return MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED;
373
+ case PSA_ERROR_BUFFER_TOO_SMALL:
374
+ return MBEDTLS_ERR_LMS_BUFFER_TOO_SMALL;
375
+ case PSA_ERROR_INVALID_ARGUMENT:
376
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
377
+ default:
378
+ return MBEDTLS_ERR_ERROR_GENERIC_ERROR;
379
+ }
380
+ }
381
+ #endif /* !MBEDTLS_DEPRECATED_REMOVED */
382
+
383
+ void mbedtls_lmots_public_init(mbedtls_lmots_public_t *ctx)
384
+ {
385
+ memset(ctx, 0, sizeof(*ctx));
386
+ }
387
+
388
+ void mbedtls_lmots_public_free(mbedtls_lmots_public_t *ctx)
389
+ {
390
+ if (ctx == NULL) {
391
+ return;
392
+ }
393
+
394
+ mbedtls_platform_zeroize(ctx, sizeof(*ctx));
395
+ }
396
+
397
+ int mbedtls_lmots_import_public_key(mbedtls_lmots_public_t *ctx,
398
+ const unsigned char *key, size_t key_len)
399
+ {
400
+ if (key_len < MBEDTLS_LMOTS_SIG_TYPE_OFFSET + MBEDTLS_LMOTS_TYPE_LEN) {
401
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
402
+ }
403
+
404
+ uint32_t type = MBEDTLS_GET_UINT32_BE(key, MBEDTLS_LMOTS_SIG_TYPE_OFFSET);
405
+ if (type != (uint32_t) MBEDTLS_LMOTS_SHA256_N32_W8) {
406
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
407
+ }
408
+ ctx->params.type = (mbedtls_lmots_algorithm_type_t) type;
409
+
410
+ if (key_len != MBEDTLS_LMOTS_PUBLIC_KEY_LEN(ctx->params.type)) {
411
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
412
+ }
413
+
414
+ memcpy(ctx->params.I_key_identifier,
415
+ key + PUBLIC_KEY_I_KEY_ID_OFFSET,
416
+ MBEDTLS_LMOTS_I_KEY_ID_LEN);
417
+
418
+ memcpy(ctx->params.q_leaf_identifier,
419
+ key + PUBLIC_KEY_Q_LEAF_ID_OFFSET,
420
+ MBEDTLS_LMOTS_Q_LEAF_ID_LEN);
421
+
422
+ memcpy(ctx->public_key,
423
+ key + PUBLIC_KEY_KEY_HASH_OFFSET,
424
+ MBEDTLS_LMOTS_N_HASH_LEN(ctx->params.type));
425
+
426
+ ctx->have_public_key = 1;
427
+
428
+ return 0;
429
+ }
430
+
431
+ int mbedtls_lmots_export_public_key(const mbedtls_lmots_public_t *ctx,
432
+ unsigned char *key, size_t key_size,
433
+ size_t *key_len)
434
+ {
435
+ if (key_size < MBEDTLS_LMOTS_PUBLIC_KEY_LEN(ctx->params.type)) {
436
+ return MBEDTLS_ERR_LMS_BUFFER_TOO_SMALL;
437
+ }
438
+
439
+ if (!ctx->have_public_key) {
440
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
441
+ }
442
+
443
+ MBEDTLS_PUT_UINT32_BE(ctx->params.type, key, MBEDTLS_LMOTS_SIG_TYPE_OFFSET);
444
+
445
+ memcpy(key + PUBLIC_KEY_I_KEY_ID_OFFSET,
446
+ ctx->params.I_key_identifier,
447
+ MBEDTLS_LMOTS_I_KEY_ID_LEN);
448
+
449
+ memcpy(key + PUBLIC_KEY_Q_LEAF_ID_OFFSET,
450
+ ctx->params.q_leaf_identifier,
451
+ MBEDTLS_LMOTS_Q_LEAF_ID_LEN);
452
+
453
+ memcpy(key + PUBLIC_KEY_KEY_HASH_OFFSET, ctx->public_key,
454
+ MBEDTLS_LMOTS_N_HASH_LEN(ctx->params.type));
455
+
456
+ if (key_len != NULL) {
457
+ *key_len = MBEDTLS_LMOTS_PUBLIC_KEY_LEN(ctx->params.type);
458
+ }
459
+
460
+ return 0;
461
+ }
462
+
463
+ int mbedtls_lmots_calculate_public_key_candidate(const mbedtls_lmots_parameters_t *params,
464
+ const unsigned char *msg,
465
+ size_t msg_size,
466
+ const unsigned char *sig,
467
+ size_t sig_size,
468
+ unsigned char *out,
469
+ size_t out_size,
470
+ size_t *out_len)
471
+ {
472
+ unsigned char tmp_digit_array[MBEDTLS_LMOTS_P_SIG_DIGIT_COUNT_MAX];
473
+ unsigned char y_hashed_digits[MBEDTLS_LMOTS_P_SIG_DIGIT_COUNT_MAX][MBEDTLS_LMOTS_N_HASH_LEN_MAX];
474
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
475
+
476
+ if (msg == NULL && msg_size != 0) {
477
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
478
+ }
479
+
480
+ if (sig_size != MBEDTLS_LMOTS_SIG_LEN(params->type) ||
481
+ out_size < MBEDTLS_LMOTS_N_HASH_LEN(params->type)) {
482
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
483
+ }
484
+
485
+ ret = create_digit_array_with_checksum(params, msg, msg_size,
486
+ sig + MBEDTLS_LMOTS_SIG_C_RANDOM_OFFSET,
487
+ tmp_digit_array);
488
+ if (ret) {
489
+ return ret;
490
+ }
491
+
492
+ ret = hash_digit_array(params,
493
+ sig + MBEDTLS_LMOTS_SIG_SIGNATURE_OFFSET(params->type),
494
+ tmp_digit_array, NULL, (unsigned char *) y_hashed_digits);
495
+ if (ret) {
496
+ return ret;
497
+ }
498
+
499
+ ret = public_key_from_hashed_digit_array(params,
500
+ (unsigned char *) y_hashed_digits,
501
+ out);
502
+ if (ret) {
503
+ return ret;
504
+ }
505
+
506
+ if (out_len != NULL) {
507
+ *out_len = MBEDTLS_LMOTS_N_HASH_LEN(params->type);
508
+ }
509
+
510
+ return 0;
511
+ }
512
+
513
+ int mbedtls_lmots_verify(const mbedtls_lmots_public_t *ctx,
514
+ const unsigned char *msg, size_t msg_size,
515
+ const unsigned char *sig, size_t sig_size)
516
+ {
517
+ unsigned char Kc_public_key_candidate[MBEDTLS_LMOTS_N_HASH_LEN_MAX];
518
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
519
+
520
+ if (msg == NULL && msg_size != 0) {
521
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
522
+ }
523
+
524
+ if (!ctx->have_public_key) {
525
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
526
+ }
527
+
528
+ if (ctx->params.type != MBEDTLS_LMOTS_SHA256_N32_W8) {
529
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
530
+ }
531
+
532
+ if (sig_size < MBEDTLS_LMOTS_SIG_TYPE_OFFSET + MBEDTLS_LMOTS_TYPE_LEN) {
533
+ return MBEDTLS_ERR_LMS_VERIFY_FAILED;
534
+ }
535
+
536
+ if (MBEDTLS_GET_UINT32_BE(sig, MBEDTLS_LMOTS_SIG_TYPE_OFFSET) != MBEDTLS_LMOTS_SHA256_N32_W8) {
537
+ return MBEDTLS_ERR_LMS_VERIFY_FAILED;
538
+ }
539
+
540
+ ret = mbedtls_lmots_calculate_public_key_candidate(&ctx->params,
541
+ msg, msg_size, sig, sig_size,
542
+ Kc_public_key_candidate,
543
+ MBEDTLS_LMOTS_N_HASH_LEN(ctx->params.type),
544
+ NULL);
545
+ if (ret) {
546
+ return MBEDTLS_ERR_LMS_VERIFY_FAILED;
547
+ }
548
+
549
+ if (memcmp(&Kc_public_key_candidate, ctx->public_key,
550
+ sizeof(ctx->public_key))) {
551
+ return MBEDTLS_ERR_LMS_VERIFY_FAILED;
552
+ }
553
+
554
+ return 0;
555
+ }
556
+
557
+ #if defined(MBEDTLS_LMS_PRIVATE)
558
+
559
+ void mbedtls_lmots_private_init(mbedtls_lmots_private_t *ctx)
560
+ {
561
+ memset(ctx, 0, sizeof(*ctx));
562
+ }
563
+
564
+ void mbedtls_lmots_private_free(mbedtls_lmots_private_t *ctx)
565
+ {
566
+ if (ctx == NULL) {
567
+ return;
568
+ }
569
+
570
+ mbedtls_platform_zeroize(ctx,
571
+ sizeof(*ctx));
572
+ }
573
+
574
+ int mbedtls_lmots_generate_private_key(mbedtls_lmots_private_t *ctx,
575
+ mbedtls_lmots_algorithm_type_t type,
576
+ const unsigned char I_key_identifier[MBEDTLS_LMOTS_I_KEY_ID_LEN],
577
+ uint32_t q_leaf_identifier,
578
+ const unsigned char *seed,
579
+ size_t seed_size)
580
+ {
581
+ psa_hash_operation_t op = PSA_HASH_OPERATION_INIT;
582
+ psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
583
+ size_t output_hash_len;
584
+ unsigned int i_digit_idx;
585
+ unsigned char i_digit_idx_bytes[2];
586
+ unsigned char const_bytes[1] = { 0xFF };
587
+
588
+ if (ctx->have_private_key) {
589
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
590
+ }
591
+
592
+ if (type != MBEDTLS_LMOTS_SHA256_N32_W8) {
593
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
594
+ }
595
+
596
+ ctx->params.type = type;
597
+
598
+ memcpy(ctx->params.I_key_identifier,
599
+ I_key_identifier,
600
+ sizeof(ctx->params.I_key_identifier));
601
+
602
+ MBEDTLS_PUT_UINT32_BE(q_leaf_identifier, ctx->params.q_leaf_identifier, 0);
603
+
604
+ for (i_digit_idx = 0;
605
+ i_digit_idx < MBEDTLS_LMOTS_P_SIG_DIGIT_COUNT(ctx->params.type);
606
+ i_digit_idx++) {
607
+ status = psa_hash_setup(&op, PSA_ALG_SHA_256);
608
+ if (status != PSA_SUCCESS) {
609
+ goto exit;
610
+ }
611
+
612
+ status = psa_hash_update(&op,
613
+ ctx->params.I_key_identifier,
614
+ sizeof(ctx->params.I_key_identifier));
615
+ if (status != PSA_SUCCESS) {
616
+ goto exit;
617
+ }
618
+
619
+ status = psa_hash_update(&op,
620
+ ctx->params.q_leaf_identifier,
621
+ MBEDTLS_LMOTS_Q_LEAF_ID_LEN);
622
+ if (status != PSA_SUCCESS) {
623
+ goto exit;
624
+ }
625
+
626
+ MBEDTLS_PUT_UINT16_BE(i_digit_idx, i_digit_idx_bytes, 0);
627
+ status = psa_hash_update(&op, i_digit_idx_bytes, I_DIGIT_IDX_LEN);
628
+ if (status != PSA_SUCCESS) {
629
+ goto exit;
630
+ }
631
+
632
+ status = psa_hash_update(&op, const_bytes, sizeof(const_bytes));
633
+ if (status != PSA_SUCCESS) {
634
+ goto exit;
635
+ }
636
+
637
+ status = psa_hash_update(&op, seed, seed_size);
638
+ if (status != PSA_SUCCESS) {
639
+ goto exit;
640
+ }
641
+
642
+ status = psa_hash_finish(&op,
643
+ ctx->private_key[i_digit_idx],
644
+ MBEDTLS_LMOTS_N_HASH_LEN(ctx->params.type),
645
+ &output_hash_len);
646
+ if (status != PSA_SUCCESS) {
647
+ goto exit;
648
+ }
649
+
650
+ psa_hash_abort(&op);
651
+ }
652
+
653
+ ctx->have_private_key = 1;
654
+
655
+ exit:
656
+ psa_hash_abort(&op);
657
+
658
+ return PSA_TO_MBEDTLS_ERR(status);
659
+ }
660
+
661
+ int mbedtls_lmots_calculate_public_key(mbedtls_lmots_public_t *ctx,
662
+ const mbedtls_lmots_private_t *priv_ctx)
663
+ {
664
+ unsigned char y_hashed_digits[MBEDTLS_LMOTS_P_SIG_DIGIT_COUNT_MAX][MBEDTLS_LMOTS_N_HASH_LEN_MAX];
665
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
666
+
667
+ /* Check that a private key is loaded */
668
+ if (!priv_ctx->have_private_key) {
669
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
670
+ }
671
+
672
+ ret = hash_digit_array(&priv_ctx->params,
673
+ (unsigned char *) priv_ctx->private_key, NULL,
674
+ NULL, (unsigned char *) y_hashed_digits);
675
+ if (ret) {
676
+ goto exit;
677
+ }
678
+
679
+ ret = public_key_from_hashed_digit_array(&priv_ctx->params,
680
+ (unsigned char *) y_hashed_digits,
681
+ ctx->public_key);
682
+ if (ret) {
683
+ goto exit;
684
+ }
685
+
686
+ memcpy(&ctx->params, &priv_ctx->params,
687
+ sizeof(ctx->params));
688
+
689
+ ctx->have_public_key = 1;
690
+
691
+ exit:
692
+ mbedtls_platform_zeroize(y_hashed_digits, sizeof(y_hashed_digits));
693
+
694
+ return ret;
695
+ }
696
+
697
+ int mbedtls_lmots_sign(mbedtls_lmots_private_t *ctx,
698
+ int (*f_rng)(void *, unsigned char *, size_t),
699
+ void *p_rng, const unsigned char *msg, size_t msg_size,
700
+ unsigned char *sig, size_t sig_size, size_t *sig_len)
701
+ {
702
+ unsigned char tmp_digit_array[MBEDTLS_LMOTS_P_SIG_DIGIT_COUNT_MAX];
703
+ /* Create a temporary buffer to prepare the signature in. This allows us to
704
+ * finish creating a signature (ensuring the process doesn't fail), and then
705
+ * erase the private key **before** writing any data into the sig parameter
706
+ * buffer. If data were directly written into the sig buffer, it might leak
707
+ * a partial signature on failure, which effectively compromises the private
708
+ * key.
709
+ */
710
+ unsigned char tmp_sig[MBEDTLS_LMOTS_P_SIG_DIGIT_COUNT_MAX][MBEDTLS_LMOTS_N_HASH_LEN_MAX];
711
+ unsigned char tmp_c_random[MBEDTLS_LMOTS_N_HASH_LEN_MAX];
712
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
713
+
714
+ if (msg == NULL && msg_size != 0) {
715
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
716
+ }
717
+
718
+ if (sig_size < MBEDTLS_LMOTS_SIG_LEN(ctx->params.type)) {
719
+ return MBEDTLS_ERR_LMS_BUFFER_TOO_SMALL;
720
+ }
721
+
722
+ /* Check that a private key is loaded */
723
+ if (!ctx->have_private_key) {
724
+ return MBEDTLS_ERR_LMS_BAD_INPUT_DATA;
725
+ }
726
+
727
+ ret = f_rng(p_rng, tmp_c_random,
728
+ MBEDTLS_LMOTS_N_HASH_LEN(ctx->params.type));
729
+ if (ret) {
730
+ return ret;
731
+ }
732
+
733
+ ret = create_digit_array_with_checksum(&ctx->params,
734
+ msg, msg_size,
735
+ tmp_c_random,
736
+ tmp_digit_array);
737
+ if (ret) {
738
+ goto exit;
739
+ }
740
+
741
+ ret = hash_digit_array(&ctx->params, (unsigned char *) ctx->private_key,
742
+ NULL, tmp_digit_array, (unsigned char *) tmp_sig);
743
+ if (ret) {
744
+ goto exit;
745
+ }
746
+
747
+ MBEDTLS_PUT_UINT32_BE(ctx->params.type, sig, MBEDTLS_LMOTS_SIG_TYPE_OFFSET);
748
+
749
+ /* Test hook to check if sig is being written to before we invalidate the
750
+ * private key.
751
+ */
752
+ #if defined(MBEDTLS_TEST_HOOKS)
753
+ if (mbedtls_lmots_sign_private_key_invalidated_hook != NULL) {
754
+ ret = (*mbedtls_lmots_sign_private_key_invalidated_hook)(sig);
755
+ if (ret != 0) {
756
+ return ret;
757
+ }
758
+ }
759
+ #endif /* defined(MBEDTLS_TEST_HOOKS) */
760
+
761
+ /* We've got a valid signature now, so it's time to make sure the private
762
+ * key can't be reused.
763
+ */
764
+ ctx->have_private_key = 0;
765
+ mbedtls_platform_zeroize(ctx->private_key,
766
+ sizeof(ctx->private_key));
767
+
768
+ memcpy(sig + MBEDTLS_LMOTS_SIG_C_RANDOM_OFFSET, tmp_c_random,
769
+ MBEDTLS_LMOTS_C_RANDOM_VALUE_LEN(ctx->params.type));
770
+
771
+ memcpy(sig + MBEDTLS_LMOTS_SIG_SIGNATURE_OFFSET(ctx->params.type), tmp_sig,
772
+ MBEDTLS_LMOTS_P_SIG_DIGIT_COUNT(ctx->params.type)
773
+ * MBEDTLS_LMOTS_N_HASH_LEN(ctx->params.type));
774
+
775
+ if (sig_len != NULL) {
776
+ *sig_len = MBEDTLS_LMOTS_SIG_LEN(ctx->params.type);
777
+ }
778
+
779
+ ret = 0;
780
+
781
+ exit:
782
+ mbedtls_platform_zeroize(tmp_digit_array, sizeof(tmp_digit_array));
783
+ mbedtls_platform_zeroize(tmp_sig, sizeof(tmp_sig));
784
+
785
+ return ret;
786
+ }
787
+
788
+ #endif /* defined(MBEDTLS_LMS_PRIVATE) */
789
+ #endif /* defined(MBEDTLS_LMS_C) */