duckdb 0.9.3-dev0.0 → 0.9.3-dev3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1212) hide show
  1. package/LICENSE +1 -1
  2. package/binding.gyp +32 -7
  3. package/package.json +1 -1
  4. package/src/connection.cpp +6 -6
  5. package/src/database.cpp +9 -9
  6. package/src/duckdb/extension/icu/icu-datefunc.cpp +22 -10
  7. package/src/duckdb/extension/icu/icu-datepart.cpp +42 -22
  8. package/src/duckdb/extension/icu/icu-datetrunc.cpp +40 -7
  9. package/src/duckdb/extension/icu/icu-strptime.cpp +14 -8
  10. package/src/duckdb/extension/icu/icu-table-range.cpp +1 -1
  11. package/src/duckdb/extension/icu/icu-timezone.cpp +43 -16
  12. package/src/duckdb/extension/icu/icu_extension.cpp +1 -1
  13. package/src/duckdb/extension/icu/include/icu-datefunc.hpp +3 -0
  14. package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
  15. package/src/duckdb/extension/json/buffered_json_reader.cpp +78 -62
  16. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +11 -7
  17. package/src/duckdb/extension/json/include/json_common.hpp +0 -14
  18. package/src/duckdb/extension/json/include/json_deserializer.hpp +1 -0
  19. package/src/duckdb/extension/json/include/json_functions.hpp +1 -0
  20. package/src/duckdb/extension/json/include/json_scan.hpp +19 -5
  21. package/src/duckdb/extension/json/include/json_serializer.hpp +2 -1
  22. package/src/duckdb/extension/json/include/json_structure.hpp +12 -10
  23. package/src/duckdb/extension/json/json_common.cpp +1 -0
  24. package/src/duckdb/extension/json/json_deserializer.cpp +13 -0
  25. package/src/duckdb/extension/json/json_extension.cpp +3 -3
  26. package/src/duckdb/extension/json/json_functions/copy_json.cpp +8 -4
  27. package/src/duckdb/extension/json/json_functions/json_array_length.cpp +1 -1
  28. package/src/duckdb/extension/json/json_functions/json_contains.cpp +3 -3
  29. package/src/duckdb/extension/json/json_functions/json_create.cpp +53 -8
  30. package/src/duckdb/extension/json/json_functions/json_extract.cpp +10 -6
  31. package/src/duckdb/extension/json/json_functions/json_keys.cpp +1 -1
  32. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +2 -3
  33. package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +210 -0
  34. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +22 -19
  35. package/src/duckdb/extension/json/json_functions/json_structure.cpp +71 -43
  36. package/src/duckdb/extension/json/json_functions/json_transform.cpp +105 -8
  37. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  38. package/src/duckdb/extension/json/json_functions/json_valid.cpp +1 -1
  39. package/src/duckdb/extension/json/json_functions/read_json.cpp +43 -18
  40. package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +1 -1
  41. package/src/duckdb/extension/json/json_functions.cpp +9 -5
  42. package/src/duckdb/extension/json/json_scan.cpp +147 -125
  43. package/src/duckdb/extension/json/json_serializer.cpp +9 -0
  44. package/src/duckdb/extension/json/serialize_json.cpp +6 -0
  45. package/src/duckdb/extension/parquet/column_reader.cpp +53 -18
  46. package/src/duckdb/extension/parquet/column_writer.cpp +29 -6
  47. package/src/duckdb/extension/parquet/include/column_reader.hpp +0 -1
  48. package/src/duckdb/extension/parquet/include/decode_utils.hpp +2 -2
  49. package/src/duckdb/extension/parquet/include/parquet_crypto.hpp +87 -0
  50. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -3
  51. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +16 -3
  52. package/src/duckdb/extension/parquet/include/parquet_metadata.hpp +10 -0
  53. package/src/duckdb/extension/parquet/include/parquet_reader.hpp +34 -6
  54. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +3 -2
  55. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -0
  56. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +21 -1
  57. package/src/duckdb/extension/parquet/parquet_crypto.cpp +370 -0
  58. package/src/duckdb/extension/parquet/parquet_extension.cpp +254 -24
  59. package/src/duckdb/extension/parquet/parquet_metadata.cpp +204 -16
  60. package/src/duckdb/extension/parquet/parquet_reader.cpp +108 -34
  61. package/src/duckdb/extension/parquet/parquet_statistics.cpp +75 -30
  62. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +15 -8
  63. package/src/duckdb/extension/parquet/parquet_writer.cpp +62 -10
  64. package/src/duckdb/extension/parquet/serialize_parquet.cpp +60 -0
  65. package/src/duckdb/src/catalog/catalog.cpp +23 -25
  66. package/src/duckdb/src/catalog/catalog_entry/column_dependency_manager.cpp +1 -0
  67. package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_dependent_entry.cpp +31 -0
  68. package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_entry.cpp +44 -0
  69. package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_subject_entry.cpp +31 -0
  70. package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +35 -10
  71. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +22 -6
  72. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +110 -33
  73. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +33 -17
  74. package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +16 -0
  75. package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +7 -6
  76. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +88 -14
  77. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -15
  78. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +20 -20
  79. package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +4 -0
  80. package/src/duckdb/src/catalog/catalog_entry.cpp +29 -0
  81. package/src/duckdb/src/catalog/catalog_set.cpp +358 -343
  82. package/src/duckdb/src/catalog/catalog_transaction.cpp +4 -0
  83. package/src/duckdb/src/catalog/default/default_functions.cpp +13 -4
  84. package/src/duckdb/src/catalog/default/default_schemas.cpp +5 -1
  85. package/src/duckdb/src/catalog/default/default_views.cpp +6 -2
  86. package/src/duckdb/src/catalog/dependency_catalog_set.cpp +51 -0
  87. package/src/duckdb/src/catalog/dependency_manager.cpp +510 -114
  88. package/src/duckdb/src/catalog/duck_catalog.cpp +4 -4
  89. package/src/duckdb/src/common/adbc/adbc.cpp +73 -53
  90. package/src/duckdb/src/common/adbc/driver_manager.cpp +1101 -268
  91. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +20 -9
  92. package/src/duckdb/src/common/bind_helpers.cpp +1 -0
  93. package/src/duckdb/src/common/box_renderer.cpp +52 -1
  94. package/src/duckdb/src/common/compressed_file_system.cpp +1 -0
  95. package/src/duckdb/src/common/constants.cpp +0 -1
  96. package/src/duckdb/src/common/enum_util.cpp +522 -107
  97. package/src/duckdb/src/common/enums/catalog_type.cpp +64 -1
  98. package/src/duckdb/src/common/enums/compression_type.cpp +14 -0
  99. package/src/duckdb/src/common/enums/date_part_specifier.cpp +1 -0
  100. package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
  101. package/src/duckdb/src/common/enums/file_compression_type.cpp +1 -0
  102. package/src/duckdb/src/common/enums/join_type.cpp +33 -0
  103. package/src/duckdb/src/common/enums/logical_operator_type.cpp +5 -3
  104. package/src/duckdb/src/common/enums/optimizer_type.cpp +9 -1
  105. package/src/duckdb/src/common/enums/physical_operator_type.cpp +8 -4
  106. package/src/duckdb/src/common/enums/statement_type.cpp +2 -2
  107. package/src/duckdb/src/common/error_data.cpp +113 -0
  108. package/src/duckdb/src/common/exception/binder_exception.cpp +47 -0
  109. package/src/duckdb/src/common/exception/catalog_exception.cpp +55 -0
  110. package/src/duckdb/src/common/exception/parser_exception.cpp +19 -0
  111. package/src/duckdb/src/common/exception.cpp +110 -121
  112. package/src/duckdb/src/common/exception_format_value.cpp +9 -1
  113. package/src/duckdb/src/common/extra_type_info.cpp +48 -0
  114. package/src/duckdb/src/common/file_system.cpp +12 -7
  115. package/src/duckdb/src/common/gzip_file_system.cpp +18 -18
  116. package/src/duckdb/src/common/hive_partitioning.cpp +5 -1
  117. package/src/duckdb/src/common/http_state.cpp +20 -3
  118. package/src/duckdb/src/common/local_file_system.cpp +213 -15
  119. package/src/duckdb/src/common/multi_file_reader.cpp +20 -7
  120. package/src/duckdb/src/common/operator/cast_operators.cpp +397 -414
  121. package/src/duckdb/src/common/operator/convert_to_string.cpp +4 -0
  122. package/src/duckdb/src/common/operator/string_cast.cpp +5 -0
  123. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +61 -12
  124. package/src/duckdb/src/common/progress_bar/terminal_progress_bar_display.cpp +13 -4
  125. package/src/duckdb/src/common/radix_partitioning.cpp +1 -1
  126. package/src/duckdb/src/common/row_operations/row_aggregate.cpp +2 -1
  127. package/src/duckdb/src/common/row_operations/row_gather.cpp +7 -1
  128. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +78 -12
  129. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +222 -61
  130. package/src/duckdb/src/common/row_operations/row_matcher.cpp +6 -1
  131. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +51 -0
  132. package/src/duckdb/src/common/row_operations/row_scatter.cpp +8 -1
  133. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +6 -0
  134. package/src/duckdb/src/common/serializer/binary_serializer.cpp +5 -0
  135. package/src/duckdb/src/common/serializer/serializer.cpp +19 -0
  136. package/src/duckdb/src/common/sort/comparators.cpp +126 -0
  137. package/src/duckdb/src/common/sort/partition_state.cpp +17 -17
  138. package/src/duckdb/src/common/sort/radix_sort.cpp +2 -1
  139. package/src/duckdb/src/common/sort/sort_state.cpp +10 -5
  140. package/src/duckdb/src/common/sort/sorted_block.cpp +7 -6
  141. package/src/duckdb/src/common/string_util.cpp +302 -24
  142. package/src/duckdb/src/common/tree_renderer.cpp +8 -6
  143. package/src/duckdb/src/common/types/cast_helpers.cpp +6 -0
  144. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +1 -1
  145. package/src/duckdb/src/common/types/column/column_data_collection.cpp +58 -0
  146. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +8 -1
  147. package/src/duckdb/src/common/types/data_chunk.cpp +9 -0
  148. package/src/duckdb/src/common/types/date.cpp +2 -2
  149. package/src/duckdb/src/common/types/hash.cpp +9 -1
  150. package/src/duckdb/src/common/types/hugeint.cpp +229 -51
  151. package/src/duckdb/src/common/types/hyperloglog.cpp +10 -3
  152. package/src/duckdb/src/common/types/interval.cpp +67 -12
  153. package/src/duckdb/src/common/types/list_segment.cpp +98 -4
  154. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +11 -1
  155. package/src/duckdb/src/common/types/row/row_data_collection.cpp +1 -1
  156. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +2 -2
  157. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +3 -2
  158. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +63 -3
  159. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +331 -127
  160. package/src/duckdb/src/common/types/time.cpp +47 -75
  161. package/src/duckdb/src/common/types/timestamp.cpp +16 -3
  162. package/src/duckdb/src/common/types/uhugeint.cpp +746 -0
  163. package/src/duckdb/src/common/types/validity_mask.cpp +6 -2
  164. package/src/duckdb/src/common/types/value.cpp +183 -27
  165. package/src/duckdb/src/common/types/vector.cpp +331 -30
  166. package/src/duckdb/src/common/types/vector_buffer.cpp +29 -1
  167. package/src/duckdb/src/common/types/vector_cache.cpp +22 -1
  168. package/src/duckdb/src/common/types.cpp +606 -90
  169. package/src/duckdb/src/common/value_operations/comparison_operations.cpp +21 -1
  170. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +5 -0
  171. package/src/duckdb/src/common/vector_operations/generators.cpp +2 -2
  172. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +131 -2
  173. package/src/duckdb/src/common/vector_operations/vector_copy.cpp +26 -4
  174. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +41 -0
  175. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +7 -0
  176. package/src/duckdb/src/common/virtual_file_system.cpp +0 -1
  177. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +2 -1
  178. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +144 -56
  179. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +2 -0
  180. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +27 -0
  181. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +4 -3
  182. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +25 -5
  183. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +100 -3
  184. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +2 -1
  185. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +9 -1
  186. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +83 -52
  187. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +485 -289
  188. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +3 -3
  189. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  190. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +34 -37
  191. package/src/duckdb/src/core_functions/function_list.cpp +30 -1
  192. package/src/duckdb/src/core_functions/lambda_functions.cpp +416 -0
  193. package/src/duckdb/src/core_functions/scalar/array/array_functions.cpp +294 -0
  194. package/src/duckdb/src/core_functions/scalar/array/array_value.cpp +87 -0
  195. package/src/duckdb/src/core_functions/scalar/blob/create_sort_key.cpp +686 -0
  196. package/src/duckdb/src/core_functions/scalar/blob/encode.cpp +1 -0
  197. package/src/duckdb/src/core_functions/scalar/date/current.cpp +3 -3
  198. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +295 -20
  199. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +1 -0
  200. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +8 -7
  201. package/src/duckdb/src/core_functions/scalar/date/to_interval.cpp +84 -23
  202. package/src/duckdb/src/core_functions/scalar/generic/error.cpp +4 -4
  203. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +7 -8
  204. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  205. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +17 -6
  206. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +8 -0
  207. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +28 -14
  208. package/src/duckdb/src/core_functions/scalar/list/list_filter.cpp +49 -0
  209. package/src/duckdb/src/core_functions/scalar/list/list_reduce.cpp +230 -0
  210. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +85 -16
  211. package/src/duckdb/src/core_functions/scalar/list/list_transform.cpp +41 -0
  212. package/src/duckdb/src/core_functions/scalar/list/list_value.cpp +21 -2
  213. package/src/duckdb/src/core_functions/scalar/map/map.cpp +6 -5
  214. package/src/duckdb/src/core_functions/scalar/map/map_entries.cpp +2 -2
  215. package/src/duckdb/src/core_functions/scalar/map/map_from_entries.cpp +1 -2
  216. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +24 -4
  217. package/src/duckdb/src/core_functions/scalar/operators/bitwise.cpp +6 -0
  218. package/src/duckdb/src/core_functions/scalar/random/random.cpp +2 -2
  219. package/src/duckdb/src/core_functions/scalar/random/setseed.cpp +2 -2
  220. package/src/duckdb/src/core_functions/scalar/secret/which_secret.cpp +28 -0
  221. package/src/duckdb/src/core_functions/scalar/string/bar.cpp +9 -4
  222. package/src/duckdb/src/core_functions/scalar/string/format_bytes.cpp +7 -2
  223. package/src/duckdb/src/core_functions/scalar/string/hex.cpp +63 -4
  224. package/src/duckdb/src/core_functions/scalar/string/pad.cpp +2 -2
  225. package/src/duckdb/src/core_functions/scalar/string/parse_path.cpp +348 -0
  226. package/src/duckdb/src/core_functions/scalar/string/regexp_escape.cpp +22 -0
  227. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +6 -5
  228. package/src/duckdb/src/core_functions/scalar/struct/struct_insert.cpp +3 -3
  229. package/src/duckdb/src/core_functions/scalar/struct/struct_pack.cpp +1 -1
  230. package/src/duckdb/src/execution/aggregate_hashtable.cpp +9 -2
  231. package/src/duckdb/src/execution/column_binding_resolver.cpp +44 -10
  232. package/src/duckdb/src/execution/expression_executor/execute_between.cpp +4 -0
  233. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +4 -0
  234. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +4 -0
  235. package/src/duckdb/src/execution/expression_executor.cpp +2 -1
  236. package/src/duckdb/src/execution/index/art/art.cpp +202 -53
  237. package/src/duckdb/src/execution/index/art/art_key.cpp +20 -27
  238. package/src/duckdb/src/execution/index/fixed_size_allocator.cpp +52 -17
  239. package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +14 -8
  240. package/src/duckdb/src/execution/index/index_type_set.cpp +32 -0
  241. package/src/duckdb/src/execution/index/unknown_index.cpp +65 -0
  242. package/src/duckdb/src/execution/join_hashtable.cpp +151 -174
  243. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -0
  244. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +4 -0
  245. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +2 -1
  246. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +82 -36
  247. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +58 -32
  248. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +35 -19
  249. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +90 -0
  250. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +124 -0
  251. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +97 -0
  252. package/src/duckdb/src/execution/operator/csv_scanner/scanner/base_scanner.cpp +71 -0
  253. package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +98 -0
  254. package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +105 -0
  255. package/src/duckdb/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp +63 -0
  256. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +1091 -0
  257. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +124 -26
  258. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +117 -129
  259. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +46 -22
  260. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +83 -199
  261. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +21 -122
  262. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +18 -17
  263. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp +22 -0
  264. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +201 -0
  265. package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +221 -0
  266. package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +204 -0
  267. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +186 -0
  268. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +532 -0
  269. package/src/duckdb/src/execution/operator/helper/physical_buffered_collector.cpp +85 -0
  270. package/src/duckdb/src/execution/operator/helper/physical_create_secret.cpp +21 -0
  271. package/src/duckdb/src/execution/operator/helper/physical_materialized_collector.cpp +1 -1
  272. package/src/duckdb/src/execution/operator/helper/physical_pragma.cpp +2 -2
  273. package/src/duckdb/src/execution/operator/helper/physical_reservoir_sample.cpp +34 -9
  274. package/src/duckdb/src/execution/operator/helper/physical_result_collector.cpp +10 -0
  275. package/src/duckdb/src/execution/operator/helper/physical_transaction.cpp +1 -0
  276. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +25 -10
  277. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +7 -8
  278. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +1 -1
  279. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +5 -2
  280. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  281. package/src/duckdb/src/execution/operator/join/physical_delim_join.cpp +5 -127
  282. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +221 -61
  283. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +18 -21
  284. package/src/duckdb/src/execution/operator/join/physical_join.cpp +10 -5
  285. package/src/duckdb/src/execution/operator/join/physical_left_delim_join.cpp +137 -0
  286. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +11 -4
  287. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +2 -2
  288. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +19 -4
  289. package/src/duckdb/src/execution/operator/join/physical_right_delim_join.cpp +121 -0
  290. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +3 -2
  291. package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +59 -0
  292. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +132 -92
  293. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +54 -54
  294. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  295. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +4 -0
  296. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +21 -3
  297. package/src/duckdb/src/execution/operator/schema/physical_alter.cpp +1 -0
  298. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +61 -43
  299. package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +15 -13
  300. package/src/duckdb/src/execution/operator/schema/physical_create_schema.cpp +1 -0
  301. package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +10 -0
  302. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +44 -90
  303. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +3 -0
  304. package/src/duckdb/src/execution/operator/set/physical_union.cpp +8 -4
  305. package/src/duckdb/src/execution/physical_operator.cpp +3 -1
  306. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +30 -143
  307. package/src/duckdb/src/execution/physical_plan/plan_copy_database.cpp +12 -0
  308. package/src/duckdb/src/execution/physical_plan/plan_copy_to_file.cpp +11 -4
  309. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +8 -8
  310. package/src/duckdb/src/execution/physical_plan/plan_create_secret.cpp +11 -0
  311. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +9 -8
  312. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +5 -3
  313. package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +15 -6
  314. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +1 -0
  315. package/src/duckdb/src/execution/physical_plan/plan_pragma.cpp +1 -1
  316. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +3 -1
  317. package/src/duckdb/src/execution/physical_plan/plan_set_operation.cpp +90 -12
  318. package/src/duckdb/src/execution/physical_plan/plan_window.cpp +67 -22
  319. package/src/duckdb/src/execution/physical_plan_generator.cpp +6 -3
  320. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +163 -32
  321. package/src/duckdb/src/execution/reservoir_sample.cpp +112 -32
  322. package/src/duckdb/src/execution/window_executor.cpp +291 -26
  323. package/src/duckdb/src/execution/window_segment_tree.cpp +958 -114
  324. package/src/duckdb/src/function/aggregate/distributive/count.cpp +18 -16
  325. package/src/duckdb/src/function/aggregate/distributive/first.cpp +11 -4
  326. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +303 -131
  327. package/src/duckdb/src/function/cast/array_casts.cpp +226 -0
  328. package/src/duckdb/src/function/cast/bit_cast.cpp +2 -0
  329. package/src/duckdb/src/function/cast/cast_function_set.cpp +13 -2
  330. package/src/duckdb/src/function/cast/decimal_cast.cpp +2 -0
  331. package/src/duckdb/src/function/cast/default_casts.cpp +4 -1
  332. package/src/duckdb/src/function/cast/list_casts.cpp +151 -6
  333. package/src/duckdb/src/function/cast/numeric_casts.cpp +4 -0
  334. package/src/duckdb/src/function/cast/string_cast.cpp +95 -5
  335. package/src/duckdb/src/function/cast/struct_cast.cpp +53 -19
  336. package/src/duckdb/src/function/cast/time_casts.cpp +23 -1
  337. package/src/duckdb/src/function/cast/union/from_struct.cpp +1 -0
  338. package/src/duckdb/src/function/cast/union_casts.cpp +4 -3
  339. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +8 -4
  340. package/src/duckdb/src/function/cast_rules.cpp +197 -31
  341. package/src/duckdb/src/function/compression_config.cpp +4 -0
  342. package/src/duckdb/src/function/function.cpp +15 -9
  343. package/src/duckdb/src/function/function_binder.cpp +80 -29
  344. package/src/duckdb/src/function/function_set.cpp +6 -6
  345. package/src/duckdb/src/function/pragma/pragma_functions.cpp +10 -8
  346. package/src/duckdb/src/function/pragma/pragma_queries.cpp +34 -38
  347. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +12 -0
  348. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +10 -1
  349. package/src/duckdb/src/function/scalar/list/list_concat.cpp +11 -1
  350. package/src/duckdb/src/function/scalar/list/list_extract.cpp +14 -3
  351. package/src/duckdb/src/function/scalar/list/list_resize.cpp +4 -0
  352. package/src/duckdb/src/function/scalar/list/list_select.cpp +176 -0
  353. package/src/duckdb/src/function/scalar/list/list_zip.cpp +165 -0
  354. package/src/duckdb/src/function/scalar/nested_functions.cpp +33 -0
  355. package/src/duckdb/src/function/scalar/operators/add.cpp +53 -6
  356. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +48 -14
  357. package/src/duckdb/src/function/scalar/operators/multiply.cpp +9 -1
  358. package/src/duckdb/src/function/scalar/operators/subtract.cpp +19 -4
  359. package/src/duckdb/src/function/scalar/sequence/nextval.cpp +28 -55
  360. package/src/duckdb/src/function/scalar/strftime_format.cpp +242 -19
  361. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -2
  362. package/src/duckdb/src/function/scalar/string/concat.cpp +16 -6
  363. package/src/duckdb/src/function/scalar/string/length.cpp +124 -24
  364. package/src/duckdb/src/function/scalar/string/regexp.cpp +27 -27
  365. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +64 -15
  366. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +4 -3
  367. package/src/duckdb/src/function/scalar_function.cpp +8 -7
  368. package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +12 -0
  369. package/src/duckdb/src/function/table/arrow.cpp +20 -27
  370. package/src/duckdb/src/function/table/arrow_conversion.cpp +433 -150
  371. package/src/duckdb/src/function/table/copy_csv.cpp +62 -62
  372. package/src/duckdb/src/function/table/range.cpp +6 -3
  373. package/src/duckdb/src/function/table/read_csv.cpp +107 -759
  374. package/src/duckdb/src/function/table/read_file.cpp +242 -0
  375. package/src/duckdb/src/function/table/sniff_csv.cpp +275 -0
  376. package/src/duckdb/src/function/table/system/duckdb_columns.cpp +15 -3
  377. package/src/duckdb/src/function/table/system/duckdb_databases.cpp +5 -0
  378. package/src/duckdb/src/function/table/system/duckdb_dependencies.cpp +9 -13
  379. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +67 -14
  380. package/src/duckdb/src/function/table/system/duckdb_indexes.cpp +12 -15
  381. package/src/duckdb/src/function/table/system/duckdb_memory.cpp +63 -0
  382. package/src/duckdb/src/function/table/system/duckdb_optimizers.cpp +57 -0
  383. package/src/duckdb/src/function/table/system/duckdb_schemas.cpp +5 -0
  384. package/src/duckdb/src/function/table/system/duckdb_secrets.cpp +128 -0
  385. package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +12 -6
  386. package/src/duckdb/src/function/table/system/duckdb_settings.cpp +0 -1
  387. package/src/duckdb/src/function/table/system/duckdb_tables.cpp +5 -0
  388. package/src/duckdb/src/function/table/system/duckdb_types.cpp +6 -0
  389. package/src/duckdb/src/function/table/system/duckdb_views.cpp +5 -0
  390. package/src/duckdb/src/function/table/system/pragma_table_info.cpp +166 -64
  391. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -1
  392. package/src/duckdb/src/function/table/system_functions.cpp +3 -2
  393. package/src/duckdb/src/function/table/table_scan.cpp +50 -110
  394. package/src/duckdb/src/function/table/version/pragma_version.cpp +4 -44
  395. package/src/duckdb/src/function/table_function.cpp +2 -2
  396. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +4 -3
  397. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_dependent_entry.hpp +27 -0
  398. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_entry.hpp +66 -0
  399. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_subject_entry.hpp +27 -0
  400. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +25 -5
  401. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +3 -1
  402. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -1
  403. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +19 -5
  404. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/list.hpp +1 -0
  405. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_macro_catalog_entry.hpp +2 -0
  406. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +1 -1
  407. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +26 -11
  408. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +1 -0
  409. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_macro_catalog_entry.hpp +2 -0
  410. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +1 -0
  411. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +2 -0
  412. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +15 -0
  413. package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +41 -49
  414. package/src/duckdb/src/include/duckdb/catalog/catalog_transaction.hpp +1 -0
  415. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +3 -1
  416. package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +120 -8
  417. package/src/duckdb/src/include/duckdb/catalog/dependency_catalog_set.hpp +32 -0
  418. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +2 -0
  419. package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +92 -12
  420. package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +1 -1
  421. package/src/duckdb/src/include/duckdb/common/adbc/adbc-init.hpp +4 -2
  422. package/src/duckdb/src/include/duckdb/common/adbc/adbc.h +1153 -12
  423. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +6 -6
  424. package/src/duckdb/src/include/duckdb/common/adbc/driver_manager.h +0 -2
  425. package/src/duckdb/src/include/duckdb/common/adbc/options.h +64 -0
  426. package/src/duckdb/src/include/duckdb/common/adbc/single_batch_array_stream.hpp +8 -0
  427. package/src/duckdb/src/include/duckdb/common/arrow/arrow.hpp +25 -6
  428. package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +3 -3
  429. package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +1 -1
  430. package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +30 -0
  431. package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +6 -6
  432. package/src/duckdb/src/include/duckdb/common/case_insensitive_map.hpp +10 -0
  433. package/src/duckdb/src/include/duckdb/common/constants.hpp +1 -0
  434. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +75 -19
  435. package/src/duckdb/src/include/duckdb/common/enums/catalog_type.hpp +11 -1
  436. package/src/duckdb/src/include/duckdb/common/enums/compression_type.hpp +3 -0
  437. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -0
  438. package/src/duckdb/src/include/duckdb/common/enums/index_constraint_type.hpp +35 -0
  439. package/src/duckdb/src/include/duckdb/common/enums/join_type.hpp +16 -3
  440. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +6 -5
  441. package/src/duckdb/src/include/duckdb/common/enums/memory_tag.hpp +32 -0
  442. package/src/duckdb/src/include/duckdb/common/enums/on_create_conflict.hpp +26 -0
  443. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  444. package/src/duckdb/src/include/duckdb/common/enums/pending_execution_result.hpp +7 -1
  445. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +9 -3
  446. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +6 -5
  447. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +3 -2
  448. package/src/duckdb/src/include/duckdb/common/enums/wal_type.hpp +1 -0
  449. package/src/duckdb/src/include/duckdb/common/error_data.hpp +72 -0
  450. package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +47 -0
  451. package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +39 -0
  452. package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +27 -0
  453. package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +62 -0
  454. package/src/duckdb/src/include/duckdb/common/exception/list.hpp +6 -0
  455. package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +29 -0
  456. package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +25 -0
  457. package/src/duckdb/src/include/duckdb/common/exception.hpp +52 -166
  458. package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +7 -4
  459. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +53 -1
  460. package/src/duckdb/src/include/duckdb/common/helper.hpp +13 -3
  461. package/src/duckdb/src/include/duckdb/common/http_state.hpp +18 -4
  462. package/src/duckdb/src/include/duckdb/common/hugeint.hpp +5 -1
  463. package/src/duckdb/src/include/duckdb/common/limits.hpp +19 -1
  464. package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +1 -0
  465. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +7 -2
  466. package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +16 -3
  467. package/src/duckdb/src/include/duckdb/common/operator/add.hpp +13 -2
  468. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +114 -5
  469. package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +0 -4
  470. package/src/duckdb/src/include/duckdb/common/operator/convert_to_string.hpp +2 -0
  471. package/src/duckdb/src/include/duckdb/common/operator/decimal_cast_operators.hpp +29 -0
  472. package/src/duckdb/src/include/duckdb/common/operator/double_cast_operator.hpp +52 -0
  473. package/src/duckdb/src/include/duckdb/common/operator/integer_cast_operator.hpp +459 -0
  474. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  475. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +136 -0
  476. package/src/duckdb/src/include/duckdb/common/operator/string_cast.hpp +2 -0
  477. package/src/duckdb/src/include/duckdb/common/operator/subtract.hpp +7 -1
  478. package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +7 -5
  479. package/src/duckdb/src/include/duckdb/common/platform.h +53 -0
  480. package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
  481. package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +22 -6
  482. package/src/duckdb/src/include/duckdb/common/radix.hpp +6 -0
  483. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +20 -6
  484. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -0
  485. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +1 -0
  486. package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +43 -4
  487. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +1 -0
  488. package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +15 -0
  489. package/src/duckdb/src/include/duckdb/common/sort/comparators.hpp +2 -0
  490. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +12 -2
  491. package/src/duckdb/src/include/duckdb/common/sort/sort.hpp +81 -0
  492. package/src/duckdb/src/include/duckdb/common/sort/sorted_block.hpp +0 -78
  493. package/src/duckdb/src/include/duckdb/common/string_util.hpp +23 -1
  494. package/src/duckdb/src/include/duckdb/common/type_util.hpp +5 -1
  495. package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +26 -3
  496. package/src/duckdb/src/include/duckdb/common/types/conflict_manager.hpp +8 -0
  497. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +3 -0
  498. package/src/duckdb/src/include/duckdb/common/types/date.hpp +3 -0
  499. package/src/duckdb/src/include/duckdb/common/types/datetime.hpp +5 -3
  500. package/src/duckdb/src/include/duckdb/common/types/hash.hpp +2 -0
  501. package/src/duckdb/src/include/duckdb/common/types/hugeint.hpp +81 -15
  502. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +57 -29
  503. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +1 -1
  504. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +4 -2
  505. package/src/duckdb/src/include/duckdb/common/types/row/row_data_collection.hpp +2 -2
  506. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +26 -22
  507. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +7 -0
  508. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +7 -5
  509. package/src/duckdb/src/include/duckdb/common/types/time.hpp +6 -2
  510. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +2 -0
  511. package/src/duckdb/src/include/duckdb/common/types/uhugeint.hpp +216 -0
  512. package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +18 -10
  513. package/src/duckdb/src/include/duckdb/common/types/value.hpp +31 -0
  514. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +18 -2
  515. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +22 -1
  516. package/src/duckdb/src/include/duckdb/common/types.hpp +151 -49
  517. package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +81 -0
  518. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +70 -6
  519. package/src/duckdb/src/include/duckdb/common/vector_size.hpp +6 -6
  520. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +29 -2
  521. package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +131 -0
  522. package/src/duckdb/src/include/duckdb/core_functions/scalar/array_functions.hpp +69 -0
  523. package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +9 -0
  524. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +40 -4
  525. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +42 -0
  526. package/src/duckdb/src/include/duckdb/core_functions/scalar/secret_functions.hpp +27 -0
  527. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +56 -2
  528. package/src/duckdb/src/include/duckdb/core_functions/to_interval.hpp +29 -0
  529. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +2 -2
  530. package/src/duckdb/src/include/duckdb/execution/executor.hpp +11 -13
  531. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +34 -19
  532. package/src/duckdb/src/include/duckdb/execution/index/fixed_size_allocator.hpp +18 -14
  533. package/src/duckdb/src/include/duckdb/execution/index/fixed_size_buffer.hpp +2 -1
  534. package/src/duckdb/src/include/duckdb/execution/index/index_type.hpp +57 -0
  535. package/src/duckdb/src/include/duckdb/execution/index/index_type_set.hpp +29 -0
  536. package/src/duckdb/src/include/duckdb/execution/index/unknown_index.hpp +65 -0
  537. package/src/duckdb/src/include/duckdb/execution/join_hashtable.hpp +35 -24
  538. package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +630 -0
  539. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +2 -0
  540. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +3 -2
  541. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp +103 -0
  542. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp +74 -0
  543. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp +60 -0
  544. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp +155 -0
  545. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp +163 -0
  546. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp +35 -0
  547. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp +228 -0
  548. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp +70 -0
  549. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp +93 -0
  550. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp +60 -0
  551. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp +197 -0
  552. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +189 -0
  553. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp +21 -0
  554. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp +30 -0
  555. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp +99 -0
  556. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp +87 -0
  557. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp +70 -0
  558. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp +80 -0
  559. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp +137 -0
  560. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp +104 -0
  561. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +0 -4
  562. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_buffered_collector.hpp +37 -0
  563. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_create_secret.hpp +38 -0
  564. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_pragma.hpp +4 -7
  565. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_reservoir_sample.hpp +6 -2
  566. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_blockwise_nl_join.hpp +1 -2
  567. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_delim_join.hpp +5 -18
  568. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +14 -5
  569. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +2 -2
  570. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_join.hpp +2 -1
  571. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_left_delim_join.hpp +37 -0
  572. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_nested_loop_join.hpp +1 -2
  573. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
  574. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +1 -1
  575. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_right_delim_join.hpp +37 -0
  576. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +0 -1
  577. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +0 -1
  578. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_database.hpp +35 -0
  579. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +8 -3
  580. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_export.hpp +14 -0
  581. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +1 -4
  582. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_expression_scan.hpp +0 -1
  583. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +17 -12
  584. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +4 -0
  585. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_union.hpp +3 -1
  586. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +2 -1
  587. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +6 -2
  588. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +3 -1
  589. package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +32 -18
  590. package/src/duckdb/src/include/duckdb/execution/task_error_manager.hpp +57 -0
  591. package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +2 -0
  592. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +101 -19
  593. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +46 -14
  594. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +6 -2
  595. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  596. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +26 -1
  597. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +3 -0
  598. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +1 -0
  599. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +7 -1
  600. package/src/duckdb/src/include/duckdb/function/compression/compression.hpp +10 -0
  601. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +16 -4
  602. package/src/duckdb/src/include/duckdb/function/function.hpp +12 -7
  603. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +15 -12
  604. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +4 -3
  605. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +3 -3
  606. package/src/duckdb/src/include/duckdb/function/pragma/pragma_functions.hpp +4 -1
  607. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -0
  608. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +21 -1
  609. package/src/duckdb/src/include/duckdb/function/scalar/sequence_functions.hpp +22 -0
  610. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +16 -2
  611. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +22 -8
  612. package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +6 -0
  613. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +35 -3
  614. package/src/duckdb/src/include/duckdb/function/table/list.hpp +1 -0
  615. package/src/duckdb/src/include/duckdb/function/table/range.hpp +12 -0
  616. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +14 -16
  617. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +12 -8
  618. package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +0 -2
  619. package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -3
  620. package/src/duckdb/src/include/duckdb/main/appender.hpp +3 -1
  621. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -2
  622. package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +89 -0
  623. package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +53 -0
  624. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -1
  625. package/src/duckdb/src/include/duckdb/main/capi/cast/generic.hpp +2 -0
  626. package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +4 -4
  627. package/src/duckdb/src/include/duckdb/main/chunk_scan_state.hpp +3 -3
  628. package/src/duckdb/src/include/duckdb/main/client_config.hpp +8 -10
  629. package/src/duckdb/src/include/duckdb/main/client_context.hpp +22 -23
  630. package/src/duckdb/src/include/duckdb/main/client_context_state.hpp +37 -0
  631. package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -7
  632. package/src/duckdb/src/include/duckdb/main/config.hpp +24 -7
  633. package/src/duckdb/src/include/duckdb/main/connection.hpp +8 -1
  634. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +17 -26
  635. package/src/duckdb/src/include/duckdb/main/database.hpp +4 -2
  636. package/src/duckdb/src/include/duckdb/main/database_manager.hpp +39 -7
  637. package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +5 -4
  638. package/src/duckdb/src/include/duckdb/main/error_manager.hpp +4 -1
  639. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +203 -197
  640. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +42 -16
  641. package/src/duckdb/src/include/duckdb/main/extension_util.hpp +8 -1
  642. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +1 -1
  643. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +5 -2
  644. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +4 -4
  645. package/src/duckdb/src/include/duckdb/main/prepared_statement_data.hpp +2 -0
  646. package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +0 -32
  647. package/src/duckdb/src/include/duckdb/main/query_result.hpp +13 -12
  648. package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +6 -6
  649. package/src/duckdb/src/include/duckdb/main/relation/setop_relation.hpp +3 -1
  650. package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +206 -0
  651. package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +211 -0
  652. package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +164 -0
  653. package/src/duckdb/src/include/duckdb/main/settings.hpp +52 -13
  654. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +9 -1
  655. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +4 -1
  656. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  657. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
  658. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +2 -0
  659. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +3 -0
  660. package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_statistics_helper.hpp +1 -0
  661. package/src/duckdb/src/include/duckdb/parallel/event.hpp +2 -2
  662. package/src/duckdb/src/include/duckdb/parallel/meta_pipeline.hpp +14 -22
  663. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +20 -0
  664. package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +3 -5
  665. package/src/duckdb/src/include/duckdb/parallel/task.hpp +7 -0
  666. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +10 -4
  667. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +3 -0
  668. package/src/duckdb/src/include/duckdb/parser/column_definition.hpp +8 -1
  669. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +11 -4
  670. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +16 -9
  671. package/src/duckdb/src/include/duckdb/parser/expression/lambdaref_expression.hpp +47 -0
  672. package/src/duckdb/src/include/duckdb/parser/expression/list.hpp +1 -0
  673. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +29 -2
  674. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +2 -1
  675. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +47 -2
  676. package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +3 -0
  677. package/src/duckdb/src/include/duckdb/parser/parsed_data/bound_pragma_info.hpp +29 -0
  678. package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_info.hpp +45 -0
  679. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +21 -22
  680. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +5 -11
  681. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_schema_info.hpp +23 -0
  682. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +47 -0
  683. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_info.hpp +3 -1
  684. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +2 -0
  685. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +4 -0
  686. package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +6 -1
  687. package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +66 -0
  688. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -1
  689. package/src/duckdb/src/include/duckdb/parser/parsed_data/pragma_info.hpp +8 -4
  690. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +1 -3
  691. package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +2 -0
  692. package/src/duckdb/src/include/duckdb/parser/qualified_name.hpp +1 -1
  693. package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +5 -22
  694. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +2 -0
  695. package/src/duckdb/src/include/duckdb/parser/statement/copy_database_statement.hpp +40 -0
  696. package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -1
  697. package/src/duckdb/src/include/duckdb/parser/statement/set_statement.hpp +4 -3
  698. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
  699. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  700. package/src/duckdb/src/include/duckdb/parser/tableref/showref.hpp +47 -0
  701. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +2 -1
  702. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -1
  703. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +20 -3
  704. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +5 -1
  705. package/src/duckdb/src/include/duckdb/planner/binder.hpp +24 -27
  706. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +4 -0
  707. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +4 -0
  708. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +4 -1
  709. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +2 -1
  710. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +4 -2
  711. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +5 -6
  712. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +11 -0
  713. package/src/duckdb/src/include/duckdb/planner/expression.hpp +2 -1
  714. package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +2 -2
  715. package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +3 -2
  716. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +2 -1
  717. package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +2 -1
  718. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +65 -22
  719. package/src/duckdb/src/include/duckdb/planner/filter/struct_filter.hpp +41 -0
  720. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +2 -1
  721. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  722. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +2 -0
  723. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +45 -0
  724. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +3 -0
  725. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +43 -0
  726. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +3 -2
  727. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +5 -10
  728. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +2 -0
  729. package/src/duckdb/src/include/duckdb/planner/operator/logical_set_operation.hpp +11 -4
  730. package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +3 -3
  731. package/src/duckdb/src/include/duckdb/planner/pragma_handler.hpp +1 -1
  732. package/src/duckdb/src/include/duckdb/planner/query_node/bound_set_operation_node.hpp +2 -0
  733. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +3 -0
  734. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_cte_scan.hpp +29 -0
  735. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +9 -7
  736. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +2 -1
  737. package/src/duckdb/src/include/duckdb/planner/tableref/bound_dummytableref.hpp +3 -2
  738. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +9 -5
  739. package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +23 -6
  740. package/src/duckdb/src/include/duckdb/storage/buffer/temporary_file_information.hpp +7 -0
  741. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +11 -4
  742. package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +0 -3
  743. package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
  744. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +7 -7
  745. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  746. package/src/duckdb/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp +408 -0
  747. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +173 -0
  748. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +283 -0
  749. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_constants.hpp +134 -0
  750. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +42 -0
  751. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +244 -0
  752. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_utils.hpp +103 -0
  753. package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +235 -0
  754. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +134 -0
  755. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +301 -0
  756. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_constants.hpp +35 -0
  757. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +41 -0
  758. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +252 -0
  759. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +7 -103
  760. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +5 -234
  761. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -2
  762. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +7 -107
  763. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +5 -184
  764. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +12 -17
  765. package/src/duckdb/src/include/duckdb/storage/database_size.hpp +1 -0
  766. package/src/duckdb/src/include/duckdb/storage/index.hpp +40 -42
  767. package/src/duckdb/src/include/duckdb/storage/index_storage_info.hpp +77 -0
  768. package/src/duckdb/src/include/duckdb/storage/metadata/metadata_manager.hpp +6 -2
  769. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +0 -1
  770. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +12 -6
  771. package/src/duckdb/src/include/duckdb/storage/segment/uncompressed.hpp +8 -3
  772. package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +17 -17
  773. package/src/duckdb/src/include/duckdb/storage/statistics/array_stats.hpp +40 -0
  774. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +12 -3
  775. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -0
  776. package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +3 -2
  777. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +49 -24
  778. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +8 -4
  779. package/src/duckdb/src/include/duckdb/storage/table/array_column_data.hpp +67 -0
  780. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +3 -3
  781. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +1 -0
  782. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +1 -2
  783. package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +8 -3
  784. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  785. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -2
  786. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +7 -0
  787. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +12 -1
  788. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +1 -1
  789. package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +1 -1
  790. package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +16 -12
  791. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +4 -0
  792. package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +6 -9
  793. package/src/duckdb/src/include/duckdb/storage/temporary_memory_manager.hpp +119 -0
  794. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +13 -55
  795. package/src/duckdb/src/include/duckdb/transaction/duck_transaction.hpp +1 -1
  796. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +4 -5
  797. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
  798. package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +6 -3
  799. package/src/duckdb/src/include/duckdb/transaction/transaction_context.hpp +4 -4
  800. package/src/duckdb/src/include/duckdb/transaction/transaction_manager.hpp +3 -3
  801. package/src/duckdb/src/include/duckdb/verification/fetch_row_verifier.hpp +25 -0
  802. package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +5 -0
  803. package/src/duckdb/src/include/duckdb.h +571 -143
  804. package/src/duckdb/src/main/appender.cpp +17 -2
  805. package/src/duckdb/src/main/attached_database.cpp +24 -12
  806. package/src/duckdb/src/main/buffered_data/simple_buffered_data.cpp +96 -0
  807. package/src/duckdb/src/main/capi/appender-c.cpp +42 -3
  808. package/src/duckdb/src/main/capi/arrow-c.cpp +32 -9
  809. package/src/duckdb/src/main/capi/datetime-c.cpp +22 -0
  810. package/src/duckdb/src/main/capi/duckdb-c.cpp +14 -4
  811. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +66 -2
  812. package/src/duckdb/src/main/capi/helper-c.cpp +76 -2
  813. package/src/duckdb/src/main/capi/hugeint-c.cpp +23 -0
  814. package/src/duckdb/src/main/capi/logical_types-c.cpp +27 -3
  815. package/src/duckdb/src/main/capi/pending-c.cpp +43 -9
  816. package/src/duckdb/src/main/capi/prepared-c.cpp +38 -2
  817. package/src/duckdb/src/main/capi/result-c.cpp +54 -3
  818. package/src/duckdb/src/main/capi/table_function-c.cpp +4 -4
  819. package/src/duckdb/src/main/capi/value-c.cpp +10 -0
  820. package/src/duckdb/src/main/chunk_scan_state/query_result.cpp +3 -3
  821. package/src/duckdb/src/main/client_context.cpp +259 -250
  822. package/src/duckdb/src/main/client_data.cpp +0 -1
  823. package/src/duckdb/src/main/client_verify.cpp +26 -8
  824. package/src/duckdb/src/main/config.cpp +34 -13
  825. package/src/duckdb/src/main/connection.cpp +27 -6
  826. package/src/duckdb/src/main/connection_manager.cpp +54 -0
  827. package/src/duckdb/src/main/database.cpp +44 -39
  828. package/src/duckdb/src/main/database_manager.cpp +106 -8
  829. package/src/duckdb/src/main/database_path_and_type.cpp +27 -8
  830. package/src/duckdb/src/main/db_instance_cache.cpp +4 -4
  831. package/src/duckdb/src/main/error_manager.cpp +12 -3
  832. package/src/duckdb/src/main/extension/extension_alias.cpp +2 -2
  833. package/src/duckdb/src/main/extension/extension_helper.cpp +15 -16
  834. package/src/duckdb/src/main/extension/extension_install.cpp +33 -24
  835. package/src/duckdb/src/main/extension/extension_load.cpp +22 -21
  836. package/src/duckdb/src/main/extension/extension_util.cpp +12 -0
  837. package/src/duckdb/src/main/materialized_query_result.cpp +1 -1
  838. package/src/duckdb/src/main/pending_query_result.cpp +25 -8
  839. package/src/duckdb/src/main/prepared_statement.cpp +5 -5
  840. package/src/duckdb/src/main/prepared_statement_data.cpp +8 -1
  841. package/src/duckdb/src/main/query_profiler.cpp +11 -11
  842. package/src/duckdb/src/main/query_result.cpp +32 -6
  843. package/src/duckdb/src/main/relation/cross_product_relation.cpp +1 -1
  844. package/src/duckdb/src/main/relation/join_relation.cpp +2 -2
  845. package/src/duckdb/src/main/relation/read_csv_relation.cpp +38 -32
  846. package/src/duckdb/src/main/relation/setop_relation.cpp +5 -3
  847. package/src/duckdb/src/main/relation.cpp +5 -5
  848. package/src/duckdb/src/main/secret/secret.cpp +135 -0
  849. package/src/duckdb/src/main/secret/secret_manager.cpp +634 -0
  850. package/src/duckdb/src/main/secret/secret_storage.cpp +233 -0
  851. package/src/duckdb/src/main/settings/settings.cpp +133 -38
  852. package/src/duckdb/src/main/stream_query_result.cpp +53 -14
  853. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +6 -0
  854. package/src/duckdb/src/optimizer/cse_optimizer.cpp +1 -1
  855. package/src/duckdb/src/optimizer/deliminator.cpp +136 -14
  856. package/src/duckdb/src/optimizer/filter_combiner.cpp +72 -26
  857. package/src/duckdb/src/optimizer/filter_pushdown.cpp +3 -0
  858. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +2 -1
  859. package/src/duckdb/src/optimizer/join_order/cost_model.cpp +0 -1
  860. package/src/duckdb/src/optimizer/join_order/join_node.cpp +4 -0
  861. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -6
  862. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +20 -0
  863. package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +71 -40
  864. package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +12 -3
  865. package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +77 -3
  866. package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +7 -7
  867. package/src/duckdb/src/optimizer/pushdown/pushdown_semi_anti_join.cpp +56 -0
  868. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +21 -0
  869. package/src/duckdb/src/optimizer/rule/date_part_simplification.cpp +2 -2
  870. package/src/duckdb/src/optimizer/rule/move_constants.cpp +15 -10
  871. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +70 -0
  872. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +17 -5
  873. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -0
  874. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +1 -0
  875. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -2
  876. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +22 -9
  877. package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +28 -4
  878. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +12 -7
  879. package/src/duckdb/src/parallel/event.cpp +2 -2
  880. package/src/duckdb/src/parallel/executor.cpp +114 -81
  881. package/src/duckdb/src/parallel/executor_task.cpp +2 -4
  882. package/src/duckdb/src/parallel/meta_pipeline.cpp +28 -29
  883. package/src/duckdb/src/parallel/pipeline.cpp +41 -41
  884. package/src/duckdb/src/parallel/pipeline_event.cpp +2 -4
  885. package/src/duckdb/src/parallel/pipeline_executor.cpp +13 -75
  886. package/src/duckdb/src/parallel/task_scheduler.cpp +22 -13
  887. package/src/duckdb/src/parser/column_definition.cpp +22 -4
  888. package/src/duckdb/src/parser/column_list.cpp +2 -1
  889. package/src/duckdb/src/parser/expression/function_expression.cpp +1 -1
  890. package/src/duckdb/src/parser/expression/lambda_expression.cpp +51 -0
  891. package/src/duckdb/src/parser/expression/lambdaref_expression.cpp +59 -0
  892. package/src/duckdb/src/parser/expression/window_expression.cpp +9 -1
  893. package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +40 -0
  894. package/src/duckdb/src/parser/parsed_data/attach_info.cpp +1 -0
  895. package/src/duckdb/src/parser/parsed_data/comment_on_info.cpp +19 -0
  896. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +11 -9
  897. package/src/duckdb/src/parser/parsed_data/create_info.cpp +1 -0
  898. package/src/duckdb/src/parser/parsed_data/create_secret_info.cpp +22 -0
  899. package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +17 -0
  900. package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +19 -0
  901. package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +13 -9
  902. package/src/duckdb/src/parser/parsed_data/drop_info.cpp +8 -9
  903. package/src/duckdb/src/parser/parsed_data/extra_drop_info.cpp +16 -0
  904. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +3 -1
  905. package/src/duckdb/src/parser/parser.cpp +14 -8
  906. package/src/duckdb/src/parser/query_error_context.cpp +12 -13
  907. package/src/duckdb/src/parser/query_node/select_node.cpp +5 -1
  908. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +8 -13
  909. package/src/duckdb/src/parser/statement/copy_database_statement.cpp +41 -0
  910. package/src/duckdb/src/parser/statement/set_statement.cpp +5 -1
  911. package/src/duckdb/src/parser/tableref/basetableref.cpp +1 -0
  912. package/src/duckdb/src/parser/tableref/showref.cpp +47 -0
  913. package/src/duckdb/src/parser/transform/constraint/transform_constraint.cpp +6 -2
  914. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -0
  915. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +30 -15
  916. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +1 -0
  917. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +3 -2
  918. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +34 -4
  919. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +26 -12
  920. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +1 -1
  921. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +34 -5
  922. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +3 -1
  923. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +3 -1
  924. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +3 -3
  925. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +3 -3
  926. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +1 -1
  927. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +13 -13
  928. package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +2 -0
  929. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -1
  930. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +32 -1
  931. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +1 -1
  932. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +1 -0
  933. package/src/duckdb/src/parser/transform/statement/transform_comment_on.cpp +108 -0
  934. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +45 -37
  935. package/src/duckdb/src/parser/transform/statement/transform_copy_database.cpp +29 -0
  936. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +5 -14
  937. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +0 -1
  938. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +1 -1
  939. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +25 -6
  940. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -1
  941. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +6 -14
  942. package/src/duckdb/src/parser/transform/statement/transform_secret.cpp +103 -0
  943. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -1
  944. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +4 -8
  945. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -5
  946. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +14 -41
  947. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +13 -6
  948. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -1
  949. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +1 -1
  950. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +1 -2
  951. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +6 -5
  952. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +1 -1
  953. package/src/duckdb/src/parser/transformer.cpp +22 -0
  954. package/src/duckdb/src/planner/bind_context.cpp +23 -14
  955. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +15 -14
  956. package/src/duckdb/src/planner/binder/expression/bind_between_expression.cpp +20 -9
  957. package/src/duckdb/src/planner/binder/expression/bind_case_expression.cpp +12 -7
  958. package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +4 -4
  959. package/src/duckdb/src/planner/binder/expression/bind_collate_expression.cpp +3 -3
  960. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +279 -195
  961. package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +103 -17
  962. package/src/duckdb/src/planner/binder/expression/bind_conjunction_expression.cpp +3 -3
  963. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +91 -68
  964. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +116 -84
  965. package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +85 -15
  966. package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +68 -31
  967. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +7 -7
  968. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +11 -7
  969. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +42 -19
  970. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +38 -16
  971. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +16 -7
  972. package/src/duckdb/src/planner/binder/query_node/bind_recursive_cte_node.cpp +3 -0
  973. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +83 -12
  974. package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -37
  975. package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +3 -4
  976. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +2 -2
  977. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +3 -3
  978. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +7 -5
  979. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -0
  980. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +48 -50
  981. package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +187 -0
  982. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +38 -22
  983. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +8 -15
  984. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +6 -1
  985. package/src/duckdb/src/planner/binder/statement/bind_export.cpp +2 -2
  986. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -10
  987. package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +37 -13
  988. package/src/duckdb/src/planner/binder/statement/bind_set.cpp +8 -2
  989. package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +2 -0
  990. package/src/duckdb/src/planner/binder/statement/bind_summarize.cpp +29 -14
  991. package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +1 -1
  992. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +16 -6
  993. package/src/duckdb/src/planner/binder/tableref/bind_expressionlistref.cpp +11 -4
  994. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +1 -1
  995. package/src/duckdb/src/planner/binder/tableref/bind_named_parameters.cpp +2 -2
  996. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +18 -17
  997. package/src/duckdb/src/planner/binder/tableref/bind_showref.cpp +85 -0
  998. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -17
  999. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -9
  1000. package/src/duckdb/src/planner/binder.cpp +31 -26
  1001. package/src/duckdb/src/planner/bound_result_modifier.cpp +24 -0
  1002. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
  1003. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +10 -1
  1004. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +20 -4
  1005. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +9 -10
  1006. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +65 -3
  1007. package/src/duckdb/src/planner/expression.cpp +15 -5
  1008. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +5 -6
  1009. package/src/duckdb/src/planner/expression_binder/check_binder.cpp +9 -8
  1010. package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +10 -7
  1011. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +9 -4
  1012. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +0 -25
  1013. package/src/duckdb/src/planner/expression_binder/order_binder.cpp +8 -11
  1014. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -2
  1015. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +15 -8
  1016. package/src/duckdb/src/planner/expression_binder/where_binder.cpp +3 -4
  1017. package/src/duckdb/src/planner/expression_binder.cpp +51 -25
  1018. package/src/duckdb/src/planner/expression_iterator.cpp +2 -1
  1019. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -0
  1020. package/src/duckdb/src/planner/filter/struct_filter.cpp +33 -0
  1021. package/src/duckdb/src/planner/joinside.cpp +1 -1
  1022. package/src/duckdb/src/planner/logical_operator.cpp +2 -1
  1023. package/src/duckdb/src/planner/operator/logical_copy_database.cpp +32 -0
  1024. package/src/duckdb/src/planner/operator/logical_copy_to_file.cpp +13 -4
  1025. package/src/duckdb/src/planner/operator/logical_create_table.cpp +2 -0
  1026. package/src/duckdb/src/planner/operator/logical_get.cpp +4 -1
  1027. package/src/duckdb/src/planner/operator/logical_join.cpp +8 -0
  1028. package/src/duckdb/src/planner/planner.cpp +24 -23
  1029. package/src/duckdb/src/planner/pragma_handler.cpp +10 -19
  1030. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +99 -6
  1031. package/src/duckdb/src/planner/subquery/rewrite_cte_scan.cpp +36 -0
  1032. package/src/duckdb/src/planner/table_binding.cpp +14 -12
  1033. package/src/duckdb/src/storage/buffer/block_handle.cpp +12 -10
  1034. package/src/duckdb/src/storage/buffer/block_manager.cpp +1 -1
  1035. package/src/duckdb/src/storage/buffer/buffer_pool.cpp +25 -9
  1036. package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +4 -3
  1037. package/src/duckdb/src/storage/buffer_manager.cpp +14 -3
  1038. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +0 -8
  1039. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +15 -7
  1040. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +1 -1
  1041. package/src/duckdb/src/storage/checkpoint_manager.cpp +94 -41
  1042. package/src/duckdb/src/storage/compression/alp/alp.cpp +57 -0
  1043. package/src/duckdb/src/storage/compression/alp/alp_constants.cpp +13 -0
  1044. package/src/duckdb/src/storage/compression/alprd.cpp +57 -0
  1045. package/src/duckdb/src/storage/compression/bitpacking.cpp +86 -55
  1046. package/src/duckdb/src/storage/compression/bitpacking_hugeint.cpp +41 -41
  1047. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +1 -3
  1048. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +2 -0
  1049. package/src/duckdb/src/storage/compression/fsst.cpp +4 -4
  1050. package/src/duckdb/src/storage/compression/numeric_constant.cpp +3 -0
  1051. package/src/duckdb/src/storage/compression/rle.cpp +6 -4
  1052. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +7 -7
  1053. package/src/duckdb/src/storage/compression/uncompressed.cpp +1 -0
  1054. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
  1055. package/src/duckdb/src/storage/data_table.cpp +32 -96
  1056. package/src/duckdb/src/storage/index.cpp +23 -11
  1057. package/src/duckdb/src/storage/local_storage.cpp +36 -19
  1058. package/src/duckdb/src/storage/metadata/metadata_manager.cpp +2 -2
  1059. package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
  1060. package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +9 -4
  1061. package/src/duckdb/src/storage/serialization/serialize_expression.cpp +3 -3
  1062. package/src/duckdb/src/storage/serialization/serialize_extra_drop_info.cpp +42 -0
  1063. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +7 -17
  1064. package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +2 -2
  1065. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +84 -77
  1066. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +63 -4
  1067. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +23 -0
  1068. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +2 -0
  1069. package/src/duckdb/src/storage/serialization/serialize_storage.cpp +35 -0
  1070. package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +19 -0
  1071. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +22 -1
  1072. package/src/duckdb/src/storage/serialization/serialize_types.cpp +50 -0
  1073. package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -7
  1074. package/src/duckdb/src/storage/standard_buffer_manager.cpp +57 -28
  1075. package/src/duckdb/src/storage/statistics/array_stats.cpp +131 -0
  1076. package/src/duckdb/src/storage/statistics/base_statistics.cpp +62 -4
  1077. package/src/duckdb/src/storage/statistics/column_statistics.cpp +1 -0
  1078. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +3 -1
  1079. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +21 -0
  1080. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +5 -0
  1081. package/src/duckdb/src/storage/statistics/string_stats.cpp +2 -2
  1082. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  1083. package/src/duckdb/src/storage/storage_manager.cpp +47 -22
  1084. package/src/duckdb/src/storage/table/array_column_data.cpp +241 -0
  1085. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -1
  1086. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +3 -1
  1087. package/src/duckdb/src/storage/table/column_data.cpp +41 -18
  1088. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +12 -3
  1089. package/src/duckdb/src/storage/table/column_segment.cpp +40 -6
  1090. package/src/duckdb/src/storage/table/list_column_data.cpp +18 -15
  1091. package/src/duckdb/src/storage/table/row_group.cpp +73 -21
  1092. package/src/duckdb/src/storage/table/row_group_collection.cpp +395 -20
  1093. package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -1
  1094. package/src/duckdb/src/storage/table/scan_state.cpp +4 -0
  1095. package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -5
  1096. package/src/duckdb/src/storage/table/struct_column_data.cpp +30 -10
  1097. package/src/duckdb/src/storage/table/table_statistics.cpp +7 -1
  1098. package/src/duckdb/src/storage/table/update_segment.cpp +18 -2
  1099. package/src/duckdb/src/storage/table_index_list.cpp +73 -7
  1100. package/src/duckdb/src/storage/temporary_memory_manager.cpp +148 -0
  1101. package/src/duckdb/src/storage/wal_replay.cpp +329 -152
  1102. package/src/duckdb/src/storage/write_ahead_log.cpp +157 -137
  1103. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -2
  1104. package/src/duckdb/src/transaction/commit_state.cpp +89 -63
  1105. package/src/duckdb/src/transaction/duck_transaction.cpp +5 -3
  1106. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +26 -54
  1107. package/src/duckdb/src/transaction/meta_transaction.cpp +37 -23
  1108. package/src/duckdb/src/transaction/transaction_context.cpp +23 -4
  1109. package/src/duckdb/src/transaction/undo_buffer.cpp +16 -2
  1110. package/src/duckdb/src/verification/fetch_row_verifier.cpp +13 -0
  1111. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +5 -7
  1112. package/src/duckdb/src/verification/statement_verifier.cpp +6 -5
  1113. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +100 -29
  1114. package/src/duckdb/third_party/fmt/include/fmt/format-inl.h +1 -1
  1115. package/src/duckdb/third_party/fmt/include/fmt/format.h +4 -2
  1116. package/src/duckdb/third_party/fmt/include/fmt/printf.h +5 -5
  1117. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +4 -0
  1118. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +82 -21
  1119. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +551 -1004
  1120. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +17 -3
  1121. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24861 -23465
  1122. package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +420 -389
  1123. package/src/duckdb/third_party/mbedtls/include/mbedtls/aes.h +640 -1
  1124. package/src/duckdb/third_party/mbedtls/include/mbedtls/aes_alt.h +1 -0
  1125. package/src/duckdb/third_party/mbedtls/include/mbedtls/aria.h +358 -0
  1126. package/src/duckdb/third_party/mbedtls/include/mbedtls/aria_alt.h +1 -0
  1127. package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia.h +316 -0
  1128. package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia_alt.h +1 -0
  1129. package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm.h +1 -1
  1130. package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm_alt.h +1 -0
  1131. package/src/duckdb/third_party/mbedtls/include/mbedtls/chacha20.h +1 -0
  1132. package/src/duckdb/third_party/mbedtls/include/mbedtls/chachapoly.h +1 -0
  1133. package/src/duckdb/third_party/mbedtls/include/mbedtls/cipher.h +124 -124
  1134. package/src/duckdb/third_party/mbedtls/include/mbedtls/cmac.h +1 -0
  1135. package/src/duckdb/third_party/mbedtls/include/mbedtls/entropy.h +293 -0
  1136. package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm.h +383 -0
  1137. package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm_alt.h +1 -0
  1138. package/src/duckdb/third_party/mbedtls/include/mbedtls/mbedtls_config.h +9 -0
  1139. package/src/duckdb/third_party/mbedtls/include/mbedtls/nist_kw.h +1 -0
  1140. package/src/duckdb/third_party/mbedtls/include/mbedtls/timing.h +1 -0
  1141. package/src/duckdb/third_party/mbedtls/include/mbedtls_wrapper.hpp +35 -6
  1142. package/src/duckdb/third_party/mbedtls/library/aes.cpp +2171 -0
  1143. package/src/duckdb/third_party/mbedtls/library/aesni.h +1 -0
  1144. package/src/duckdb/third_party/mbedtls/library/aria.cpp +1058 -0
  1145. package/src/duckdb/third_party/mbedtls/library/camellia.cpp +1087 -0
  1146. package/src/duckdb/third_party/mbedtls/library/cipher.cpp +1633 -0
  1147. package/src/duckdb/third_party/mbedtls/library/cipher_wrap.cpp +2270 -0
  1148. package/src/duckdb/third_party/mbedtls/library/cipher_wrap.h +146 -0
  1149. package/src/duckdb/third_party/mbedtls/library/entropy.cpp +701 -0
  1150. package/src/duckdb/third_party/mbedtls/library/entropy_poll.cpp +237 -0
  1151. package/src/duckdb/third_party/mbedtls/library/entropy_poll.h +76 -0
  1152. package/src/duckdb/third_party/mbedtls/library/gcm.cpp +1161 -0
  1153. package/src/duckdb/third_party/mbedtls/library/padlock.h +1 -0
  1154. package/src/duckdb/third_party/mbedtls/mbedtls_wrapper.cpp +132 -24
  1155. package/src/duckdb/third_party/pcg/pcg_uint128.hpp +1 -1
  1156. package/src/duckdb/third_party/skiplist/HeadNode.h +934 -0
  1157. package/src/duckdb/third_party/skiplist/IntegrityEnums.h +62 -0
  1158. package/src/duckdb/third_party/skiplist/Node.h +641 -0
  1159. package/src/duckdb/third_party/skiplist/NodeRefs.h +251 -0
  1160. package/src/duckdb/third_party/skiplist/RollingMedian.h +202 -0
  1161. package/src/duckdb/third_party/skiplist/SkipList.cpp +40 -0
  1162. package/src/duckdb/third_party/skiplist/SkipList.h +549 -0
  1163. package/src/duckdb/third_party/thrift/thrift/thrift-config.h +1 -1
  1164. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  1165. package/src/duckdb/ub_src_catalog.cpp +3 -1
  1166. package/src/duckdb/ub_src_catalog_catalog_entry_dependency.cpp +6 -0
  1167. package/src/duckdb/ub_src_common.cpp +1 -1
  1168. package/src/duckdb/ub_src_common_exception.cpp +6 -0
  1169. package/src/duckdb/ub_src_common_types.cpp +2 -2
  1170. package/src/duckdb/ub_src_core_functions.cpp +2 -0
  1171. package/src/duckdb/ub_src_core_functions_scalar_array.cpp +4 -0
  1172. package/src/duckdb/ub_src_core_functions_scalar_blob.cpp +2 -0
  1173. package/src/duckdb/ub_src_core_functions_scalar_list.cpp +7 -3
  1174. package/src/duckdb/ub_src_core_functions_scalar_secret.cpp +2 -0
  1175. package/src/duckdb/ub_src_core_functions_scalar_string.cpp +4 -0
  1176. package/src/duckdb/ub_src_execution_index.cpp +4 -0
  1177. package/src/duckdb/ub_src_execution_operator_csv_scanner_buffer_manager.cpp +6 -0
  1178. package/src/duckdb/ub_src_execution_operator_csv_scanner_scanner.cpp +10 -0
  1179. package/src/duckdb/ub_src_execution_operator_csv_scanner_state_machine.cpp +4 -0
  1180. package/src/duckdb/ub_src_execution_operator_csv_scanner_table_function.cpp +4 -0
  1181. package/src/duckdb/ub_src_execution_operator_csv_scanner_util.cpp +4 -0
  1182. package/src/duckdb/ub_src_execution_operator_helper.cpp +4 -0
  1183. package/src/duckdb/ub_src_execution_operator_join.cpp +4 -2
  1184. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  1185. package/src/duckdb/ub_src_execution_physical_plan.cpp +4 -2
  1186. package/src/duckdb/ub_src_function_cast.cpp +2 -0
  1187. package/src/duckdb/ub_src_function_scalar_list.cpp +4 -0
  1188. package/src/duckdb/ub_src_function_table.cpp +4 -4
  1189. package/src/duckdb/ub_src_function_table_system.cpp +6 -0
  1190. package/src/duckdb/ub_src_main.cpp +2 -0
  1191. package/src/duckdb/ub_src_main_buffered_data.cpp +2 -0
  1192. package/src/duckdb/ub_src_main_secret.cpp +6 -0
  1193. package/src/duckdb/ub_src_optimizer_pushdown.cpp +2 -0
  1194. package/src/duckdb/ub_src_parser_expression.cpp +2 -0
  1195. package/src/duckdb/ub_src_parser_parsed_data.cpp +6 -0
  1196. package/src/duckdb/ub_src_parser_statement.cpp +2 -2
  1197. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  1198. package/src/duckdb/ub_src_parser_transform_statement.cpp +6 -0
  1199. package/src/duckdb/ub_src_planner_binder_statement.cpp +2 -2
  1200. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  1201. package/src/duckdb/ub_src_planner_filter.cpp +2 -0
  1202. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  1203. package/src/duckdb/ub_src_planner_subquery.cpp +2 -0
  1204. package/src/duckdb/ub_src_storage.cpp +2 -0
  1205. package/src/duckdb/ub_src_storage_compression.cpp +2 -0
  1206. package/src/duckdb/ub_src_storage_compression_alp.cpp +4 -0
  1207. package/src/duckdb/ub_src_storage_serialization.cpp +2 -0
  1208. package/src/duckdb/ub_src_storage_statistics.cpp +2 -0
  1209. package/src/duckdb/ub_src_storage_table.cpp +2 -0
  1210. package/src/duckdb_node.hpp +1 -1
  1211. package/src/statement.cpp +2 -2
  1212. package/src/utils.cpp +1 -15
@@ -0,0 +1,2171 @@
1
+ /*
2
+ * FIPS-197 compliant AES implementation
3
+ *
4
+ * Copyright The Mbed TLS Contributors
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may
8
+ * not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */
19
+ /*
20
+ * The AES block cipher was designed by Vincent Rijmen and Joan Daemen.
21
+ *
22
+ * http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.pdf
23
+ * http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
24
+ */
25
+
26
+ #include "common.h"
27
+
28
+ #if defined(MBEDTLS_AES_C)
29
+
30
+ #include <string.h>
31
+
32
+ #include "mbedtls/aes.h"
33
+ #include "mbedtls/platform.h"
34
+ #include "mbedtls/platform_util.h"
35
+ #include "mbedtls/error.h"
36
+ #if defined(MBEDTLS_PADLOCK_C)
37
+ #include "padlock.h"
38
+ #endif
39
+ #if defined(MBEDTLS_AESNI_C)
40
+ #include "aesni.h"
41
+ #endif
42
+
43
+ #if defined(MBEDTLS_SELF_TEST)
44
+ //#if defined(MBEDTLS_PLATFORM_C)
45
+ //#include "mbedtls/platform.h"
46
+ //#else
47
+ //#include <stdio.h>
48
+ //#define mbedtls_printf printf
49
+ //#endif /* MBEDTLS_PLATFORM_C */
50
+ #endif /* MBEDTLS_SELF_TEST */
51
+
52
+ #if !defined(MBEDTLS_AES_ALT)
53
+
54
+ /* Parameter validation macros based on platform_util.h */
55
+ #define AES_VALIDATE_RET( cond ) \
56
+ MBEDTLS_INTERNAL_VALIDATE_RET( cond, MBEDTLS_ERR_AES_BAD_INPUT_DATA )
57
+ #define AES_VALIDATE( cond ) \
58
+ MBEDTLS_INTERNAL_VALIDATE( cond )
59
+
60
+ #if defined(MBEDTLS_PADLOCK_C) && \
61
+ ( defined(MBEDTLS_HAVE_X86) || defined(MBEDTLS_PADLOCK_ALIGN16) )
62
+ static int aes_padlock_ace = -1;
63
+ #endif
64
+
65
+ #if defined(MBEDTLS_AES_ROM_TABLES)
66
+ /*
67
+ * Forward S-box
68
+ */
69
+ static const unsigned char AESFSb[256] =
70
+ {
71
+ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5,
72
+ 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
73
+ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0,
74
+ 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
75
+ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC,
76
+ 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
77
+ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A,
78
+ 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
79
+ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0,
80
+ 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
81
+ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B,
82
+ 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
83
+ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85,
84
+ 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
85
+ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5,
86
+ 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
87
+ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17,
88
+ 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
89
+ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88,
90
+ 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
91
+ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C,
92
+ 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
93
+ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9,
94
+ 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
95
+ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6,
96
+ 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
97
+ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E,
98
+ 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
99
+ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94,
100
+ 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
101
+ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68,
102
+ 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
103
+ };
104
+
105
+ /*
106
+ * Forward tables
107
+ */
108
+ #define FT \
109
+ \
110
+ V(A5,63,63,C6), V(84,7C,7C,F8), V(99,77,77,EE), V(8D,7B,7B,F6), \
111
+ V(0D,F2,F2,FF), V(BD,6B,6B,D6), V(B1,6F,6F,DE), V(54,C5,C5,91), \
112
+ V(50,30,30,60), V(03,01,01,02), V(A9,67,67,CE), V(7D,2B,2B,56), \
113
+ V(19,FE,FE,E7), V(62,D7,D7,B5), V(E6,AB,AB,4D), V(9A,76,76,EC), \
114
+ V(45,CA,CA,8F), V(9D,82,82,1F), V(40,C9,C9,89), V(87,7D,7D,FA), \
115
+ V(15,FA,FA,EF), V(EB,59,59,B2), V(C9,47,47,8E), V(0B,F0,F0,FB), \
116
+ V(EC,AD,AD,41), V(67,D4,D4,B3), V(FD,A2,A2,5F), V(EA,AF,AF,45), \
117
+ V(BF,9C,9C,23), V(F7,A4,A4,53), V(96,72,72,E4), V(5B,C0,C0,9B), \
118
+ V(C2,B7,B7,75), V(1C,FD,FD,E1), V(AE,93,93,3D), V(6A,26,26,4C), \
119
+ V(5A,36,36,6C), V(41,3F,3F,7E), V(02,F7,F7,F5), V(4F,CC,CC,83), \
120
+ V(5C,34,34,68), V(F4,A5,A5,51), V(34,E5,E5,D1), V(08,F1,F1,F9), \
121
+ V(93,71,71,E2), V(73,D8,D8,AB), V(53,31,31,62), V(3F,15,15,2A), \
122
+ V(0C,04,04,08), V(52,C7,C7,95), V(65,23,23,46), V(5E,C3,C3,9D), \
123
+ V(28,18,18,30), V(A1,96,96,37), V(0F,05,05,0A), V(B5,9A,9A,2F), \
124
+ V(09,07,07,0E), V(36,12,12,24), V(9B,80,80,1B), V(3D,E2,E2,DF), \
125
+ V(26,EB,EB,CD), V(69,27,27,4E), V(CD,B2,B2,7F), V(9F,75,75,EA), \
126
+ V(1B,09,09,12), V(9E,83,83,1D), V(74,2C,2C,58), V(2E,1A,1A,34), \
127
+ V(2D,1B,1B,36), V(B2,6E,6E,DC), V(EE,5A,5A,B4), V(FB,A0,A0,5B), \
128
+ V(F6,52,52,A4), V(4D,3B,3B,76), V(61,D6,D6,B7), V(CE,B3,B3,7D), \
129
+ V(7B,29,29,52), V(3E,E3,E3,DD), V(71,2F,2F,5E), V(97,84,84,13), \
130
+ V(F5,53,53,A6), V(68,D1,D1,B9), V(00,00,00,00), V(2C,ED,ED,C1), \
131
+ V(60,20,20,40), V(1F,FC,FC,E3), V(C8,B1,B1,79), V(ED,5B,5B,B6), \
132
+ V(BE,6A,6A,D4), V(46,CB,CB,8D), V(D9,BE,BE,67), V(4B,39,39,72), \
133
+ V(DE,4A,4A,94), V(D4,4C,4C,98), V(E8,58,58,B0), V(4A,CF,CF,85), \
134
+ V(6B,D0,D0,BB), V(2A,EF,EF,C5), V(E5,AA,AA,4F), V(16,FB,FB,ED), \
135
+ V(C5,43,43,86), V(D7,4D,4D,9A), V(55,33,33,66), V(94,85,85,11), \
136
+ V(CF,45,45,8A), V(10,F9,F9,E9), V(06,02,02,04), V(81,7F,7F,FE), \
137
+ V(F0,50,50,A0), V(44,3C,3C,78), V(BA,9F,9F,25), V(E3,A8,A8,4B), \
138
+ V(F3,51,51,A2), V(FE,A3,A3,5D), V(C0,40,40,80), V(8A,8F,8F,05), \
139
+ V(AD,92,92,3F), V(BC,9D,9D,21), V(48,38,38,70), V(04,F5,F5,F1), \
140
+ V(DF,BC,BC,63), V(C1,B6,B6,77), V(75,DA,DA,AF), V(63,21,21,42), \
141
+ V(30,10,10,20), V(1A,FF,FF,E5), V(0E,F3,F3,FD), V(6D,D2,D2,BF), \
142
+ V(4C,CD,CD,81), V(14,0C,0C,18), V(35,13,13,26), V(2F,EC,EC,C3), \
143
+ V(E1,5F,5F,BE), V(A2,97,97,35), V(CC,44,44,88), V(39,17,17,2E), \
144
+ V(57,C4,C4,93), V(F2,A7,A7,55), V(82,7E,7E,FC), V(47,3D,3D,7A), \
145
+ V(AC,64,64,C8), V(E7,5D,5D,BA), V(2B,19,19,32), V(95,73,73,E6), \
146
+ V(A0,60,60,C0), V(98,81,81,19), V(D1,4F,4F,9E), V(7F,DC,DC,A3), \
147
+ V(66,22,22,44), V(7E,2A,2A,54), V(AB,90,90,3B), V(83,88,88,0B), \
148
+ V(CA,46,46,8C), V(29,EE,EE,C7), V(D3,B8,B8,6B), V(3C,14,14,28), \
149
+ V(79,DE,DE,A7), V(E2,5E,5E,BC), V(1D,0B,0B,16), V(76,DB,DB,AD), \
150
+ V(3B,E0,E0,DB), V(56,32,32,64), V(4E,3A,3A,74), V(1E,0A,0A,14), \
151
+ V(DB,49,49,92), V(0A,06,06,0C), V(6C,24,24,48), V(E4,5C,5C,B8), \
152
+ V(5D,C2,C2,9F), V(6E,D3,D3,BD), V(EF,AC,AC,43), V(A6,62,62,C4), \
153
+ V(A8,91,91,39), V(A4,95,95,31), V(37,E4,E4,D3), V(8B,79,79,F2), \
154
+ V(32,E7,E7,D5), V(43,C8,C8,8B), V(59,37,37,6E), V(B7,6D,6D,DA), \
155
+ V(8C,8D,8D,01), V(64,D5,D5,B1), V(D2,4E,4E,9C), V(E0,A9,A9,49), \
156
+ V(B4,6C,6C,D8), V(FA,56,56,AC), V(07,F4,F4,F3), V(25,EA,EA,CF), \
157
+ V(AF,65,65,CA), V(8E,7A,7A,F4), V(E9,AE,AE,47), V(18,08,08,10), \
158
+ V(D5,BA,BA,6F), V(88,78,78,F0), V(6F,25,25,4A), V(72,2E,2E,5C), \
159
+ V(24,1C,1C,38), V(F1,A6,A6,57), V(C7,B4,B4,73), V(51,C6,C6,97), \
160
+ V(23,E8,E8,CB), V(7C,DD,DD,A1), V(9C,74,74,E8), V(21,1F,1F,3E), \
161
+ V(DD,4B,4B,96), V(DC,BD,BD,61), V(86,8B,8B,0D), V(85,8A,8A,0F), \
162
+ V(90,70,70,E0), V(42,3E,3E,7C), V(C4,B5,B5,71), V(AA,66,66,CC), \
163
+ V(D8,48,48,90), V(05,03,03,06), V(01,F6,F6,F7), V(12,0E,0E,1C), \
164
+ V(A3,61,61,C2), V(5F,35,35,6A), V(F9,57,57,AE), V(D0,B9,B9,69), \
165
+ V(91,86,86,17), V(58,C1,C1,99), V(27,1D,1D,3A), V(B9,9E,9E,27), \
166
+ V(38,E1,E1,D9), V(13,F8,F8,EB), V(B3,98,98,2B), V(33,11,11,22), \
167
+ V(BB,69,69,D2), V(70,D9,D9,A9), V(89,8E,8E,07), V(A7,94,94,33), \
168
+ V(B6,9B,9B,2D), V(22,1E,1E,3C), V(92,87,87,15), V(20,E9,E9,C9), \
169
+ V(49,CE,CE,87), V(FF,55,55,AA), V(78,28,28,50), V(7A,DF,DF,A5), \
170
+ V(8F,8C,8C,03), V(F8,A1,A1,59), V(80,89,89,09), V(17,0D,0D,1A), \
171
+ V(DA,BF,BF,65), V(31,E6,E6,D7), V(C6,42,42,84), V(B8,68,68,D0), \
172
+ V(C3,41,41,82), V(B0,99,99,29), V(77,2D,2D,5A), V(11,0F,0F,1E), \
173
+ V(CB,B0,B0,7B), V(FC,54,54,A8), V(D6,BB,BB,6D), V(3A,16,16,2C)
174
+
175
+ #define V(a,b,c,d) 0x##a##b##c##d
176
+ static const uint32_t FT0[256] = { FT };
177
+ #undef V
178
+
179
+ #if !defined(MBEDTLS_AES_FEWER_TABLES)
180
+
181
+ #define V(a,b,c,d) 0x##b##c##d##a
182
+ static const uint32_t FT1[256] = { FT };
183
+ #undef V
184
+
185
+ #define V(a,b,c,d) 0x##c##d##a##b
186
+ static const uint32_t FT2[256] = { FT };
187
+ #undef V
188
+
189
+ #define V(a,b,c,d) 0x##d##a##b##c
190
+ static const uint32_t FT3[256] = { FT };
191
+ #undef V
192
+
193
+ #endif /* !MBEDTLS_AES_FEWER_TABLES */
194
+
195
+ #undef FT
196
+
197
+ /*
198
+ * Reverse S-box
199
+ */
200
+ static const unsigned char RSb[256] =
201
+ {
202
+ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38,
203
+ 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
204
+ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87,
205
+ 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
206
+ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D,
207
+ 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
208
+ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2,
209
+ 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
210
+ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16,
211
+ 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
212
+ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA,
213
+ 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
214
+ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A,
215
+ 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
216
+ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02,
217
+ 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
218
+ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA,
219
+ 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
220
+ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85,
221
+ 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
222
+ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89,
223
+ 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
224
+ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20,
225
+ 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
226
+ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31,
227
+ 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
228
+ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D,
229
+ 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
230
+ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0,
231
+ 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
232
+ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26,
233
+ 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
234
+ };
235
+
236
+ /*
237
+ * Reverse tables
238
+ */
239
+ #define RT \
240
+ \
241
+ V(50,A7,F4,51), V(53,65,41,7E), V(C3,A4,17,1A), V(96,5E,27,3A), \
242
+ V(CB,6B,AB,3B), V(F1,45,9D,1F), V(AB,58,FA,AC), V(93,03,E3,4B), \
243
+ V(55,FA,30,20), V(F6,6D,76,AD), V(91,76,CC,88), V(25,4C,02,F5), \
244
+ V(FC,D7,E5,4F), V(D7,CB,2A,C5), V(80,44,35,26), V(8F,A3,62,B5), \
245
+ V(49,5A,B1,DE), V(67,1B,BA,25), V(98,0E,EA,45), V(E1,C0,FE,5D), \
246
+ V(02,75,2F,C3), V(12,F0,4C,81), V(A3,97,46,8D), V(C6,F9,D3,6B), \
247
+ V(E7,5F,8F,03), V(95,9C,92,15), V(EB,7A,6D,BF), V(DA,59,52,95), \
248
+ V(2D,83,BE,D4), V(D3,21,74,58), V(29,69,E0,49), V(44,C8,C9,8E), \
249
+ V(6A,89,C2,75), V(78,79,8E,F4), V(6B,3E,58,99), V(DD,71,B9,27), \
250
+ V(B6,4F,E1,BE), V(17,AD,88,F0), V(66,AC,20,C9), V(B4,3A,CE,7D), \
251
+ V(18,4A,DF,63), V(82,31,1A,E5), V(60,33,51,97), V(45,7F,53,62), \
252
+ V(E0,77,64,B1), V(84,AE,6B,BB), V(1C,A0,81,FE), V(94,2B,08,F9), \
253
+ V(58,68,48,70), V(19,FD,45,8F), V(87,6C,DE,94), V(B7,F8,7B,52), \
254
+ V(23,D3,73,AB), V(E2,02,4B,72), V(57,8F,1F,E3), V(2A,AB,55,66), \
255
+ V(07,28,EB,B2), V(03,C2,B5,2F), V(9A,7B,C5,86), V(A5,08,37,D3), \
256
+ V(F2,87,28,30), V(B2,A5,BF,23), V(BA,6A,03,02), V(5C,82,16,ED), \
257
+ V(2B,1C,CF,8A), V(92,B4,79,A7), V(F0,F2,07,F3), V(A1,E2,69,4E), \
258
+ V(CD,F4,DA,65), V(D5,BE,05,06), V(1F,62,34,D1), V(8A,FE,A6,C4), \
259
+ V(9D,53,2E,34), V(A0,55,F3,A2), V(32,E1,8A,05), V(75,EB,F6,A4), \
260
+ V(39,EC,83,0B), V(AA,EF,60,40), V(06,9F,71,5E), V(51,10,6E,BD), \
261
+ V(F9,8A,21,3E), V(3D,06,DD,96), V(AE,05,3E,DD), V(46,BD,E6,4D), \
262
+ V(B5,8D,54,91), V(05,5D,C4,71), V(6F,D4,06,04), V(FF,15,50,60), \
263
+ V(24,FB,98,19), V(97,E9,BD,D6), V(CC,43,40,89), V(77,9E,D9,67), \
264
+ V(BD,42,E8,B0), V(88,8B,89,07), V(38,5B,19,E7), V(DB,EE,C8,79), \
265
+ V(47,0A,7C,A1), V(E9,0F,42,7C), V(C9,1E,84,F8), V(00,00,00,00), \
266
+ V(83,86,80,09), V(48,ED,2B,32), V(AC,70,11,1E), V(4E,72,5A,6C), \
267
+ V(FB,FF,0E,FD), V(56,38,85,0F), V(1E,D5,AE,3D), V(27,39,2D,36), \
268
+ V(64,D9,0F,0A), V(21,A6,5C,68), V(D1,54,5B,9B), V(3A,2E,36,24), \
269
+ V(B1,67,0A,0C), V(0F,E7,57,93), V(D2,96,EE,B4), V(9E,91,9B,1B), \
270
+ V(4F,C5,C0,80), V(A2,20,DC,61), V(69,4B,77,5A), V(16,1A,12,1C), \
271
+ V(0A,BA,93,E2), V(E5,2A,A0,C0), V(43,E0,22,3C), V(1D,17,1B,12), \
272
+ V(0B,0D,09,0E), V(AD,C7,8B,F2), V(B9,A8,B6,2D), V(C8,A9,1E,14), \
273
+ V(85,19,F1,57), V(4C,07,75,AF), V(BB,DD,99,EE), V(FD,60,7F,A3), \
274
+ V(9F,26,01,F7), V(BC,F5,72,5C), V(C5,3B,66,44), V(34,7E,FB,5B), \
275
+ V(76,29,43,8B), V(DC,C6,23,CB), V(68,FC,ED,B6), V(63,F1,E4,B8), \
276
+ V(CA,DC,31,D7), V(10,85,63,42), V(40,22,97,13), V(20,11,C6,84), \
277
+ V(7D,24,4A,85), V(F8,3D,BB,D2), V(11,32,F9,AE), V(6D,A1,29,C7), \
278
+ V(4B,2F,9E,1D), V(F3,30,B2,DC), V(EC,52,86,0D), V(D0,E3,C1,77), \
279
+ V(6C,16,B3,2B), V(99,B9,70,A9), V(FA,48,94,11), V(22,64,E9,47), \
280
+ V(C4,8C,FC,A8), V(1A,3F,F0,A0), V(D8,2C,7D,56), V(EF,90,33,22), \
281
+ V(C7,4E,49,87), V(C1,D1,38,D9), V(FE,A2,CA,8C), V(36,0B,D4,98), \
282
+ V(CF,81,F5,A6), V(28,DE,7A,A5), V(26,8E,B7,DA), V(A4,BF,AD,3F), \
283
+ V(E4,9D,3A,2C), V(0D,92,78,50), V(9B,CC,5F,6A), V(62,46,7E,54), \
284
+ V(C2,13,8D,F6), V(E8,B8,D8,90), V(5E,F7,39,2E), V(F5,AF,C3,82), \
285
+ V(BE,80,5D,9F), V(7C,93,D0,69), V(A9,2D,D5,6F), V(B3,12,25,CF), \
286
+ V(3B,99,AC,C8), V(A7,7D,18,10), V(6E,63,9C,E8), V(7B,BB,3B,DB), \
287
+ V(09,78,26,CD), V(F4,18,59,6E), V(01,B7,9A,EC), V(A8,9A,4F,83), \
288
+ V(65,6E,95,E6), V(7E,E6,FF,AA), V(08,CF,BC,21), V(E6,E8,15,EF), \
289
+ V(D9,9B,E7,BA), V(CE,36,6F,4A), V(D4,09,9F,EA), V(D6,7C,B0,29), \
290
+ V(AF,B2,A4,31), V(31,23,3F,2A), V(30,94,A5,C6), V(C0,66,A2,35), \
291
+ V(37,BC,4E,74), V(A6,CA,82,FC), V(B0,D0,90,E0), V(15,D8,A7,33), \
292
+ V(4A,98,04,F1), V(F7,DA,EC,41), V(0E,50,CD,7F), V(2F,F6,91,17), \
293
+ V(8D,D6,4D,76), V(4D,B0,EF,43), V(54,4D,AA,CC), V(DF,04,96,E4), \
294
+ V(E3,B5,D1,9E), V(1B,88,6A,4C), V(B8,1F,2C,C1), V(7F,51,65,46), \
295
+ V(04,EA,5E,9D), V(5D,35,8C,01), V(73,74,87,FA), V(2E,41,0B,FB), \
296
+ V(5A,1D,67,B3), V(52,D2,DB,92), V(33,56,10,E9), V(13,47,D6,6D), \
297
+ V(8C,61,D7,9A), V(7A,0C,A1,37), V(8E,14,F8,59), V(89,3C,13,EB), \
298
+ V(EE,27,A9,CE), V(35,C9,61,B7), V(ED,E5,1C,E1), V(3C,B1,47,7A), \
299
+ V(59,DF,D2,9C), V(3F,73,F2,55), V(79,CE,14,18), V(BF,37,C7,73), \
300
+ V(EA,CD,F7,53), V(5B,AA,FD,5F), V(14,6F,3D,DF), V(86,DB,44,78), \
301
+ V(81,F3,AF,CA), V(3E,C4,68,B9), V(2C,34,24,38), V(5F,40,A3,C2), \
302
+ V(72,C3,1D,16), V(0C,25,E2,BC), V(8B,49,3C,28), V(41,95,0D,FF), \
303
+ V(71,01,A8,39), V(DE,B3,0C,08), V(9C,E4,B4,D8), V(90,C1,56,64), \
304
+ V(61,84,CB,7B), V(70,B6,32,D5), V(74,5C,6C,48), V(42,57,B8,D0)
305
+
306
+ #define V(a,b,c,d) 0x##a##b##c##d
307
+ static const uint32_t RT0[256] = { RT };
308
+ #undef V
309
+
310
+ #if !defined(MBEDTLS_AES_FEWER_TABLES)
311
+
312
+ #define V(a,b,c,d) 0x##b##c##d##a
313
+ static const uint32_t RT1[256] = { RT };
314
+ #undef V
315
+
316
+ #define V(a,b,c,d) 0x##c##d##a##b
317
+ static const uint32_t RT2[256] = { RT };
318
+ #undef V
319
+
320
+ #define V(a,b,c,d) 0x##d##a##b##c
321
+ static const uint32_t RT3[256] = { RT };
322
+ #undef V
323
+
324
+ #endif /* !MBEDTLS_AES_FEWER_TABLES */
325
+
326
+ #undef RT
327
+
328
+ /*
329
+ * Round constants
330
+ */
331
+ static const uint32_t RCON[10] =
332
+ {
333
+ 0x00000001, 0x00000002, 0x00000004, 0x00000008,
334
+ 0x00000010, 0x00000020, 0x00000040, 0x00000080,
335
+ 0x0000001B, 0x00000036
336
+ };
337
+
338
+ #else /* MBEDTLS_AES_ROM_TABLES */
339
+
340
+ /*
341
+ * Forward S-box & tables
342
+ */
343
+ static unsigned char AESFSb[256];
344
+ static uint32_t FT0[256];
345
+ #if !defined(MBEDTLS_AES_FEWER_TABLES)
346
+ static uint32_t FT1[256];
347
+ static uint32_t FT2[256];
348
+ static uint32_t FT3[256];
349
+ #endif /* !MBEDTLS_AES_FEWER_TABLES */
350
+
351
+ /*
352
+ * Reverse S-box & tables
353
+ */
354
+ static unsigned char RSb[256];
355
+ static uint32_t RT0[256];
356
+ #if !defined(MBEDTLS_AES_FEWER_TABLES)
357
+ static uint32_t RT1[256];
358
+ static uint32_t RT2[256];
359
+ static uint32_t RT3[256];
360
+ #endif /* !MBEDTLS_AES_FEWER_TABLES */
361
+
362
+ /*
363
+ * Round constants
364
+ */
365
+ static uint32_t RCON[10];
366
+
367
+ /*
368
+ * Tables generation code
369
+ */
370
+ #define ROTL8(x) ( ( (x) << 8 ) & 0xFFFFFFFF ) | ( (x) >> 24 )
371
+ #define XTIME(x) ( ( (x) << 1 ) ^ ( ( (x) & 0x80 ) ? 0x1B : 0x00 ) )
372
+ #define MUL(x,y) ( ( (x) && (y) ) ? pow[(log[(x)]+log[(y)]) % 255] : 0 )
373
+
374
+ static int aes_init_done = 0;
375
+
376
+ static void aes_gen_tables( void )
377
+ {
378
+ int i, x, y, z;
379
+ int pow[256];
380
+ int log[256];
381
+
382
+ /*
383
+ * compute pow and log tables over GF(2^8)
384
+ */
385
+ for( i = 0, x = 1; i < 256; i++ )
386
+ {
387
+ pow[i] = x;
388
+ log[x] = i;
389
+ x = MBEDTLS_BYTE_0( x ^ XTIME( x ) );
390
+ }
391
+
392
+ /*
393
+ * calculate the round constants
394
+ */
395
+ for( i = 0, x = 1; i < 10; i++ )
396
+ {
397
+ RCON[i] = (uint32_t) x;
398
+ x = MBEDTLS_BYTE_0( XTIME( x ) );
399
+ }
400
+
401
+ /*
402
+ * generate the forward and reverse S-boxes
403
+ */
404
+ AESFSb[0x00] = 0x63;
405
+ RSb[0x63] = 0x00;
406
+
407
+ for( i = 1; i < 256; i++ )
408
+ {
409
+ x = pow[255 - log[i]];
410
+
411
+ y = x; y = MBEDTLS_BYTE_0( ( y << 1 ) | ( y >> 7 ) );
412
+ x ^= y; y = MBEDTLS_BYTE_0( ( y << 1 ) | ( y >> 7 ) );
413
+ x ^= y; y = MBEDTLS_BYTE_0( ( y << 1 ) | ( y >> 7 ) );
414
+ x ^= y; y = MBEDTLS_BYTE_0( ( y << 1 ) | ( y >> 7 ) );
415
+ x ^= y ^ 0x63;
416
+
417
+ AESFSb[i] = (unsigned char) x;
418
+ RSb[x] = (unsigned char) i;
419
+ }
420
+
421
+ /*
422
+ * generate the forward and reverse tables
423
+ */
424
+ for( i = 0; i < 256; i++ )
425
+ {
426
+ x = AESFSb[i];
427
+ y = MBEDTLS_BYTE_0( XTIME( x ) );
428
+ z = MBEDTLS_BYTE_0( y ^ x );
429
+
430
+ FT0[i] = ( (uint32_t) y ) ^
431
+ ( (uint32_t) x << 8 ) ^
432
+ ( (uint32_t) x << 16 ) ^
433
+ ( (uint32_t) z << 24 );
434
+
435
+ #if !defined(MBEDTLS_AES_FEWER_TABLES)
436
+ FT1[i] = ROTL8( FT0[i] );
437
+ FT2[i] = ROTL8( FT1[i] );
438
+ FT3[i] = ROTL8( FT2[i] );
439
+ #endif /* !MBEDTLS_AES_FEWER_TABLES */
440
+
441
+ x = RSb[i];
442
+
443
+ RT0[i] = ( (uint32_t) MUL( 0x0E, x ) ) ^
444
+ ( (uint32_t) MUL( 0x09, x ) << 8 ) ^
445
+ ( (uint32_t) MUL( 0x0D, x ) << 16 ) ^
446
+ ( (uint32_t) MUL( 0x0B, x ) << 24 );
447
+
448
+ #if !defined(MBEDTLS_AES_FEWER_TABLES)
449
+ RT1[i] = ROTL8( RT0[i] );
450
+ RT2[i] = ROTL8( RT1[i] );
451
+ RT3[i] = ROTL8( RT2[i] );
452
+ #endif /* !MBEDTLS_AES_FEWER_TABLES */
453
+ }
454
+ }
455
+
456
+ #undef ROTL8
457
+
458
+ #endif /* MBEDTLS_AES_ROM_TABLES */
459
+
460
+ #if defined(MBEDTLS_AES_FEWER_TABLES)
461
+
462
+ #define ROTL8(x) ( (uint32_t)( ( x ) << 8 ) + (uint32_t)( ( x ) >> 24 ) )
463
+ #define ROTL16(x) ( (uint32_t)( ( x ) << 16 ) + (uint32_t)( ( x ) >> 16 ) )
464
+ #define ROTL24(x) ( (uint32_t)( ( x ) << 24 ) + (uint32_t)( ( x ) >> 8 ) )
465
+
466
+ #define AES_RT0(idx) RT0[idx]
467
+ #define AES_RT1(idx) ROTL8( RT0[idx] )
468
+ #define AES_RT2(idx) ROTL16( RT0[idx] )
469
+ #define AES_RT3(idx) ROTL24( RT0[idx] )
470
+
471
+ #define AES_FT0(idx) FT0[idx]
472
+ #define AES_FT1(idx) ROTL8( FT0[idx] )
473
+ #define AES_FT2(idx) ROTL16( FT0[idx] )
474
+ #define AES_FT3(idx) ROTL24( FT0[idx] )
475
+
476
+ #else /* MBEDTLS_AES_FEWER_TABLES */
477
+
478
+ #define AES_RT0(idx) RT0[idx]
479
+ #define AES_RT1(idx) RT1[idx]
480
+ #define AES_RT2(idx) RT2[idx]
481
+ #define AES_RT3(idx) RT3[idx]
482
+
483
+ #define AES_FT0(idx) FT0[idx]
484
+ #define AES_FT1(idx) FT1[idx]
485
+ #define AES_FT2(idx) FT2[idx]
486
+ #define AES_FT3(idx) FT3[idx]
487
+
488
+ #endif /* MBEDTLS_AES_FEWER_TABLES */
489
+
490
+ void mbedtls_aes_init( mbedtls_aes_context *ctx )
491
+ {
492
+ AES_VALIDATE( ctx != NULL );
493
+
494
+ memset( ctx, 0, sizeof( mbedtls_aes_context ) );
495
+ }
496
+
497
+ void mbedtls_aes_free( mbedtls_aes_context *ctx )
498
+ {
499
+ if( ctx == NULL )
500
+ return;
501
+
502
+ mbedtls_platform_zeroize( ctx, sizeof( mbedtls_aes_context ) );
503
+ }
504
+
505
+ #if defined(MBEDTLS_CIPHER_MODE_XTS)
506
+ void mbedtls_aes_xts_init( mbedtls_aes_xts_context *ctx )
507
+ {
508
+ AES_VALIDATE( ctx != NULL );
509
+
510
+ mbedtls_aes_init( &ctx->crypt );
511
+ mbedtls_aes_init( &ctx->tweak );
512
+ }
513
+
514
+ void mbedtls_aes_xts_free( mbedtls_aes_xts_context *ctx )
515
+ {
516
+ if( ctx == NULL )
517
+ return;
518
+
519
+ mbedtls_aes_free( &ctx->crypt );
520
+ mbedtls_aes_free( &ctx->tweak );
521
+ }
522
+ #endif /* MBEDTLS_CIPHER_MODE_XTS */
523
+
524
+ /*
525
+ * AES key schedule (encryption)
526
+ */
527
+ #if !defined(MBEDTLS_AES_SETKEY_ENC_ALT)
528
+ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
529
+ unsigned int keybits )
530
+ {
531
+ unsigned int i;
532
+ uint32_t *RK;
533
+
534
+ AES_VALIDATE_RET( ctx != NULL );
535
+ AES_VALIDATE_RET( key != NULL );
536
+
537
+ switch( keybits )
538
+ {
539
+ case 128: ctx->nr = 10; break;
540
+ case 192: ctx->nr = 12; break;
541
+ case 256: ctx->nr = 14; break;
542
+ default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH );
543
+ }
544
+
545
+ #if !defined(MBEDTLS_AES_ROM_TABLES)
546
+ if( aes_init_done == 0 )
547
+ {
548
+ aes_gen_tables();
549
+ aes_init_done = 1;
550
+ }
551
+ #endif
552
+
553
+ #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_PADLOCK_ALIGN16)
554
+ if( aes_padlock_ace == -1 )
555
+ aes_padlock_ace = mbedtls_padlock_has_support( MBEDTLS_PADLOCK_ACE );
556
+
557
+ if( aes_padlock_ace )
558
+ ctx->rk = RK = MBEDTLS_PADLOCK_ALIGN16( ctx->buf );
559
+ else
560
+ #endif
561
+ ctx->rk = RK = ctx->buf;
562
+
563
+ #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64)
564
+ if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) )
565
+ return( mbedtls_aesni_setkey_enc( (unsigned char *) ctx->rk, key, keybits ) );
566
+ #endif
567
+
568
+ for( i = 0; i < ( keybits >> 5 ); i++ )
569
+ {
570
+ RK[i] = MBEDTLS_GET_UINT32_LE( key, i << 2 );
571
+ }
572
+
573
+ switch( ctx->nr )
574
+ {
575
+ case 10:
576
+
577
+ for( i = 0; i < 10; i++, RK += 4 )
578
+ {
579
+ RK[4] = RK[0] ^ RCON[i] ^
580
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_1( RK[3] ) ] ) ^
581
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_2( RK[3] ) ] << 8 ) ^
582
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_3( RK[3] ) ] << 16 ) ^
583
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_0( RK[3] ) ] << 24 );
584
+
585
+ RK[5] = RK[1] ^ RK[4];
586
+ RK[6] = RK[2] ^ RK[5];
587
+ RK[7] = RK[3] ^ RK[6];
588
+ }
589
+ break;
590
+
591
+ case 12:
592
+
593
+ for( i = 0; i < 8; i++, RK += 6 )
594
+ {
595
+ RK[6] = RK[0] ^ RCON[i] ^
596
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_1( RK[5] ) ] ) ^
597
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_2( RK[5] ) ] << 8 ) ^
598
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_3( RK[5] ) ] << 16 ) ^
599
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_0( RK[5] ) ] << 24 );
600
+
601
+ RK[7] = RK[1] ^ RK[6];
602
+ RK[8] = RK[2] ^ RK[7];
603
+ RK[9] = RK[3] ^ RK[8];
604
+ RK[10] = RK[4] ^ RK[9];
605
+ RK[11] = RK[5] ^ RK[10];
606
+ }
607
+ break;
608
+
609
+ case 14:
610
+
611
+ for( i = 0; i < 7; i++, RK += 8 )
612
+ {
613
+ RK[8] = RK[0] ^ RCON[i] ^
614
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_1( RK[7] ) ] ) ^
615
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_2( RK[7] ) ] << 8 ) ^
616
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_3( RK[7] ) ] << 16 ) ^
617
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_0( RK[7] ) ] << 24 );
618
+
619
+ RK[9] = RK[1] ^ RK[8];
620
+ RK[10] = RK[2] ^ RK[9];
621
+ RK[11] = RK[3] ^ RK[10];
622
+
623
+ RK[12] = RK[4] ^
624
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_0( RK[11] ) ] ) ^
625
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_1( RK[11] ) ] << 8 ) ^
626
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_2( RK[11] ) ] << 16 ) ^
627
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_3( RK[11] ) ] << 24 );
628
+
629
+ RK[13] = RK[5] ^ RK[12];
630
+ RK[14] = RK[6] ^ RK[13];
631
+ RK[15] = RK[7] ^ RK[14];
632
+ }
633
+ break;
634
+ }
635
+
636
+ return( 0 );
637
+ }
638
+ #endif /* !MBEDTLS_AES_SETKEY_ENC_ALT */
639
+
640
+ /*
641
+ * AES key schedule (decryption)
642
+ */
643
+ #if !defined(MBEDTLS_AES_SETKEY_DEC_ALT)
644
+ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key,
645
+ unsigned int keybits )
646
+ {
647
+ int i, j, ret;
648
+ mbedtls_aes_context cty;
649
+ uint32_t *RK;
650
+ uint32_t *SK;
651
+
652
+ AES_VALIDATE_RET( ctx != NULL );
653
+ AES_VALIDATE_RET( key != NULL );
654
+
655
+ mbedtls_aes_init( &cty );
656
+
657
+ #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_PADLOCK_ALIGN16)
658
+ if( aes_padlock_ace == -1 )
659
+ aes_padlock_ace = mbedtls_padlock_has_support( MBEDTLS_PADLOCK_ACE );
660
+
661
+ if( aes_padlock_ace )
662
+ ctx->rk = RK = MBEDTLS_PADLOCK_ALIGN16( ctx->buf );
663
+ else
664
+ #endif
665
+ ctx->rk = RK = ctx->buf;
666
+
667
+ /* Also checks keybits */
668
+ if( ( ret = mbedtls_aes_setkey_enc( &cty, key, keybits ) ) != 0 )
669
+ goto exit;
670
+
671
+ ctx->nr = cty.nr;
672
+
673
+ #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64)
674
+ if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) )
675
+ {
676
+ mbedtls_aesni_inverse_key( (unsigned char *) ctx->rk,
677
+ (const unsigned char *) cty.rk, ctx->nr );
678
+ goto exit;
679
+ }
680
+ #endif
681
+
682
+ SK = cty.rk + cty.nr * 4;
683
+
684
+ *RK++ = *SK++;
685
+ *RK++ = *SK++;
686
+ *RK++ = *SK++;
687
+ *RK++ = *SK++;
688
+
689
+ for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 )
690
+ {
691
+ for( j = 0; j < 4; j++, SK++ )
692
+ {
693
+ *RK++ = AES_RT0( AESFSb[ MBEDTLS_BYTE_0( *SK ) ] ) ^
694
+ AES_RT1( AESFSb[ MBEDTLS_BYTE_1( *SK ) ] ) ^
695
+ AES_RT2( AESFSb[ MBEDTLS_BYTE_2( *SK ) ] ) ^
696
+ AES_RT3( AESFSb[ MBEDTLS_BYTE_3( *SK ) ] );
697
+ }
698
+ }
699
+
700
+ *RK++ = *SK++;
701
+ *RK++ = *SK++;
702
+ *RK++ = *SK++;
703
+ *RK++ = *SK++;
704
+
705
+ exit:
706
+ mbedtls_aes_free( &cty );
707
+
708
+ return( ret );
709
+ }
710
+ #endif /* !MBEDTLS_AES_SETKEY_DEC_ALT */
711
+
712
+ #if defined(MBEDTLS_CIPHER_MODE_XTS)
713
+ static int mbedtls_aes_xts_decode_keys( const unsigned char *key,
714
+ unsigned int keybits,
715
+ const unsigned char **key1,
716
+ unsigned int *key1bits,
717
+ const unsigned char **key2,
718
+ unsigned int *key2bits )
719
+ {
720
+ const unsigned int half_keybits = keybits / 2;
721
+ const unsigned int half_keybytes = half_keybits / 8;
722
+
723
+ switch( keybits )
724
+ {
725
+ case 256: break;
726
+ case 512: break;
727
+ default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH );
728
+ }
729
+
730
+ *key1bits = half_keybits;
731
+ *key2bits = half_keybits;
732
+ *key1 = &key[0];
733
+ *key2 = &key[half_keybytes];
734
+
735
+ return 0;
736
+ }
737
+
738
+ int mbedtls_aes_xts_setkey_enc( mbedtls_aes_xts_context *ctx,
739
+ const unsigned char *key,
740
+ unsigned int keybits)
741
+ {
742
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
743
+ const unsigned char *key1, *key2;
744
+ unsigned int key1bits, key2bits;
745
+
746
+ AES_VALIDATE_RET( ctx != NULL );
747
+ AES_VALIDATE_RET( key != NULL );
748
+
749
+ ret = mbedtls_aes_xts_decode_keys( key, keybits, &key1, &key1bits,
750
+ &key2, &key2bits );
751
+ if( ret != 0 )
752
+ return( ret );
753
+
754
+ /* Set the tweak key. Always set tweak key for the encryption mode. */
755
+ ret = mbedtls_aes_setkey_enc( &ctx->tweak, key2, key2bits );
756
+ if( ret != 0 )
757
+ return( ret );
758
+
759
+ /* Set crypt key for encryption. */
760
+ return mbedtls_aes_setkey_enc( &ctx->crypt, key1, key1bits );
761
+ }
762
+
763
+ int mbedtls_aes_xts_setkey_dec( mbedtls_aes_xts_context *ctx,
764
+ const unsigned char *key,
765
+ unsigned int keybits)
766
+ {
767
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
768
+ const unsigned char *key1, *key2;
769
+ unsigned int key1bits, key2bits;
770
+
771
+ AES_VALIDATE_RET( ctx != NULL );
772
+ AES_VALIDATE_RET( key != NULL );
773
+
774
+ ret = mbedtls_aes_xts_decode_keys( key, keybits, &key1, &key1bits,
775
+ &key2, &key2bits );
776
+ if( ret != 0 )
777
+ return( ret );
778
+
779
+ /* Set the tweak key. Always set tweak key for encryption. */
780
+ ret = mbedtls_aes_setkey_enc( &ctx->tweak, key2, key2bits );
781
+ if( ret != 0 )
782
+ return( ret );
783
+
784
+ /* Set crypt key for decryption. */
785
+ return mbedtls_aes_setkey_dec( &ctx->crypt, key1, key1bits );
786
+ }
787
+ #endif /* MBEDTLS_CIPHER_MODE_XTS */
788
+
789
+ #define AES_FROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
790
+ do \
791
+ { \
792
+ (X0) = *RK++ ^ AES_FT0( MBEDTLS_BYTE_0( Y0 ) ) ^ \
793
+ AES_FT1( MBEDTLS_BYTE_1( Y1 ) ) ^ \
794
+ AES_FT2( MBEDTLS_BYTE_2( Y2 ) ) ^ \
795
+ AES_FT3( MBEDTLS_BYTE_3( Y3 ) ); \
796
+ \
797
+ (X1) = *RK++ ^ AES_FT0( MBEDTLS_BYTE_0( Y1 ) ) ^ \
798
+ AES_FT1( MBEDTLS_BYTE_1( Y2 ) ) ^ \
799
+ AES_FT2( MBEDTLS_BYTE_2( Y3 ) ) ^ \
800
+ AES_FT3( MBEDTLS_BYTE_3( Y0 ) ); \
801
+ \
802
+ (X2) = *RK++ ^ AES_FT0( MBEDTLS_BYTE_0( Y2 ) ) ^ \
803
+ AES_FT1( MBEDTLS_BYTE_1( Y3 ) ) ^ \
804
+ AES_FT2( MBEDTLS_BYTE_2( Y0 ) ) ^ \
805
+ AES_FT3( MBEDTLS_BYTE_3( Y1 ) ); \
806
+ \
807
+ (X3) = *RK++ ^ AES_FT0( MBEDTLS_BYTE_0( Y3 ) ) ^ \
808
+ AES_FT1( MBEDTLS_BYTE_1( Y0 ) ) ^ \
809
+ AES_FT2( MBEDTLS_BYTE_2( Y1 ) ) ^ \
810
+ AES_FT3( MBEDTLS_BYTE_3( Y2 ) ); \
811
+ } while( 0 )
812
+
813
+ #define AES_RROUND(X0,X1,X2,X3,Y0,Y1,Y2,Y3) \
814
+ do \
815
+ { \
816
+ (X0) = *RK++ ^ AES_RT0( MBEDTLS_BYTE_0( Y0 ) ) ^ \
817
+ AES_RT1( MBEDTLS_BYTE_1( Y3 ) ) ^ \
818
+ AES_RT2( MBEDTLS_BYTE_2( Y2 ) ) ^ \
819
+ AES_RT3( MBEDTLS_BYTE_3( Y1 ) ); \
820
+ \
821
+ (X1) = *RK++ ^ AES_RT0( MBEDTLS_BYTE_0( Y1 ) ) ^ \
822
+ AES_RT1( MBEDTLS_BYTE_1( Y0 ) ) ^ \
823
+ AES_RT2( MBEDTLS_BYTE_2( Y3 ) ) ^ \
824
+ AES_RT3( MBEDTLS_BYTE_3( Y2 ) ); \
825
+ \
826
+ (X2) = *RK++ ^ AES_RT0( MBEDTLS_BYTE_0( Y2 ) ) ^ \
827
+ AES_RT1( MBEDTLS_BYTE_1( Y1 ) ) ^ \
828
+ AES_RT2( MBEDTLS_BYTE_2( Y0 ) ) ^ \
829
+ AES_RT3( MBEDTLS_BYTE_3( Y3 ) ); \
830
+ \
831
+ (X3) = *RK++ ^ AES_RT0( MBEDTLS_BYTE_0( Y3 ) ) ^ \
832
+ AES_RT1( MBEDTLS_BYTE_1( Y2 ) ) ^ \
833
+ AES_RT2( MBEDTLS_BYTE_2( Y1 ) ) ^ \
834
+ AES_RT3( MBEDTLS_BYTE_3( Y0 ) ); \
835
+ } while( 0 )
836
+
837
+ /*
838
+ * AES-ECB block encryption
839
+ */
840
+ #if !defined(MBEDTLS_AES_ENCRYPT_ALT)
841
+ int mbedtls_internal_aes_encrypt( mbedtls_aes_context *ctx,
842
+ const unsigned char input[16],
843
+ unsigned char output[16] )
844
+ {
845
+ int i;
846
+ uint32_t *RK = ctx->rk;
847
+ struct
848
+ {
849
+ uint32_t X[4];
850
+ uint32_t Y[4];
851
+ } t;
852
+
853
+ t.X[0] = MBEDTLS_GET_UINT32_LE( input, 0 ); t.X[0] ^= *RK++;
854
+ t.X[1] = MBEDTLS_GET_UINT32_LE( input, 4 ); t.X[1] ^= *RK++;
855
+ t.X[2] = MBEDTLS_GET_UINT32_LE( input, 8 ); t.X[2] ^= *RK++;
856
+ t.X[3] = MBEDTLS_GET_UINT32_LE( input, 12 ); t.X[3] ^= *RK++;
857
+
858
+ for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- )
859
+ {
860
+ AES_FROUND( t.Y[0], t.Y[1], t.Y[2], t.Y[3], t.X[0], t.X[1], t.X[2], t.X[3] );
861
+ AES_FROUND( t.X[0], t.X[1], t.X[2], t.X[3], t.Y[0], t.Y[1], t.Y[2], t.Y[3] );
862
+ }
863
+
864
+ AES_FROUND( t.Y[0], t.Y[1], t.Y[2], t.Y[3], t.X[0], t.X[1], t.X[2], t.X[3] );
865
+
866
+ t.X[0] = *RK++ ^ \
867
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_0( t.Y[0] ) ] ) ^
868
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_1( t.Y[1] ) ] << 8 ) ^
869
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_2( t.Y[2] ) ] << 16 ) ^
870
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_3( t.Y[3] ) ] << 24 );
871
+
872
+ t.X[1] = *RK++ ^ \
873
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_0( t.Y[1] ) ] ) ^
874
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_1( t.Y[2] ) ] << 8 ) ^
875
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_2( t.Y[3] ) ] << 16 ) ^
876
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_3( t.Y[0] ) ] << 24 );
877
+
878
+ t.X[2] = *RK++ ^ \
879
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_0( t.Y[2] ) ] ) ^
880
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_1( t.Y[3] ) ] << 8 ) ^
881
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_2( t.Y[0] ) ] << 16 ) ^
882
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_3( t.Y[1] ) ] << 24 );
883
+
884
+ t.X[3] = *RK++ ^ \
885
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_0( t.Y[3] ) ] ) ^
886
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_1( t.Y[0] ) ] << 8 ) ^
887
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_2( t.Y[1] ) ] << 16 ) ^
888
+ ( (uint32_t) AESFSb[ MBEDTLS_BYTE_3( t.Y[2] ) ] << 24 );
889
+
890
+ MBEDTLS_PUT_UINT32_LE( t.X[0], output, 0 );
891
+ MBEDTLS_PUT_UINT32_LE( t.X[1], output, 4 );
892
+ MBEDTLS_PUT_UINT32_LE( t.X[2], output, 8 );
893
+ MBEDTLS_PUT_UINT32_LE( t.X[3], output, 12 );
894
+
895
+ mbedtls_platform_zeroize( &t, sizeof( t ) );
896
+
897
+ return( 0 );
898
+ }
899
+ #endif /* !MBEDTLS_AES_ENCRYPT_ALT */
900
+
901
+ /*
902
+ * AES-ECB block decryption
903
+ */
904
+ #if !defined(MBEDTLS_AES_DECRYPT_ALT)
905
+ int mbedtls_internal_aes_decrypt( mbedtls_aes_context *ctx,
906
+ const unsigned char input[16],
907
+ unsigned char output[16] )
908
+ {
909
+ int i;
910
+ uint32_t *RK = ctx->rk;
911
+ struct
912
+ {
913
+ uint32_t X[4];
914
+ uint32_t Y[4];
915
+ } t;
916
+
917
+ t.X[0] = MBEDTLS_GET_UINT32_LE( input, 0 ); t.X[0] ^= *RK++;
918
+ t.X[1] = MBEDTLS_GET_UINT32_LE( input, 4 ); t.X[1] ^= *RK++;
919
+ t.X[2] = MBEDTLS_GET_UINT32_LE( input, 8 ); t.X[2] ^= *RK++;
920
+ t.X[3] = MBEDTLS_GET_UINT32_LE( input, 12 ); t.X[3] ^= *RK++;
921
+
922
+ for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- )
923
+ {
924
+ AES_RROUND( t.Y[0], t.Y[1], t.Y[2], t.Y[3], t.X[0], t.X[1], t.X[2], t.X[3] );
925
+ AES_RROUND( t.X[0], t.X[1], t.X[2], t.X[3], t.Y[0], t.Y[1], t.Y[2], t.Y[3] );
926
+ }
927
+
928
+ AES_RROUND( t.Y[0], t.Y[1], t.Y[2], t.Y[3], t.X[0], t.X[1], t.X[2], t.X[3] );
929
+
930
+ t.X[0] = *RK++ ^ \
931
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_0( t.Y[0] ) ] ) ^
932
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_1( t.Y[3] ) ] << 8 ) ^
933
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_2( t.Y[2] ) ] << 16 ) ^
934
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_3( t.Y[1] ) ] << 24 );
935
+
936
+ t.X[1] = *RK++ ^ \
937
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_0( t.Y[1] ) ] ) ^
938
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_1( t.Y[0] ) ] << 8 ) ^
939
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_2( t.Y[3] ) ] << 16 ) ^
940
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_3( t.Y[2] ) ] << 24 );
941
+
942
+ t.X[2] = *RK++ ^ \
943
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_0( t.Y[2] ) ] ) ^
944
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_1( t.Y[1] ) ] << 8 ) ^
945
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_2( t.Y[0] ) ] << 16 ) ^
946
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_3( t.Y[3] ) ] << 24 );
947
+
948
+ t.X[3] = *RK++ ^ \
949
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_0( t.Y[3] ) ] ) ^
950
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_1( t.Y[2] ) ] << 8 ) ^
951
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_2( t.Y[1] ) ] << 16 ) ^
952
+ ( (uint32_t) RSb[ MBEDTLS_BYTE_3( t.Y[0] ) ] << 24 );
953
+
954
+ MBEDTLS_PUT_UINT32_LE( t.X[0], output, 0 );
955
+ MBEDTLS_PUT_UINT32_LE( t.X[1], output, 4 );
956
+ MBEDTLS_PUT_UINT32_LE( t.X[2], output, 8 );
957
+ MBEDTLS_PUT_UINT32_LE( t.X[3], output, 12 );
958
+
959
+ mbedtls_platform_zeroize( &t, sizeof( t ) );
960
+
961
+ return( 0 );
962
+ }
963
+ #endif /* !MBEDTLS_AES_DECRYPT_ALT */
964
+
965
+ /*
966
+ * AES-ECB block encryption/decryption
967
+ */
968
+ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx,
969
+ int mode,
970
+ const unsigned char input[16],
971
+ unsigned char output[16] )
972
+ {
973
+ AES_VALIDATE_RET( ctx != NULL );
974
+ AES_VALIDATE_RET( input != NULL );
975
+ AES_VALIDATE_RET( output != NULL );
976
+ AES_VALIDATE_RET( mode == MBEDTLS_AES_ENCRYPT ||
977
+ mode == MBEDTLS_AES_DECRYPT );
978
+
979
+ #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64)
980
+ if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) )
981
+ return( mbedtls_aesni_crypt_ecb( ctx, mode, input, output ) );
982
+ #endif
983
+
984
+ #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86)
985
+ if( aes_padlock_ace > 0)
986
+ {
987
+ if( mbedtls_padlock_xcryptecb( ctx, mode, input, output ) == 0 )
988
+ return( 0 );
989
+
990
+ // If padlock data misaligned, we just fall back to
991
+ // unaccelerated mode
992
+ //
993
+ }
994
+ #endif
995
+
996
+ if( mode == MBEDTLS_AES_ENCRYPT )
997
+ return( mbedtls_internal_aes_encrypt( ctx, input, output ) );
998
+ else
999
+ return( mbedtls_internal_aes_decrypt( ctx, input, output ) );
1000
+ }
1001
+
1002
+ #if defined(MBEDTLS_CIPHER_MODE_CBC)
1003
+ /*
1004
+ * AES-CBC buffer encryption/decryption
1005
+ */
1006
+ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx,
1007
+ int mode,
1008
+ size_t length,
1009
+ unsigned char iv[16],
1010
+ const unsigned char *input,
1011
+ unsigned char *output )
1012
+ {
1013
+ int i;
1014
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
1015
+ unsigned char temp[16];
1016
+
1017
+ AES_VALIDATE_RET( ctx != NULL );
1018
+ AES_VALIDATE_RET( mode == MBEDTLS_AES_ENCRYPT ||
1019
+ mode == MBEDTLS_AES_DECRYPT );
1020
+ AES_VALIDATE_RET( iv != NULL );
1021
+ AES_VALIDATE_RET( input != NULL );
1022
+ AES_VALIDATE_RET( output != NULL );
1023
+
1024
+ if( length % 16 )
1025
+ return( MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH );
1026
+
1027
+ #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86)
1028
+ if( aes_padlock_ace > 0 )
1029
+ {
1030
+ if( mbedtls_padlock_xcryptcbc( ctx, mode, length, iv, input, output ) == 0 )
1031
+ return( 0 );
1032
+
1033
+ // If padlock data misaligned, we just fall back to
1034
+ // unaccelerated mode
1035
+ //
1036
+ }
1037
+ #endif
1038
+
1039
+ if( mode == MBEDTLS_AES_DECRYPT )
1040
+ {
1041
+ while( length > 0 )
1042
+ {
1043
+ memcpy( temp, input, 16 );
1044
+ ret = mbedtls_aes_crypt_ecb( ctx, mode, input, output );
1045
+ if( ret != 0 )
1046
+ goto exit;
1047
+
1048
+ for( i = 0; i < 16; i++ )
1049
+ output[i] = (unsigned char)( output[i] ^ iv[i] );
1050
+
1051
+ memcpy( iv, temp, 16 );
1052
+
1053
+ input += 16;
1054
+ output += 16;
1055
+ length -= 16;
1056
+ }
1057
+ }
1058
+ else
1059
+ {
1060
+ while( length > 0 )
1061
+ {
1062
+ for( i = 0; i < 16; i++ )
1063
+ output[i] = (unsigned char)( input[i] ^ iv[i] );
1064
+
1065
+ ret = mbedtls_aes_crypt_ecb( ctx, mode, output, output );
1066
+ if( ret != 0 )
1067
+ goto exit;
1068
+ memcpy( iv, output, 16 );
1069
+
1070
+ input += 16;
1071
+ output += 16;
1072
+ length -= 16;
1073
+ }
1074
+ }
1075
+ ret = 0;
1076
+
1077
+ exit:
1078
+ return( ret );
1079
+ }
1080
+ #endif /* MBEDTLS_CIPHER_MODE_CBC */
1081
+
1082
+ #if defined(MBEDTLS_CIPHER_MODE_XTS)
1083
+
1084
+ typedef unsigned char mbedtls_be128[16];
1085
+
1086
+ /*
1087
+ * GF(2^128) multiplication function
1088
+ *
1089
+ * This function multiplies a field element by x in the polynomial field
1090
+ * representation. It uses 64-bit word operations to gain speed but compensates
1091
+ * for machine endianess and hence works correctly on both big and little
1092
+ * endian machines.
1093
+ */
1094
+ static void mbedtls_gf128mul_x_ble( unsigned char r[16],
1095
+ const unsigned char x[16] )
1096
+ {
1097
+ uint64_t a, b, ra, rb;
1098
+
1099
+ a = MBEDTLS_GET_UINT64_LE( x, 0 );
1100
+ b = MBEDTLS_GET_UINT64_LE( x, 8 );
1101
+
1102
+ ra = ( a << 1 ) ^ 0x0087 >> ( 8 - ( ( b >> 63 ) << 3 ) );
1103
+ rb = ( a >> 63 ) | ( b << 1 );
1104
+
1105
+ MBEDTLS_PUT_UINT64_LE( ra, r, 0 );
1106
+ MBEDTLS_PUT_UINT64_LE( rb, r, 8 );
1107
+ }
1108
+
1109
+ /*
1110
+ * AES-XTS buffer encryption/decryption
1111
+ */
1112
+ int mbedtls_aes_crypt_xts( mbedtls_aes_xts_context *ctx,
1113
+ int mode,
1114
+ size_t length,
1115
+ const unsigned char data_unit[16],
1116
+ const unsigned char *input,
1117
+ unsigned char *output )
1118
+ {
1119
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
1120
+ size_t blocks = length / 16;
1121
+ size_t leftover = length % 16;
1122
+ unsigned char tweak[16];
1123
+ unsigned char prev_tweak[16];
1124
+ unsigned char tmp[16];
1125
+
1126
+ AES_VALIDATE_RET( ctx != NULL );
1127
+ AES_VALIDATE_RET( mode == MBEDTLS_AES_ENCRYPT ||
1128
+ mode == MBEDTLS_AES_DECRYPT );
1129
+ AES_VALIDATE_RET( data_unit != NULL );
1130
+ AES_VALIDATE_RET( input != NULL );
1131
+ AES_VALIDATE_RET( output != NULL );
1132
+
1133
+ /* Data units must be at least 16 bytes long. */
1134
+ if( length < 16 )
1135
+ return MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH;
1136
+
1137
+ /* NIST SP 800-38E disallows data units larger than 2**20 blocks. */
1138
+ if( length > ( 1 << 20 ) * 16 )
1139
+ return MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH;
1140
+
1141
+ /* Compute the tweak. */
1142
+ ret = mbedtls_aes_crypt_ecb( &ctx->tweak, MBEDTLS_AES_ENCRYPT,
1143
+ data_unit, tweak );
1144
+ if( ret != 0 )
1145
+ return( ret );
1146
+
1147
+ while( blocks-- )
1148
+ {
1149
+ size_t i;
1150
+
1151
+ if( leftover && ( mode == MBEDTLS_AES_DECRYPT ) && blocks == 0 )
1152
+ {
1153
+ /* We are on the last block in a decrypt operation that has
1154
+ * leftover bytes, so we need to use the next tweak for this block,
1155
+ * and this tweak for the lefover bytes. Save the current tweak for
1156
+ * the leftovers and then update the current tweak for use on this,
1157
+ * the last full block. */
1158
+ memcpy( prev_tweak, tweak, sizeof( tweak ) );
1159
+ mbedtls_gf128mul_x_ble( tweak, tweak );
1160
+ }
1161
+
1162
+ for( i = 0; i < 16; i++ )
1163
+ tmp[i] = input[i] ^ tweak[i];
1164
+
1165
+ ret = mbedtls_aes_crypt_ecb( &ctx->crypt, mode, tmp, tmp );
1166
+ if( ret != 0 )
1167
+ return( ret );
1168
+
1169
+ for( i = 0; i < 16; i++ )
1170
+ output[i] = tmp[i] ^ tweak[i];
1171
+
1172
+ /* Update the tweak for the next block. */
1173
+ mbedtls_gf128mul_x_ble( tweak, tweak );
1174
+
1175
+ output += 16;
1176
+ input += 16;
1177
+ }
1178
+
1179
+ if( leftover )
1180
+ {
1181
+ /* If we are on the leftover bytes in a decrypt operation, we need to
1182
+ * use the previous tweak for these bytes (as saved in prev_tweak). */
1183
+ unsigned char *t = mode == MBEDTLS_AES_DECRYPT ? prev_tweak : tweak;
1184
+
1185
+ /* We are now on the final part of the data unit, which doesn't divide
1186
+ * evenly by 16. It's time for ciphertext stealing. */
1187
+ size_t i;
1188
+ unsigned char *prev_output = output - 16;
1189
+
1190
+ /* Copy ciphertext bytes from the previous block to our output for each
1191
+ * byte of cyphertext we won't steal. At the same time, copy the
1192
+ * remainder of the input for this final round (since the loop bounds
1193
+ * are the same). */
1194
+ for( i = 0; i < leftover; i++ )
1195
+ {
1196
+ output[i] = prev_output[i];
1197
+ tmp[i] = input[i] ^ t[i];
1198
+ }
1199
+
1200
+ /* Copy ciphertext bytes from the previous block for input in this
1201
+ * round. */
1202
+ for( ; i < 16; i++ )
1203
+ tmp[i] = prev_output[i] ^ t[i];
1204
+
1205
+ ret = mbedtls_aes_crypt_ecb( &ctx->crypt, mode, tmp, tmp );
1206
+ if( ret != 0 )
1207
+ return ret;
1208
+
1209
+ /* Write the result back to the previous block, overriding the previous
1210
+ * output we copied. */
1211
+ for( i = 0; i < 16; i++ )
1212
+ prev_output[i] = tmp[i] ^ t[i];
1213
+ }
1214
+
1215
+ return( 0 );
1216
+ }
1217
+ #endif /* MBEDTLS_CIPHER_MODE_XTS */
1218
+
1219
+ #if defined(MBEDTLS_CIPHER_MODE_CFB)
1220
+ /*
1221
+ * AES-CFB128 buffer encryption/decryption
1222
+ */
1223
+ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx,
1224
+ int mode,
1225
+ size_t length,
1226
+ size_t *iv_off,
1227
+ unsigned char iv[16],
1228
+ const unsigned char *input,
1229
+ unsigned char *output )
1230
+ {
1231
+ int c;
1232
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
1233
+ size_t n;
1234
+
1235
+ AES_VALIDATE_RET( ctx != NULL );
1236
+ AES_VALIDATE_RET( mode == MBEDTLS_AES_ENCRYPT ||
1237
+ mode == MBEDTLS_AES_DECRYPT );
1238
+ AES_VALIDATE_RET( iv_off != NULL );
1239
+ AES_VALIDATE_RET( iv != NULL );
1240
+ AES_VALIDATE_RET( input != NULL );
1241
+ AES_VALIDATE_RET( output != NULL );
1242
+
1243
+ n = *iv_off;
1244
+
1245
+ if( n > 15 )
1246
+ return( MBEDTLS_ERR_AES_BAD_INPUT_DATA );
1247
+
1248
+ if( mode == MBEDTLS_AES_DECRYPT )
1249
+ {
1250
+ while( length-- )
1251
+ {
1252
+ if( n == 0 )
1253
+ {
1254
+ ret = mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv );
1255
+ if( ret != 0 )
1256
+ goto exit;
1257
+ }
1258
+
1259
+ c = *input++;
1260
+ *output++ = (unsigned char)( c ^ iv[n] );
1261
+ iv[n] = (unsigned char) c;
1262
+
1263
+ n = ( n + 1 ) & 0x0F;
1264
+ }
1265
+ }
1266
+ else
1267
+ {
1268
+ while( length-- )
1269
+ {
1270
+ if( n == 0 )
1271
+ {
1272
+ ret = mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv );
1273
+ if( ret != 0 )
1274
+ goto exit;
1275
+ }
1276
+
1277
+ iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ );
1278
+
1279
+ n = ( n + 1 ) & 0x0F;
1280
+ }
1281
+ }
1282
+
1283
+ *iv_off = n;
1284
+ ret = 0;
1285
+
1286
+ exit:
1287
+ return( ret );
1288
+ }
1289
+
1290
+ /*
1291
+ * AES-CFB8 buffer encryption/decryption
1292
+ */
1293
+ int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx,
1294
+ int mode,
1295
+ size_t length,
1296
+ unsigned char iv[16],
1297
+ const unsigned char *input,
1298
+ unsigned char *output )
1299
+ {
1300
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
1301
+ unsigned char c;
1302
+ unsigned char ov[17];
1303
+
1304
+ AES_VALIDATE_RET( ctx != NULL );
1305
+ AES_VALIDATE_RET( mode == MBEDTLS_AES_ENCRYPT ||
1306
+ mode == MBEDTLS_AES_DECRYPT );
1307
+ AES_VALIDATE_RET( iv != NULL );
1308
+ AES_VALIDATE_RET( input != NULL );
1309
+ AES_VALIDATE_RET( output != NULL );
1310
+ while( length-- )
1311
+ {
1312
+ memcpy( ov, iv, 16 );
1313
+ ret = mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv );
1314
+ if( ret != 0 )
1315
+ goto exit;
1316
+
1317
+ if( mode == MBEDTLS_AES_DECRYPT )
1318
+ ov[16] = *input;
1319
+
1320
+ c = *output++ = (unsigned char)( iv[0] ^ *input++ );
1321
+
1322
+ if( mode == MBEDTLS_AES_ENCRYPT )
1323
+ ov[16] = c;
1324
+
1325
+ memcpy( iv, ov + 1, 16 );
1326
+ }
1327
+ ret = 0;
1328
+
1329
+ exit:
1330
+ return( ret );
1331
+ }
1332
+ #endif /* MBEDTLS_CIPHER_MODE_CFB */
1333
+
1334
+ #if defined(MBEDTLS_CIPHER_MODE_OFB)
1335
+ /*
1336
+ * AES-OFB (Output Feedback Mode) buffer encryption/decryption
1337
+ */
1338
+ int mbedtls_aes_crypt_ofb( mbedtls_aes_context *ctx,
1339
+ size_t length,
1340
+ size_t *iv_off,
1341
+ unsigned char iv[16],
1342
+ const unsigned char *input,
1343
+ unsigned char *output )
1344
+ {
1345
+ int ret = 0;
1346
+ size_t n;
1347
+
1348
+ AES_VALIDATE_RET( ctx != NULL );
1349
+ AES_VALIDATE_RET( iv_off != NULL );
1350
+ AES_VALIDATE_RET( iv != NULL );
1351
+ AES_VALIDATE_RET( input != NULL );
1352
+ AES_VALIDATE_RET( output != NULL );
1353
+
1354
+ n = *iv_off;
1355
+
1356
+ if( n > 15 )
1357
+ return( MBEDTLS_ERR_AES_BAD_INPUT_DATA );
1358
+
1359
+ while( length-- )
1360
+ {
1361
+ if( n == 0 )
1362
+ {
1363
+ ret = mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv );
1364
+ if( ret != 0 )
1365
+ goto exit;
1366
+ }
1367
+ *output++ = *input++ ^ iv[n];
1368
+
1369
+ n = ( n + 1 ) & 0x0F;
1370
+ }
1371
+
1372
+ *iv_off = n;
1373
+
1374
+ exit:
1375
+ return( ret );
1376
+ }
1377
+ #endif /* MBEDTLS_CIPHER_MODE_OFB */
1378
+
1379
+ #if defined(MBEDTLS_CIPHER_MODE_CTR)
1380
+ /*
1381
+ * AES-CTR buffer encryption/decryption
1382
+ */
1383
+ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx,
1384
+ size_t length,
1385
+ size_t *nc_off,
1386
+ unsigned char nonce_counter[16],
1387
+ unsigned char stream_block[16],
1388
+ const unsigned char *input,
1389
+ unsigned char *output )
1390
+ {
1391
+ int c, i;
1392
+ int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
1393
+ size_t n;
1394
+
1395
+ AES_VALIDATE_RET( ctx != NULL );
1396
+ AES_VALIDATE_RET( nc_off != NULL );
1397
+ AES_VALIDATE_RET( nonce_counter != NULL );
1398
+ AES_VALIDATE_RET( stream_block != NULL );
1399
+ AES_VALIDATE_RET( input != NULL );
1400
+ AES_VALIDATE_RET( output != NULL );
1401
+
1402
+ n = *nc_off;
1403
+
1404
+ if ( n > 0x0F )
1405
+ return( MBEDTLS_ERR_AES_BAD_INPUT_DATA );
1406
+
1407
+ while( length-- )
1408
+ {
1409
+ if( n == 0 ) {
1410
+ ret = mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, nonce_counter, stream_block );
1411
+ if( ret != 0 )
1412
+ goto exit;
1413
+
1414
+ for( i = 16; i > 0; i-- )
1415
+ if( ++nonce_counter[i - 1] != 0 )
1416
+ break;
1417
+ }
1418
+ c = *input++;
1419
+ *output++ = (unsigned char)( c ^ stream_block[n] );
1420
+
1421
+ n = ( n + 1 ) & 0x0F;
1422
+ }
1423
+
1424
+ *nc_off = n;
1425
+ ret = 0;
1426
+
1427
+ exit:
1428
+ return( ret );
1429
+ }
1430
+ #endif /* MBEDTLS_CIPHER_MODE_CTR */
1431
+
1432
+ #endif /* !MBEDTLS_AES_ALT */
1433
+
1434
+ #if defined(MBEDTLS_SELF_TEST)
1435
+ /*
1436
+ * AES test vectors from:
1437
+ *
1438
+ * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip
1439
+ */
1440
+ static const unsigned char aes_test_ecb_dec[3][16] =
1441
+ {
1442
+ { 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58,
1443
+ 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 },
1444
+ { 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2,
1445
+ 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 },
1446
+ { 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D,
1447
+ 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE }
1448
+ };
1449
+
1450
+ static const unsigned char aes_test_ecb_enc[3][16] =
1451
+ {
1452
+ { 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73,
1453
+ 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F },
1454
+ { 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11,
1455
+ 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 },
1456
+ { 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D,
1457
+ 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 }
1458
+ };
1459
+
1460
+ #if defined(MBEDTLS_CIPHER_MODE_CBC)
1461
+ static const unsigned char aes_test_cbc_dec[3][16] =
1462
+ {
1463
+ { 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73,
1464
+ 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 },
1465
+ { 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75,
1466
+ 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B },
1467
+ { 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75,
1468
+ 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 }
1469
+ };
1470
+
1471
+ static const unsigned char aes_test_cbc_enc[3][16] =
1472
+ {
1473
+ { 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84,
1474
+ 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D },
1475
+ { 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB,
1476
+ 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 },
1477
+ { 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5,
1478
+ 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 }
1479
+ };
1480
+ #endif /* MBEDTLS_CIPHER_MODE_CBC */
1481
+
1482
+ #if defined(MBEDTLS_CIPHER_MODE_CFB)
1483
+ /*
1484
+ * AES-CFB128 test vectors from:
1485
+ *
1486
+ * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf
1487
+ */
1488
+ static const unsigned char aes_test_cfb128_key[3][32] =
1489
+ {
1490
+ { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
1491
+ 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C },
1492
+ { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52,
1493
+ 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5,
1494
+ 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B },
1495
+ { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE,
1496
+ 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81,
1497
+ 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7,
1498
+ 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 }
1499
+ };
1500
+
1501
+ static const unsigned char aes_test_cfb128_iv[16] =
1502
+ {
1503
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1504
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
1505
+ };
1506
+
1507
+ static const unsigned char aes_test_cfb128_pt[64] =
1508
+ {
1509
+ 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
1510
+ 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
1511
+ 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
1512
+ 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
1513
+ 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11,
1514
+ 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF,
1515
+ 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17,
1516
+ 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10
1517
+ };
1518
+
1519
+ static const unsigned char aes_test_cfb128_ct[3][64] =
1520
+ {
1521
+ { 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20,
1522
+ 0x33, 0x34, 0x49, 0xF8, 0xE8, 0x3C, 0xFB, 0x4A,
1523
+ 0xC8, 0xA6, 0x45, 0x37, 0xA0, 0xB3, 0xA9, 0x3F,
1524
+ 0xCD, 0xE3, 0xCD, 0xAD, 0x9F, 0x1C, 0xE5, 0x8B,
1525
+ 0x26, 0x75, 0x1F, 0x67, 0xA3, 0xCB, 0xB1, 0x40,
1526
+ 0xB1, 0x80, 0x8C, 0xF1, 0x87, 0xA4, 0xF4, 0xDF,
1527
+ 0xC0, 0x4B, 0x05, 0x35, 0x7C, 0x5D, 0x1C, 0x0E,
1528
+ 0xEA, 0xC4, 0xC6, 0x6F, 0x9F, 0xF7, 0xF2, 0xE6 },
1529
+ { 0xCD, 0xC8, 0x0D, 0x6F, 0xDD, 0xF1, 0x8C, 0xAB,
1530
+ 0x34, 0xC2, 0x59, 0x09, 0xC9, 0x9A, 0x41, 0x74,
1531
+ 0x67, 0xCE, 0x7F, 0x7F, 0x81, 0x17, 0x36, 0x21,
1532
+ 0x96, 0x1A, 0x2B, 0x70, 0x17, 0x1D, 0x3D, 0x7A,
1533
+ 0x2E, 0x1E, 0x8A, 0x1D, 0xD5, 0x9B, 0x88, 0xB1,
1534
+ 0xC8, 0xE6, 0x0F, 0xED, 0x1E, 0xFA, 0xC4, 0xC9,
1535
+ 0xC0, 0x5F, 0x9F, 0x9C, 0xA9, 0x83, 0x4F, 0xA0,
1536
+ 0x42, 0xAE, 0x8F, 0xBA, 0x58, 0x4B, 0x09, 0xFF },
1537
+ { 0xDC, 0x7E, 0x84, 0xBF, 0xDA, 0x79, 0x16, 0x4B,
1538
+ 0x7E, 0xCD, 0x84, 0x86, 0x98, 0x5D, 0x38, 0x60,
1539
+ 0x39, 0xFF, 0xED, 0x14, 0x3B, 0x28, 0xB1, 0xC8,
1540
+ 0x32, 0x11, 0x3C, 0x63, 0x31, 0xE5, 0x40, 0x7B,
1541
+ 0xDF, 0x10, 0x13, 0x24, 0x15, 0xE5, 0x4B, 0x92,
1542
+ 0xA1, 0x3E, 0xD0, 0xA8, 0x26, 0x7A, 0xE2, 0xF9,
1543
+ 0x75, 0xA3, 0x85, 0x74, 0x1A, 0xB9, 0xCE, 0xF8,
1544
+ 0x20, 0x31, 0x62, 0x3D, 0x55, 0xB1, 0xE4, 0x71 }
1545
+ };
1546
+ #endif /* MBEDTLS_CIPHER_MODE_CFB */
1547
+
1548
+ #if defined(MBEDTLS_CIPHER_MODE_OFB)
1549
+ /*
1550
+ * AES-OFB test vectors from:
1551
+ *
1552
+ * https://csrc.nist.gov/publications/detail/sp/800-38a/final
1553
+ */
1554
+ static const unsigned char aes_test_ofb_key[3][32] =
1555
+ {
1556
+ { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
1557
+ 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C },
1558
+ { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52,
1559
+ 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5,
1560
+ 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B },
1561
+ { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE,
1562
+ 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81,
1563
+ 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7,
1564
+ 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 }
1565
+ };
1566
+
1567
+ static const unsigned char aes_test_ofb_iv[16] =
1568
+ {
1569
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1570
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
1571
+ };
1572
+
1573
+ static const unsigned char aes_test_ofb_pt[64] =
1574
+ {
1575
+ 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96,
1576
+ 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A,
1577
+ 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C,
1578
+ 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51,
1579
+ 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11,
1580
+ 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF,
1581
+ 0xF6, 0x9F, 0x24, 0x45, 0xDF, 0x4F, 0x9B, 0x17,
1582
+ 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10
1583
+ };
1584
+
1585
+ static const unsigned char aes_test_ofb_ct[3][64] =
1586
+ {
1587
+ { 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20,
1588
+ 0x33, 0x34, 0x49, 0xF8, 0xE8, 0x3C, 0xFB, 0x4A,
1589
+ 0x77, 0x89, 0x50, 0x8d, 0x16, 0x91, 0x8f, 0x03,
1590
+ 0xf5, 0x3c, 0x52, 0xda, 0xc5, 0x4e, 0xd8, 0x25,
1591
+ 0x97, 0x40, 0x05, 0x1e, 0x9c, 0x5f, 0xec, 0xf6,
1592
+ 0x43, 0x44, 0xf7, 0xa8, 0x22, 0x60, 0xed, 0xcc,
1593
+ 0x30, 0x4c, 0x65, 0x28, 0xf6, 0x59, 0xc7, 0x78,
1594
+ 0x66, 0xa5, 0x10, 0xd9, 0xc1, 0xd6, 0xae, 0x5e },
1595
+ { 0xCD, 0xC8, 0x0D, 0x6F, 0xDD, 0xF1, 0x8C, 0xAB,
1596
+ 0x34, 0xC2, 0x59, 0x09, 0xC9, 0x9A, 0x41, 0x74,
1597
+ 0xfc, 0xc2, 0x8b, 0x8d, 0x4c, 0x63, 0x83, 0x7c,
1598
+ 0x09, 0xe8, 0x17, 0x00, 0xc1, 0x10, 0x04, 0x01,
1599
+ 0x8d, 0x9a, 0x9a, 0xea, 0xc0, 0xf6, 0x59, 0x6f,
1600
+ 0x55, 0x9c, 0x6d, 0x4d, 0xaf, 0x59, 0xa5, 0xf2,
1601
+ 0x6d, 0x9f, 0x20, 0x08, 0x57, 0xca, 0x6c, 0x3e,
1602
+ 0x9c, 0xac, 0x52, 0x4b, 0xd9, 0xac, 0xc9, 0x2a },
1603
+ { 0xDC, 0x7E, 0x84, 0xBF, 0xDA, 0x79, 0x16, 0x4B,
1604
+ 0x7E, 0xCD, 0x84, 0x86, 0x98, 0x5D, 0x38, 0x60,
1605
+ 0x4f, 0xeb, 0xdc, 0x67, 0x40, 0xd2, 0x0b, 0x3a,
1606
+ 0xc8, 0x8f, 0x6a, 0xd8, 0x2a, 0x4f, 0xb0, 0x8d,
1607
+ 0x71, 0xab, 0x47, 0xa0, 0x86, 0xe8, 0x6e, 0xed,
1608
+ 0xf3, 0x9d, 0x1c, 0x5b, 0xba, 0x97, 0xc4, 0x08,
1609
+ 0x01, 0x26, 0x14, 0x1d, 0x67, 0xf3, 0x7b, 0xe8,
1610
+ 0x53, 0x8f, 0x5a, 0x8b, 0xe7, 0x40, 0xe4, 0x84 }
1611
+ };
1612
+ #endif /* MBEDTLS_CIPHER_MODE_OFB */
1613
+
1614
+ #if defined(MBEDTLS_CIPHER_MODE_CTR)
1615
+ /*
1616
+ * AES-CTR test vectors from:
1617
+ *
1618
+ * http://www.faqs.org/rfcs/rfc3686.html
1619
+ */
1620
+
1621
+ static const unsigned char aes_test_ctr_key[3][16] =
1622
+ {
1623
+ { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC,
1624
+ 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E },
1625
+ { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7,
1626
+ 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 },
1627
+ { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8,
1628
+ 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC }
1629
+ };
1630
+
1631
+ static const unsigned char aes_test_ctr_nonce_counter[3][16] =
1632
+ {
1633
+ { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
1634
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 },
1635
+ { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59,
1636
+ 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 },
1637
+ { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F,
1638
+ 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 }
1639
+ };
1640
+
1641
+ static const unsigned char aes_test_ctr_pt[3][48] =
1642
+ {
1643
+ { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62,
1644
+ 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 },
1645
+
1646
+ { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1647
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1648
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1649
+ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F },
1650
+
1651
+ { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
1652
+ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1653
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
1654
+ 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
1655
+ 0x20, 0x21, 0x22, 0x23 }
1656
+ };
1657
+
1658
+ static const unsigned char aes_test_ctr_ct[3][48] =
1659
+ {
1660
+ { 0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79,
1661
+ 0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8 },
1662
+ { 0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9,
1663
+ 0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88,
1664
+ 0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8,
1665
+ 0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28 },
1666
+ { 0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9,
1667
+ 0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7,
1668
+ 0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36,
1669
+ 0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53,
1670
+ 0x25, 0xB2, 0x07, 0x2F }
1671
+ };
1672
+
1673
+ static const int aes_test_ctr_len[3] =
1674
+ { 16, 32, 36 };
1675
+ #endif /* MBEDTLS_CIPHER_MODE_CTR */
1676
+
1677
+ #if defined(MBEDTLS_CIPHER_MODE_XTS)
1678
+ /*
1679
+ * AES-XTS test vectors from:
1680
+ *
1681
+ * IEEE P1619/D16 Annex B
1682
+ * https://web.archive.org/web/20150629024421/http://grouper.ieee.org/groups/1619/email/pdf00086.pdf
1683
+ * (Archived from original at http://grouper.ieee.org/groups/1619/email/pdf00086.pdf)
1684
+ */
1685
+ static const unsigned char aes_test_xts_key[][32] =
1686
+ {
1687
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1688
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1689
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1690
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1691
+ { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
1692
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
1693
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
1694
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
1695
+ { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8,
1696
+ 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0,
1697
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
1698
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22 },
1699
+ };
1700
+
1701
+ static const unsigned char aes_test_xts_pt32[][32] =
1702
+ {
1703
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1704
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1705
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1706
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1707
+ { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
1708
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
1709
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
1710
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
1711
+ { 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
1712
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
1713
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
1714
+ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44 },
1715
+ };
1716
+
1717
+ static const unsigned char aes_test_xts_ct32[][32] =
1718
+ {
1719
+ { 0x91, 0x7c, 0xf6, 0x9e, 0xbd, 0x68, 0xb2, 0xec,
1720
+ 0x9b, 0x9f, 0xe9, 0xa3, 0xea, 0xdd, 0xa6, 0x92,
1721
+ 0xcd, 0x43, 0xd2, 0xf5, 0x95, 0x98, 0xed, 0x85,
1722
+ 0x8c, 0x02, 0xc2, 0x65, 0x2f, 0xbf, 0x92, 0x2e },
1723
+ { 0xc4, 0x54, 0x18, 0x5e, 0x6a, 0x16, 0x93, 0x6e,
1724
+ 0x39, 0x33, 0x40, 0x38, 0xac, 0xef, 0x83, 0x8b,
1725
+ 0xfb, 0x18, 0x6f, 0xff, 0x74, 0x80, 0xad, 0xc4,
1726
+ 0x28, 0x93, 0x82, 0xec, 0xd6, 0xd3, 0x94, 0xf0 },
1727
+ { 0xaf, 0x85, 0x33, 0x6b, 0x59, 0x7a, 0xfc, 0x1a,
1728
+ 0x90, 0x0b, 0x2e, 0xb2, 0x1e, 0xc9, 0x49, 0xd2,
1729
+ 0x92, 0xdf, 0x4c, 0x04, 0x7e, 0x0b, 0x21, 0x53,
1730
+ 0x21, 0x86, 0xa5, 0x97, 0x1a, 0x22, 0x7a, 0x89 },
1731
+ };
1732
+
1733
+ static const unsigned char aes_test_xts_data_unit[][16] =
1734
+ {
1735
+ { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1736
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1737
+ { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
1738
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1739
+ { 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x00, 0x00,
1740
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1741
+ };
1742
+
1743
+ #endif /* MBEDTLS_CIPHER_MODE_XTS */
1744
+
1745
+ /*
1746
+ * Checkup routine
1747
+ */
1748
+ int mbedtls_aes_self_test( int verbose )
1749
+ {
1750
+ int ret = 0, i, j, u, mode;
1751
+ unsigned int keybits;
1752
+ unsigned char key[32];
1753
+ unsigned char buf[64];
1754
+ const unsigned char *aes_tests;
1755
+ #if defined(MBEDTLS_CIPHER_MODE_CBC) || defined(MBEDTLS_CIPHER_MODE_CFB)
1756
+ unsigned char iv[16];
1757
+ #endif
1758
+ #if defined(MBEDTLS_CIPHER_MODE_CBC)
1759
+ unsigned char prv[16];
1760
+ #endif
1761
+ #if defined(MBEDTLS_CIPHER_MODE_CTR) || defined(MBEDTLS_CIPHER_MODE_CFB) || \
1762
+ defined(MBEDTLS_CIPHER_MODE_OFB)
1763
+ size_t offset;
1764
+ #endif
1765
+ #if defined(MBEDTLS_CIPHER_MODE_CTR) || defined(MBEDTLS_CIPHER_MODE_XTS)
1766
+ int len;
1767
+ #endif
1768
+ #if defined(MBEDTLS_CIPHER_MODE_CTR)
1769
+ unsigned char nonce_counter[16];
1770
+ unsigned char stream_block[16];
1771
+ #endif
1772
+ mbedtls_aes_context ctx;
1773
+
1774
+ memset( key, 0, 32 );
1775
+ mbedtls_aes_init( &ctx );
1776
+
1777
+ /*
1778
+ * ECB mode
1779
+ */
1780
+ for( i = 0; i < 6; i++ )
1781
+ {
1782
+ u = i >> 1;
1783
+ keybits = 128 + u * 64;
1784
+ mode = i & 1;
1785
+
1786
+ if( verbose != 0 )
1787
+ mbedtls_printf( " AES-ECB-%3u (%s): ", keybits,
1788
+ ( mode == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" );
1789
+
1790
+ memset( buf, 0, 16 );
1791
+
1792
+ if( mode == MBEDTLS_AES_DECRYPT )
1793
+ {
1794
+ ret = mbedtls_aes_setkey_dec( &ctx, key, keybits );
1795
+ aes_tests = aes_test_ecb_dec[u];
1796
+ }
1797
+ else
1798
+ {
1799
+ ret = mbedtls_aes_setkey_enc( &ctx, key, keybits );
1800
+ aes_tests = aes_test_ecb_enc[u];
1801
+ }
1802
+
1803
+ /*
1804
+ * AES-192 is an optional feature that may be unavailable when
1805
+ * there is an alternative underlying implementation i.e. when
1806
+ * MBEDTLS_AES_ALT is defined.
1807
+ */
1808
+ if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 )
1809
+ {
1810
+ mbedtls_printf( "skipped\n" );
1811
+ continue;
1812
+ }
1813
+ else if( ret != 0 )
1814
+ {
1815
+ goto exit;
1816
+ }
1817
+
1818
+ for( j = 0; j < 10000; j++ )
1819
+ {
1820
+ ret = mbedtls_aes_crypt_ecb( &ctx, mode, buf, buf );
1821
+ if( ret != 0 )
1822
+ goto exit;
1823
+ }
1824
+
1825
+ if( memcmp( buf, aes_tests, 16 ) != 0 )
1826
+ {
1827
+ ret = 1;
1828
+ goto exit;
1829
+ }
1830
+
1831
+ if( verbose != 0 )
1832
+ mbedtls_printf( "passed\n" );
1833
+ }
1834
+
1835
+ if( verbose != 0 )
1836
+ mbedtls_printf( "\n" );
1837
+
1838
+ #if defined(MBEDTLS_CIPHER_MODE_CBC)
1839
+ /*
1840
+ * CBC mode
1841
+ */
1842
+ for( i = 0; i < 6; i++ )
1843
+ {
1844
+ u = i >> 1;
1845
+ keybits = 128 + u * 64;
1846
+ mode = i & 1;
1847
+
1848
+ if( verbose != 0 )
1849
+ mbedtls_printf( " AES-CBC-%3u (%s): ", keybits,
1850
+ ( mode == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" );
1851
+
1852
+ memset( iv , 0, 16 );
1853
+ memset( prv, 0, 16 );
1854
+ memset( buf, 0, 16 );
1855
+
1856
+ if( mode == MBEDTLS_AES_DECRYPT )
1857
+ {
1858
+ ret = mbedtls_aes_setkey_dec( &ctx, key, keybits );
1859
+ aes_tests = aes_test_cbc_dec[u];
1860
+ }
1861
+ else
1862
+ {
1863
+ ret = mbedtls_aes_setkey_enc( &ctx, key, keybits );
1864
+ aes_tests = aes_test_cbc_enc[u];
1865
+ }
1866
+
1867
+ /*
1868
+ * AES-192 is an optional feature that may be unavailable when
1869
+ * there is an alternative underlying implementation i.e. when
1870
+ * MBEDTLS_AES_ALT is defined.
1871
+ */
1872
+ if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 )
1873
+ {
1874
+ mbedtls_printf( "skipped\n" );
1875
+ continue;
1876
+ }
1877
+ else if( ret != 0 )
1878
+ {
1879
+ goto exit;
1880
+ }
1881
+
1882
+ for( j = 0; j < 10000; j++ )
1883
+ {
1884
+ if( mode == MBEDTLS_AES_ENCRYPT )
1885
+ {
1886
+ unsigned char tmp[16];
1887
+
1888
+ memcpy( tmp, prv, 16 );
1889
+ memcpy( prv, buf, 16 );
1890
+ memcpy( buf, tmp, 16 );
1891
+ }
1892
+
1893
+ ret = mbedtls_aes_crypt_cbc( &ctx, mode, 16, iv, buf, buf );
1894
+ if( ret != 0 )
1895
+ goto exit;
1896
+
1897
+ }
1898
+
1899
+ if( memcmp( buf, aes_tests, 16 ) != 0 )
1900
+ {
1901
+ ret = 1;
1902
+ goto exit;
1903
+ }
1904
+
1905
+ if( verbose != 0 )
1906
+ mbedtls_printf( "passed\n" );
1907
+ }
1908
+
1909
+ if( verbose != 0 )
1910
+ mbedtls_printf( "\n" );
1911
+ #endif /* MBEDTLS_CIPHER_MODE_CBC */
1912
+
1913
+ #if defined(MBEDTLS_CIPHER_MODE_CFB)
1914
+ /*
1915
+ * CFB128 mode
1916
+ */
1917
+ for( i = 0; i < 6; i++ )
1918
+ {
1919
+ u = i >> 1;
1920
+ keybits = 128 + u * 64;
1921
+ mode = i & 1;
1922
+
1923
+ if( verbose != 0 )
1924
+ mbedtls_printf( " AES-CFB128-%3u (%s): ", keybits,
1925
+ ( mode == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" );
1926
+
1927
+ memcpy( iv, aes_test_cfb128_iv, 16 );
1928
+ memcpy( key, aes_test_cfb128_key[u], keybits / 8 );
1929
+
1930
+ offset = 0;
1931
+ ret = mbedtls_aes_setkey_enc( &ctx, key, keybits );
1932
+ /*
1933
+ * AES-192 is an optional feature that may be unavailable when
1934
+ * there is an alternative underlying implementation i.e. when
1935
+ * MBEDTLS_AES_ALT is defined.
1936
+ */
1937
+ if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 )
1938
+ {
1939
+ mbedtls_printf( "skipped\n" );
1940
+ continue;
1941
+ }
1942
+ else if( ret != 0 )
1943
+ {
1944
+ goto exit;
1945
+ }
1946
+
1947
+ if( mode == MBEDTLS_AES_DECRYPT )
1948
+ {
1949
+ memcpy( buf, aes_test_cfb128_ct[u], 64 );
1950
+ aes_tests = aes_test_cfb128_pt;
1951
+ }
1952
+ else
1953
+ {
1954
+ memcpy( buf, aes_test_cfb128_pt, 64 );
1955
+ aes_tests = aes_test_cfb128_ct[u];
1956
+ }
1957
+
1958
+ ret = mbedtls_aes_crypt_cfb128( &ctx, mode, 64, &offset, iv, buf, buf );
1959
+ if( ret != 0 )
1960
+ goto exit;
1961
+
1962
+ if( memcmp( buf, aes_tests, 64 ) != 0 )
1963
+ {
1964
+ ret = 1;
1965
+ goto exit;
1966
+ }
1967
+
1968
+ if( verbose != 0 )
1969
+ mbedtls_printf( "passed\n" );
1970
+ }
1971
+
1972
+ if( verbose != 0 )
1973
+ mbedtls_printf( "\n" );
1974
+ #endif /* MBEDTLS_CIPHER_MODE_CFB */
1975
+
1976
+ #if defined(MBEDTLS_CIPHER_MODE_OFB)
1977
+ /*
1978
+ * OFB mode
1979
+ */
1980
+ for( i = 0; i < 6; i++ )
1981
+ {
1982
+ u = i >> 1;
1983
+ keybits = 128 + u * 64;
1984
+ mode = i & 1;
1985
+
1986
+ if( verbose != 0 )
1987
+ mbedtls_printf( " AES-OFB-%3u (%s): ", keybits,
1988
+ ( mode == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" );
1989
+
1990
+ memcpy( iv, aes_test_ofb_iv, 16 );
1991
+ memcpy( key, aes_test_ofb_key[u], keybits / 8 );
1992
+
1993
+ offset = 0;
1994
+ ret = mbedtls_aes_setkey_enc( &ctx, key, keybits );
1995
+ /*
1996
+ * AES-192 is an optional feature that may be unavailable when
1997
+ * there is an alternative underlying implementation i.e. when
1998
+ * MBEDTLS_AES_ALT is defined.
1999
+ */
2000
+ if( ret == MBEDTLS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 )
2001
+ {
2002
+ mbedtls_printf( "skipped\n" );
2003
+ continue;
2004
+ }
2005
+ else if( ret != 0 )
2006
+ {
2007
+ goto exit;
2008
+ }
2009
+
2010
+ if( mode == MBEDTLS_AES_DECRYPT )
2011
+ {
2012
+ memcpy( buf, aes_test_ofb_ct[u], 64 );
2013
+ aes_tests = aes_test_ofb_pt;
2014
+ }
2015
+ else
2016
+ {
2017
+ memcpy( buf, aes_test_ofb_pt, 64 );
2018
+ aes_tests = aes_test_ofb_ct[u];
2019
+ }
2020
+
2021
+ ret = mbedtls_aes_crypt_ofb( &ctx, 64, &offset, iv, buf, buf );
2022
+ if( ret != 0 )
2023
+ goto exit;
2024
+
2025
+ if( memcmp( buf, aes_tests, 64 ) != 0 )
2026
+ {
2027
+ ret = 1;
2028
+ goto exit;
2029
+ }
2030
+
2031
+ if( verbose != 0 )
2032
+ mbedtls_printf( "passed\n" );
2033
+ }
2034
+
2035
+ if( verbose != 0 )
2036
+ mbedtls_printf( "\n" );
2037
+ #endif /* MBEDTLS_CIPHER_MODE_OFB */
2038
+
2039
+ #if defined(MBEDTLS_CIPHER_MODE_CTR)
2040
+ /*
2041
+ * CTR mode
2042
+ */
2043
+ for( i = 0; i < 6; i++ )
2044
+ {
2045
+ u = i >> 1;
2046
+ mode = i & 1;
2047
+
2048
+ if( verbose != 0 )
2049
+ mbedtls_printf( " AES-CTR-128 (%s): ",
2050
+ ( mode == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" );
2051
+
2052
+ memcpy( nonce_counter, aes_test_ctr_nonce_counter[u], 16 );
2053
+ memcpy( key, aes_test_ctr_key[u], 16 );
2054
+
2055
+ offset = 0;
2056
+ if( ( ret = mbedtls_aes_setkey_enc( &ctx, key, 128 ) ) != 0 )
2057
+ goto exit;
2058
+
2059
+ len = aes_test_ctr_len[u];
2060
+
2061
+ if( mode == MBEDTLS_AES_DECRYPT )
2062
+ {
2063
+ memcpy( buf, aes_test_ctr_ct[u], len );
2064
+ aes_tests = aes_test_ctr_pt[u];
2065
+ }
2066
+ else
2067
+ {
2068
+ memcpy( buf, aes_test_ctr_pt[u], len );
2069
+ aes_tests = aes_test_ctr_ct[u];
2070
+ }
2071
+
2072
+ ret = mbedtls_aes_crypt_ctr( &ctx, len, &offset, nonce_counter,
2073
+ stream_block, buf, buf );
2074
+ if( ret != 0 )
2075
+ goto exit;
2076
+
2077
+ if( memcmp( buf, aes_tests, len ) != 0 )
2078
+ {
2079
+ ret = 1;
2080
+ goto exit;
2081
+ }
2082
+
2083
+ if( verbose != 0 )
2084
+ mbedtls_printf( "passed\n" );
2085
+ }
2086
+
2087
+ if( verbose != 0 )
2088
+ mbedtls_printf( "\n" );
2089
+ #endif /* MBEDTLS_CIPHER_MODE_CTR */
2090
+
2091
+ #if defined(MBEDTLS_CIPHER_MODE_XTS)
2092
+ {
2093
+ static const int num_tests =
2094
+ sizeof(aes_test_xts_key) / sizeof(*aes_test_xts_key);
2095
+ mbedtls_aes_xts_context ctx_xts;
2096
+
2097
+ /*
2098
+ * XTS mode
2099
+ */
2100
+ mbedtls_aes_xts_init( &ctx_xts );
2101
+
2102
+ for( i = 0; i < num_tests << 1; i++ )
2103
+ {
2104
+ const unsigned char *data_unit;
2105
+ u = i >> 1;
2106
+ mode = i & 1;
2107
+
2108
+ if( verbose != 0 )
2109
+ mbedtls_printf( " AES-XTS-128 (%s): ",
2110
+ ( mode == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" );
2111
+
2112
+ memset( key, 0, sizeof( key ) );
2113
+ memcpy( key, aes_test_xts_key[u], 32 );
2114
+ data_unit = aes_test_xts_data_unit[u];
2115
+
2116
+ len = sizeof( *aes_test_xts_ct32 );
2117
+
2118
+ if( mode == MBEDTLS_AES_DECRYPT )
2119
+ {
2120
+ ret = mbedtls_aes_xts_setkey_dec( &ctx_xts, key, 256 );
2121
+ if( ret != 0)
2122
+ goto exit;
2123
+ memcpy( buf, aes_test_xts_ct32[u], len );
2124
+ aes_tests = aes_test_xts_pt32[u];
2125
+ }
2126
+ else
2127
+ {
2128
+ ret = mbedtls_aes_xts_setkey_enc( &ctx_xts, key, 256 );
2129
+ if( ret != 0)
2130
+ goto exit;
2131
+ memcpy( buf, aes_test_xts_pt32[u], len );
2132
+ aes_tests = aes_test_xts_ct32[u];
2133
+ }
2134
+
2135
+
2136
+ ret = mbedtls_aes_crypt_xts( &ctx_xts, mode, len, data_unit,
2137
+ buf, buf );
2138
+ if( ret != 0 )
2139
+ goto exit;
2140
+
2141
+ if( memcmp( buf, aes_tests, len ) != 0 )
2142
+ {
2143
+ ret = 1;
2144
+ goto exit;
2145
+ }
2146
+
2147
+ if( verbose != 0 )
2148
+ mbedtls_printf( "passed\n" );
2149
+ }
2150
+
2151
+ if( verbose != 0 )
2152
+ mbedtls_printf( "\n" );
2153
+
2154
+ mbedtls_aes_xts_free( &ctx_xts );
2155
+ }
2156
+ #endif /* MBEDTLS_CIPHER_MODE_XTS */
2157
+
2158
+ ret = 0;
2159
+
2160
+ exit:
2161
+ if( ret != 0 && verbose != 0 )
2162
+ mbedtls_printf( "failed\n" );
2163
+
2164
+ mbedtls_aes_free( &ctx );
2165
+
2166
+ return( ret );
2167
+ }
2168
+
2169
+ #endif /* MBEDTLS_SELF_TEST */
2170
+
2171
+ #endif /* MBEDTLS_AES_C */