grpc 1.4.5 → 1.6.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (928) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1235 -1100
  3. data/etc/roots.pem +0 -412
  4. data/include/grpc/byte_buffer.h +10 -25
  5. data/include/grpc/byte_buffer_reader.h +10 -25
  6. data/include/grpc/census.h +10 -25
  7. data/include/grpc/compression.h +10 -25
  8. data/include/grpc/grpc.h +15 -26
  9. data/include/grpc/grpc_cronet.h +10 -25
  10. data/include/grpc/grpc_posix.h +10 -25
  11. data/include/grpc/grpc_security.h +10 -25
  12. data/include/grpc/grpc_security_constants.h +10 -25
  13. data/include/grpc/impl/codegen/atm.h +11 -25
  14. data/include/grpc/impl/codegen/atm_gcc_atomic.h +10 -25
  15. data/include/grpc/impl/codegen/atm_gcc_sync.h +10 -25
  16. data/include/grpc/impl/codegen/atm_windows.h +10 -25
  17. data/include/grpc/impl/codegen/byte_buffer_reader.h +11 -26
  18. data/include/grpc/impl/codegen/compression_types.h +12 -27
  19. data/include/grpc/impl/codegen/connectivity_state.h +10 -25
  20. data/include/grpc/impl/codegen/exec_ctx_fwd.h +10 -25
  21. data/include/grpc/impl/codegen/gpr_slice.h +10 -25
  22. data/include/grpc/impl/codegen/gpr_types.h +10 -25
  23. data/include/grpc/impl/codegen/grpc_types.h +42 -43
  24. data/include/grpc/impl/codegen/port_platform.h +10 -25
  25. data/include/grpc/impl/codegen/propagation_bits.h +10 -25
  26. data/include/grpc/impl/codegen/slice.h +13 -28
  27. data/include/grpc/impl/codegen/status.h +10 -25
  28. data/include/grpc/impl/codegen/sync.h +10 -25
  29. data/include/grpc/impl/codegen/sync_generic.h +10 -25
  30. data/include/grpc/impl/codegen/sync_posix.h +10 -25
  31. data/include/grpc/impl/codegen/sync_windows.h +10 -25
  32. data/include/grpc/load_reporting.h +10 -25
  33. data/include/grpc/slice.h +10 -25
  34. data/include/grpc/slice_buffer.h +10 -25
  35. data/include/grpc/status.h +10 -25
  36. data/include/grpc/support/alloc.h +10 -25
  37. data/include/grpc/support/atm.h +10 -25
  38. data/include/grpc/support/atm_gcc_atomic.h +10 -25
  39. data/include/grpc/support/atm_gcc_sync.h +10 -25
  40. data/include/grpc/support/atm_windows.h +10 -25
  41. data/include/grpc/support/avl.h +46 -49
  42. data/include/grpc/support/cmdline.h +10 -25
  43. data/include/grpc/support/cpu.h +10 -25
  44. data/include/grpc/support/histogram.h +10 -25
  45. data/include/grpc/support/host_port.h +10 -25
  46. data/include/grpc/support/log.h +10 -25
  47. data/include/grpc/support/log_windows.h +10 -25
  48. data/include/grpc/support/port_platform.h +10 -25
  49. data/include/grpc/support/string_util.h +10 -25
  50. data/include/grpc/support/subprocess.h +10 -25
  51. data/include/grpc/support/sync.h +10 -25
  52. data/include/grpc/support/sync_generic.h +10 -25
  53. data/include/grpc/support/sync_posix.h +10 -25
  54. data/include/grpc/support/sync_windows.h +10 -25
  55. data/include/grpc/support/thd.h +10 -25
  56. data/include/grpc/support/time.h +10 -25
  57. data/include/grpc/support/tls.h +10 -25
  58. data/include/grpc/support/tls_gcc.h +10 -25
  59. data/include/grpc/support/tls_msvc.h +10 -25
  60. data/include/grpc/support/tls_pthread.h +10 -25
  61. data/include/grpc/support/useful.h +10 -25
  62. data/include/grpc/support/workaround_list.h +11 -26
  63. data/src/boringssl/err_data.c +277 -259
  64. data/src/core/ext/census/aggregation.h +10 -25
  65. data/src/core/ext/census/base_resources.c +10 -25
  66. data/src/core/ext/census/base_resources.h +10 -25
  67. data/src/core/ext/census/census_interface.h +10 -25
  68. data/src/core/ext/census/census_rpc_stats.h +10 -25
  69. data/src/core/ext/census/context.c +10 -25
  70. data/src/core/ext/census/gen/census.pb.c +10 -25
  71. data/src/core/ext/census/gen/census.pb.h +10 -25
  72. data/src/core/ext/census/gen/trace_context.pb.c +10 -25
  73. data/src/core/ext/census/gen/trace_context.pb.h +10 -25
  74. data/src/core/ext/census/grpc_context.c +10 -25
  75. data/src/core/ext/census/grpc_filter.c +11 -26
  76. data/src/core/ext/census/grpc_filter.h +10 -25
  77. data/src/core/ext/census/grpc_plugin.c +10 -25
  78. data/src/core/ext/census/initialize.c +10 -25
  79. data/src/core/ext/census/intrusive_hash_map.c +10 -25
  80. data/src/core/ext/census/intrusive_hash_map.h +10 -25
  81. data/src/core/ext/census/intrusive_hash_map_internal.h +10 -25
  82. data/src/core/ext/census/mlog.c +10 -25
  83. data/src/core/ext/census/mlog.h +10 -25
  84. data/src/core/ext/census/operation.c +10 -25
  85. data/src/core/ext/census/placeholders.c +10 -25
  86. data/src/core/ext/census/resource.c +10 -25
  87. data/src/core/ext/census/resource.h +10 -25
  88. data/src/core/ext/census/rpc_metric_id.h +10 -25
  89. data/src/core/ext/census/trace_context.c +10 -25
  90. data/src/core/ext/census/trace_context.h +10 -25
  91. data/src/core/ext/census/trace_label.h +10 -25
  92. data/src/core/ext/census/trace_propagation.h +10 -25
  93. data/src/core/ext/census/trace_status.h +10 -25
  94. data/src/core/ext/census/trace_string.h +10 -25
  95. data/src/core/ext/census/tracing.c +10 -26
  96. data/src/core/ext/census/tracing.h +10 -25
  97. data/src/core/ext/filters/client_channel/channel_connectivity.c +20 -33
  98. data/src/core/ext/filters/client_channel/client_channel.c +617 -520
  99. data/src/core/ext/filters/client_channel/client_channel.h +15 -28
  100. data/src/core/ext/filters/client_channel/client_channel_factory.c +13 -31
  101. data/src/core/ext/filters/client_channel/client_channel_factory.h +10 -25
  102. data/src/core/ext/filters/client_channel/client_channel_plugin.c +16 -29
  103. data/src/core/ext/filters/client_channel/connector.c +10 -25
  104. data/src/core/ext/filters/client_channel/connector.h +10 -25
  105. data/src/core/ext/filters/client_channel/http_connect_handshaker.c +15 -30
  106. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -25
  107. data/src/core/ext/filters/client_channel/http_proxy.c +112 -38
  108. data/src/core/ext/filters/client_channel/http_proxy.h +10 -25
  109. data/src/core/ext/filters/client_channel/lb_policy.c +32 -36
  110. data/src/core/ext/filters/client_channel/lb_policy.h +24 -27
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +14 -30
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +10 -25
  113. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +464 -279
  114. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +10 -25
  115. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +15 -28
  116. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +40 -48
  117. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +65 -49
  118. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +31 -31
  119. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +47 -32
  120. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +11 -26
  121. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +13 -9
  122. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +27 -21
  123. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +373 -136
  124. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +504 -279
  125. data/src/core/ext/filters/client_channel/lb_policy_factory.c +12 -31
  126. data/src/core/ext/filters/client_channel/lb_policy_factory.h +12 -27
  127. data/src/core/ext/filters/client_channel/lb_policy_registry.c +10 -25
  128. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -25
  129. data/src/core/ext/filters/client_channel/parse_address.c +10 -25
  130. data/src/core/ext/filters/client_channel/parse_address.h +10 -25
  131. data/src/core/ext/filters/client_channel/proxy_mapper.c +10 -25
  132. data/src/core/ext/filters/client_channel/proxy_mapper.h +10 -25
  133. data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +10 -25
  134. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +10 -25
  135. data/src/core/ext/filters/client_channel/resolver.c +33 -38
  136. data/src/core/ext/filters/client_channel/resolver.h +19 -30
  137. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +153 -50
  138. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +14 -27
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +33 -30
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +326 -116
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +35 -36
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +60 -0
  143. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +19 -34
  144. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.c +254 -0
  145. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +60 -0
  146. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +16 -28
  147. data/src/core/ext/filters/client_channel/resolver_factory.c +10 -25
  148. data/src/core/ext/filters/client_channel/resolver_factory.h +10 -25
  149. data/src/core/ext/filters/client_channel/resolver_registry.c +10 -25
  150. data/src/core/ext/filters/client_channel/resolver_registry.h +10 -25
  151. data/src/core/ext/filters/client_channel/retry_throttle.c +23 -34
  152. data/src/core/ext/filters/client_channel/retry_throttle.h +10 -25
  153. data/src/core/ext/filters/client_channel/subchannel.c +33 -55
  154. data/src/core/ext/filters/client_channel/subchannel.h +16 -26
  155. data/src/core/ext/filters/client_channel/subchannel_index.c +55 -92
  156. data/src/core/ext/filters/client_channel/subchannel_index.h +26 -29
  157. data/src/core/ext/filters/client_channel/uri_parser.c +10 -25
  158. data/src/core/ext/filters/client_channel/uri_parser.h +10 -25
  159. data/src/core/ext/filters/deadline/deadline_filter.c +30 -45
  160. data/src/core/ext/filters/deadline/deadline_filter.h +10 -25
  161. data/src/core/ext/filters/http/client/http_client_filter.c +255 -294
  162. data/src/core/ext/filters/http/client/http_client_filter.h +10 -25
  163. data/src/core/ext/filters/http/http_filters_plugin.c +11 -26
  164. data/src/core/ext/filters/http/message_compress/message_compress_filter.c +133 -105
  165. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +10 -25
  166. data/src/core/ext/filters/http/server/http_server_filter.c +17 -32
  167. data/src/core/ext/filters/http/server/http_server_filter.h +10 -25
  168. data/src/core/ext/filters/load_reporting/load_reporting.c +11 -30
  169. data/src/core/ext/filters/load_reporting/load_reporting.h +10 -25
  170. data/src/core/ext/filters/load_reporting/load_reporting_filter.c +11 -26
  171. data/src/core/ext/filters/load_reporting/load_reporting_filter.h +10 -25
  172. data/src/core/ext/filters/max_age/max_age_filter.c +28 -43
  173. data/src/core/ext/filters/max_age/max_age_filter.h +10 -25
  174. data/src/core/ext/filters/message_size/message_size_filter.c +24 -37
  175. data/src/core/ext/filters/message_size/message_size_filter.h +10 -25
  176. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +16 -31
  177. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +10 -25
  178. data/src/core/ext/filters/workarounds/workaround_utils.c +12 -26
  179. data/src/core/ext/filters/workarounds/workaround_utils.h +11 -26
  180. data/src/core/ext/transport/chttp2/alpn/alpn.c +10 -25
  181. data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -25
  182. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +13 -28
  183. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +10 -25
  184. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +13 -30
  185. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +12 -29
  186. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +13 -30
  187. data/src/core/ext/transport/chttp2/server/chttp2_server.c +11 -26
  188. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -25
  189. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +10 -25
  190. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +10 -25
  191. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +10 -25
  192. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +11 -25
  193. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +10 -25
  194. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +10 -25
  195. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +10 -25
  196. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +15 -27
  197. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +421 -443
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -25
  199. data/src/core/ext/transport/chttp2/transport/flow_control.c +500 -0
  200. data/src/core/ext/transport/chttp2/transport/frame.h +10 -25
  201. data/src/core/ext/transport/chttp2/transport/frame_data.c +20 -28
  202. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -25
  203. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +10 -25
  204. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -25
  205. data/src/core/ext/transport/chttp2/transport/frame_ping.c +11 -26
  206. data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -25
  207. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +11 -26
  208. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -25
  209. data/src/core/ext/transport/chttp2/transport/frame_settings.c +16 -29
  210. data/src/core/ext/transport/chttp2/transport/frame_settings.h +10 -25
  211. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -33
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +10 -25
  213. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +18 -31
  214. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +12 -25
  215. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +15 -30
  216. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -25
  217. data/src/core/ext/transport/chttp2/transport/hpack_table.c +10 -25
  218. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -25
  219. data/src/core/ext/transport/chttp2/transport/http2_settings.c +10 -25
  220. data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -25
  221. data/src/core/ext/transport/chttp2/transport/huffsyms.c +10 -25
  222. data/src/core/ext/transport/chttp2/transport/huffsyms.h +10 -25
  223. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +10 -25
  224. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +10 -25
  225. data/src/core/ext/transport/chttp2/transport/internal.h +191 -179
  226. data/src/core/ext/transport/chttp2/transport/parsing.c +33 -102
  227. data/src/core/ext/transport/chttp2/transport/stream_lists.c +26 -28
  228. data/src/core/ext/transport/chttp2/transport/stream_map.c +10 -25
  229. data/src/core/ext/transport/chttp2/transport/stream_map.h +10 -25
  230. data/src/core/ext/transport/chttp2/transport/varint.c +14 -25
  231. data/src/core/ext/transport/chttp2/transport/varint.h +10 -25
  232. data/src/core/ext/transport/chttp2/transport/writing.c +164 -106
  233. data/src/core/ext/transport/inproc/inproc_plugin.c +29 -0
  234. data/src/core/ext/transport/inproc/inproc_transport.c +1303 -0
  235. data/src/core/ext/transport/inproc/inproc_transport.h +41 -0
  236. data/src/core/lib/channel/channel_args.c +52 -27
  237. data/src/core/lib/channel/channel_args.h +18 -27
  238. data/src/core/lib/channel/channel_stack.c +11 -26
  239. data/src/core/lib/channel/channel_stack.h +12 -27
  240. data/src/core/lib/channel/channel_stack_builder.c +11 -26
  241. data/src/core/lib/channel/channel_stack_builder.h +10 -25
  242. data/src/core/lib/channel/connected_channel.c +10 -25
  243. data/src/core/lib/channel/connected_channel.h +10 -25
  244. data/src/core/lib/channel/context.h +10 -25
  245. data/src/core/lib/channel/handshaker.c +14 -29
  246. data/src/core/lib/channel/handshaker.h +10 -25
  247. data/src/core/lib/channel/handshaker_factory.c +10 -25
  248. data/src/core/lib/channel/handshaker_factory.h +10 -25
  249. data/src/core/lib/channel/handshaker_registry.c +10 -25
  250. data/src/core/lib/channel/handshaker_registry.h +10 -25
  251. data/src/core/lib/compression/algorithm_metadata.h +10 -25
  252. data/src/core/lib/compression/compression.c +10 -25
  253. data/src/core/lib/compression/message_compress.c +10 -25
  254. data/src/core/lib/compression/message_compress.h +10 -25
  255. data/src/core/lib/compression/stream_compression.c +191 -0
  256. data/src/core/lib/compression/stream_compression.h +90 -0
  257. data/src/core/lib/debug/trace.c +28 -29
  258. data/src/core/lib/debug/trace.h +16 -30
  259. data/src/core/lib/http/format_request.c +10 -25
  260. data/src/core/lib/http/format_request.h +10 -25
  261. data/src/core/lib/http/httpcli.c +19 -35
  262. data/src/core/lib/http/httpcli.h +10 -25
  263. data/src/core/lib/http/httpcli_security_connector.c +17 -30
  264. data/src/core/lib/http/parser.c +11 -26
  265. data/src/core/lib/http/parser.h +10 -25
  266. data/src/core/lib/iomgr/closure.c +62 -25
  267. data/src/core/lib/iomgr/closure.h +81 -26
  268. data/src/core/lib/iomgr/combiner.c +103 -200
  269. data/src/core/lib/iomgr/combiner.h +14 -32
  270. data/src/core/lib/iomgr/endpoint.c +10 -29
  271. data/src/core/lib/iomgr/endpoint.h +10 -29
  272. data/src/core/lib/iomgr/endpoint_pair.h +10 -25
  273. data/src/core/lib/iomgr/endpoint_pair_posix.c +10 -25
  274. data/src/core/lib/iomgr/endpoint_pair_uv.c +10 -25
  275. data/src/core/lib/iomgr/endpoint_pair_windows.c +10 -25
  276. data/src/core/lib/iomgr/error.c +45 -46
  277. data/src/core/lib/iomgr/error.h +21 -34
  278. data/src/core/lib/iomgr/error_internal.h +10 -25
  279. data/src/core/lib/iomgr/ev_epoll1_linux.c +279 -179
  280. data/src/core/lib/iomgr/ev_epoll1_linux.h +10 -25
  281. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +75 -264
  282. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +10 -25
  283. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +44 -199
  284. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +10 -25
  285. data/src/core/lib/iomgr/ev_epollex_linux.c +184 -247
  286. data/src/core/lib/iomgr/ev_epollex_linux.h +10 -25
  287. data/src/core/lib/iomgr/ev_epollsig_linux.c +116 -323
  288. data/src/core/lib/iomgr/ev_epollsig_linux.h +10 -25
  289. data/src/core/lib/iomgr/ev_poll_posix.c +328 -184
  290. data/src/core/lib/iomgr/ev_poll_posix.h +10 -25
  291. data/src/core/lib/iomgr/ev_posix.c +25 -56
  292. data/src/core/lib/iomgr/ev_posix.h +15 -44
  293. data/src/core/lib/iomgr/ev_windows.c +11 -26
  294. data/src/core/lib/iomgr/exec_ctx.c +36 -45
  295. data/src/core/lib/iomgr/exec_ctx.h +10 -25
  296. data/src/core/lib/iomgr/executor.c +152 -127
  297. data/src/core/lib/iomgr/executor.h +18 -26
  298. data/src/core/lib/iomgr/gethostname.h +26 -0
  299. data/src/core/lib/iomgr/gethostname_fallback.c +27 -0
  300. data/src/core/lib/iomgr/gethostname_host_name_max.c +37 -0
  301. data/src/core/lib/iomgr/gethostname_sysconf.c +37 -0
  302. data/src/core/lib/iomgr/iocp_windows.c +10 -25
  303. data/src/core/lib/iomgr/iocp_windows.h +10 -25
  304. data/src/core/lib/iomgr/iomgr.c +17 -28
  305. data/src/core/lib/iomgr/iomgr.h +12 -27
  306. data/src/core/lib/iomgr/iomgr_internal.h +10 -25
  307. data/src/core/lib/iomgr/iomgr_posix.c +11 -26
  308. data/src/core/lib/iomgr/iomgr_posix.h +10 -25
  309. data/src/core/lib/iomgr/iomgr_uv.c +19 -26
  310. data/src/core/lib/iomgr/iomgr_uv.h +37 -0
  311. data/src/core/lib/iomgr/iomgr_windows.c +10 -25
  312. data/src/core/lib/iomgr/is_epollexclusive_available.c +10 -25
  313. data/src/core/lib/iomgr/is_epollexclusive_available.h +10 -25
  314. data/src/core/lib/iomgr/load_file.c +10 -25
  315. data/src/core/lib/iomgr/load_file.h +10 -25
  316. data/src/core/lib/iomgr/lockfree_event.c +22 -35
  317. data/src/core/lib/iomgr/lockfree_event.h +13 -27
  318. data/src/core/lib/iomgr/nameser.h +104 -0
  319. data/src/core/lib/iomgr/network_status_tracker.c +10 -25
  320. data/src/core/lib/iomgr/network_status_tracker.h +10 -25
  321. data/src/core/lib/iomgr/polling_entity.c +10 -25
  322. data/src/core/lib/iomgr/polling_entity.h +14 -34
  323. data/src/core/lib/iomgr/pollset.h +14 -25
  324. data/src/core/lib/iomgr/pollset_set.h +10 -25
  325. data/src/core/lib/iomgr/pollset_set_uv.c +10 -25
  326. data/src/core/lib/iomgr/pollset_set_windows.c +10 -25
  327. data/src/core/lib/iomgr/pollset_set_windows.h +10 -25
  328. data/src/core/lib/iomgr/pollset_uv.c +25 -26
  329. data/src/core/lib/iomgr/pollset_uv.h +10 -25
  330. data/src/core/lib/iomgr/pollset_windows.c +17 -27
  331. data/src/core/lib/iomgr/pollset_windows.h +10 -25
  332. data/src/core/lib/iomgr/port.h +24 -25
  333. data/src/core/lib/iomgr/resolve_address.h +10 -25
  334. data/src/core/lib/iomgr/resolve_address_posix.c +13 -28
  335. data/src/core/lib/iomgr/resolve_address_uv.c +31 -35
  336. data/src/core/lib/iomgr/resolve_address_windows.c +13 -28
  337. data/src/core/lib/iomgr/resource_quota.c +52 -67
  338. data/src/core/lib/iomgr/resource_quota.h +10 -25
  339. data/src/core/lib/iomgr/sockaddr.h +10 -25
  340. data/src/core/lib/iomgr/sockaddr_posix.h +10 -25
  341. data/src/core/lib/iomgr/sockaddr_utils.c +15 -25
  342. data/src/core/lib/iomgr/sockaddr_utils.h +12 -25
  343. data/src/core/lib/iomgr/sockaddr_windows.h +10 -25
  344. data/src/core/lib/iomgr/socket_factory_posix.c +13 -31
  345. data/src/core/lib/iomgr/socket_factory_posix.h +10 -25
  346. data/src/core/lib/iomgr/socket_mutator.c +14 -31
  347. data/src/core/lib/iomgr/socket_mutator.h +10 -25
  348. data/src/core/lib/iomgr/socket_utils.h +10 -25
  349. data/src/core/lib/iomgr/socket_utils_common_posix.c +10 -25
  350. data/src/core/lib/iomgr/socket_utils_linux.c +10 -25
  351. data/src/core/lib/iomgr/socket_utils_posix.c +10 -25
  352. data/src/core/lib/iomgr/socket_utils_posix.h +10 -25
  353. data/src/core/lib/iomgr/socket_utils_uv.c +10 -25
  354. data/src/core/lib/iomgr/socket_utils_windows.c +10 -25
  355. data/src/core/lib/iomgr/socket_windows.c +12 -27
  356. data/src/core/lib/iomgr/socket_windows.h +10 -25
  357. data/src/core/lib/iomgr/sys_epoll_wrapper.h +10 -25
  358. data/src/core/lib/iomgr/tcp_client.h +10 -25
  359. data/src/core/lib/iomgr/tcp_client_posix.c +21 -34
  360. data/src/core/lib/iomgr/tcp_client_posix.h +10 -25
  361. data/src/core/lib/iomgr/tcp_client_uv.c +18 -27
  362. data/src/core/lib/iomgr/tcp_client_windows.c +14 -29
  363. data/src/core/lib/iomgr/tcp_posix.c +36 -55
  364. data/src/core/lib/iomgr/tcp_posix.h +10 -25
  365. data/src/core/lib/iomgr/tcp_server.h +10 -25
  366. data/src/core/lib/iomgr/tcp_server_posix.c +16 -31
  367. data/src/core/lib/iomgr/tcp_server_utils_posix.h +10 -25
  368. data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +11 -26
  369. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +10 -25
  370. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +10 -25
  371. data/src/core/lib/iomgr/tcp_server_uv.c +103 -64
  372. data/src/core/lib/iomgr/tcp_server_windows.c +14 -29
  373. data/src/core/lib/iomgr/tcp_uv.c +41 -45
  374. data/src/core/lib/iomgr/tcp_uv.h +10 -25
  375. data/src/core/lib/iomgr/tcp_windows.c +39 -53
  376. data/src/core/lib/iomgr/tcp_windows.h +10 -25
  377. data/src/core/lib/iomgr/time_averaged_stats.c +10 -25
  378. data/src/core/lib/iomgr/time_averaged_stats.h +10 -25
  379. data/src/core/lib/iomgr/timer.h +18 -27
  380. data/src/core/lib/iomgr/timer_generic.c +91 -87
  381. data/src/core/lib/iomgr/timer_generic.h +10 -25
  382. data/src/core/lib/iomgr/timer_heap.c +10 -25
  383. data/src/core/lib/iomgr/timer_heap.h +10 -25
  384. data/src/core/lib/iomgr/timer_manager.c +178 -100
  385. data/src/core/lib/iomgr/timer_manager.h +10 -25
  386. data/src/core/lib/iomgr/timer_uv.c +23 -33
  387. data/src/core/lib/iomgr/timer_uv.h +10 -25
  388. data/src/core/lib/iomgr/udp_server.c +17 -32
  389. data/src/core/lib/iomgr/udp_server.h +10 -25
  390. data/src/core/lib/iomgr/unix_sockets_posix.c +10 -25
  391. data/src/core/lib/iomgr/unix_sockets_posix.h +10 -25
  392. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +10 -25
  393. data/src/core/lib/iomgr/wakeup_fd_cv.c +10 -25
  394. data/src/core/lib/iomgr/wakeup_fd_cv.h +13 -28
  395. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +10 -25
  396. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +10 -25
  397. data/src/core/lib/iomgr/wakeup_fd_pipe.c +10 -25
  398. data/src/core/lib/iomgr/wakeup_fd_pipe.h +10 -25
  399. data/src/core/lib/iomgr/wakeup_fd_posix.c +10 -25
  400. data/src/core/lib/iomgr/wakeup_fd_posix.h +10 -25
  401. data/src/core/lib/json/json.c +10 -25
  402. data/src/core/lib/json/json.h +10 -25
  403. data/src/core/lib/json/json_common.h +10 -25
  404. data/src/core/lib/json/json_reader.c +11 -25
  405. data/src/core/lib/json/json_reader.h +10 -25
  406. data/src/core/lib/json/json_string.c +10 -25
  407. data/src/core/lib/json/json_writer.c +10 -25
  408. data/src/core/lib/json/json_writer.h +10 -25
  409. data/src/core/lib/profiling/basic_timers.c +10 -25
  410. data/src/core/lib/profiling/stap_timers.c +10 -25
  411. data/src/core/lib/profiling/timers.h +10 -25
  412. data/src/core/lib/security/context/security_context.c +32 -40
  413. data/src/core/lib/security/context/security_context.h +15 -26
  414. data/src/core/lib/security/credentials/composite/composite_credentials.c +76 -81
  415. data/src/core/lib/security/credentials/composite/composite_credentials.h +10 -25
  416. data/src/core/lib/security/credentials/credentials.c +29 -49
  417. data/src/core/lib/security/credentials/credentials.h +48 -61
  418. data/src/core/lib/security/credentials/credentials_metadata.c +34 -78
  419. data/src/core/lib/security/credentials/fake/fake_credentials.c +33 -56
  420. data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -27
  421. data/src/core/lib/security/credentials/google_default/credentials_generic.c +10 -25
  422. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +12 -27
  423. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -25
  424. data/src/core/lib/security/credentials/iam/iam_credentials.c +40 -40
  425. data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -26
  426. data/src/core/lib/security/credentials/jwt/json_token.c +10 -25
  427. data/src/core/lib/security/credentials/jwt/json_token.h +10 -25
  428. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +45 -48
  429. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -26
  430. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +53 -33
  431. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +10 -25
  432. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +155 -87
  433. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -28
  434. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +118 -82
  435. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -27
  436. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -32
  437. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -25
  438. data/src/core/lib/security/transport/auth_filters.h +10 -25
  439. data/src/core/lib/security/transport/client_auth_filter.c +217 -112
  440. data/src/core/lib/security/transport/lb_targets_info.c +16 -32
  441. data/src/core/lib/security/transport/lb_targets_info.h +10 -25
  442. data/src/core/lib/security/transport/secure_endpoint.c +29 -43
  443. data/src/core/lib/security/transport/secure_endpoint.h +10 -25
  444. data/src/core/lib/security/transport/security_connector.c +80 -61
  445. data/src/core/lib/security/transport/security_connector.h +35 -35
  446. data/src/core/lib/security/transport/security_handshaker.c +18 -33
  447. data/src/core/lib/security/transport/security_handshaker.h +10 -25
  448. data/src/core/lib/security/transport/server_auth_filter.c +62 -116
  449. data/src/core/lib/security/transport/tsi_error.c +10 -25
  450. data/src/core/lib/security/transport/tsi_error.h +10 -25
  451. data/src/core/lib/security/util/json_util.c +10 -25
  452. data/src/core/lib/security/util/json_util.h +10 -25
  453. data/src/core/lib/slice/b64.c +10 -25
  454. data/src/core/lib/slice/b64.h +10 -25
  455. data/src/core/lib/slice/percent_encoding.c +10 -25
  456. data/src/core/lib/slice/percent_encoding.h +10 -25
  457. data/src/core/lib/slice/slice.c +10 -25
  458. data/src/core/lib/slice/slice_buffer.c +10 -25
  459. data/src/core/lib/slice/slice_hash_table.c +48 -26
  460. data/src/core/lib/slice/slice_hash_table.h +26 -28
  461. data/src/core/lib/slice/slice_intern.c +10 -25
  462. data/src/core/lib/slice/slice_internal.h +10 -25
  463. data/src/core/lib/slice/slice_string_helpers.c +10 -25
  464. data/src/core/lib/slice/slice_string_helpers.h +10 -25
  465. data/src/core/lib/support/alloc.c +10 -25
  466. data/src/core/lib/support/arena.c +12 -27
  467. data/src/core/lib/support/arena.h +10 -25
  468. data/src/core/lib/support/atm.c +17 -32
  469. data/src/core/lib/support/atomic.h +10 -25
  470. data/src/core/lib/support/atomic_with_atm.h +10 -25
  471. data/src/core/lib/support/atomic_with_std.h +10 -25
  472. data/src/core/lib/support/avl.c +101 -101
  473. data/src/core/lib/support/backoff.c +10 -25
  474. data/src/core/lib/support/backoff.h +10 -25
  475. data/src/core/lib/support/block_annotate.h +10 -25
  476. data/src/core/lib/support/cmdline.c +10 -25
  477. data/src/core/lib/support/cpu_iphone.c +10 -25
  478. data/src/core/lib/support/cpu_linux.c +10 -25
  479. data/src/core/lib/support/cpu_posix.c +10 -25
  480. data/src/core/lib/support/cpu_windows.c +10 -25
  481. data/src/core/lib/support/env.h +16 -25
  482. data/src/core/lib/support/env_linux.c +30 -37
  483. data/src/core/lib/support/env_posix.c +15 -25
  484. data/src/core/lib/support/env_windows.c +15 -25
  485. data/src/core/lib/support/histogram.c +10 -25
  486. data/src/core/lib/support/host_port.c +10 -25
  487. data/src/core/lib/support/log.c +20 -29
  488. data/src/core/lib/support/log_android.c +10 -25
  489. data/src/core/lib/support/log_linux.c +13 -26
  490. data/src/core/lib/support/log_posix.c +10 -25
  491. data/src/core/lib/support/log_windows.c +10 -25
  492. data/src/core/lib/support/memory.h +10 -25
  493. data/src/core/lib/support/mpscq.c +11 -49
  494. data/src/core/lib/support/mpscq.h +11 -50
  495. data/src/core/lib/support/murmur_hash.c +12 -25
  496. data/src/core/lib/support/murmur_hash.h +10 -25
  497. data/src/core/lib/support/spinlock.h +10 -25
  498. data/src/core/lib/support/stack_lockfree.c +10 -25
  499. data/src/core/lib/support/stack_lockfree.h +10 -25
  500. data/src/core/lib/support/string.c +10 -25
  501. data/src/core/lib/support/string.h +10 -25
  502. data/src/core/lib/support/string_posix.c +10 -25
  503. data/src/core/lib/support/string_util_windows.c +10 -25
  504. data/src/core/lib/support/string_windows.c +10 -25
  505. data/src/core/lib/support/string_windows.h +10 -25
  506. data/src/core/lib/support/subprocess_posix.c +10 -25
  507. data/src/core/lib/support/subprocess_windows.c +10 -25
  508. data/src/core/lib/support/sync.c +10 -25
  509. data/src/core/lib/support/sync_posix.c +10 -25
  510. data/src/core/lib/support/sync_windows.c +10 -25
  511. data/src/core/lib/support/thd.c +10 -25
  512. data/src/core/lib/support/thd_internal.h +10 -25
  513. data/src/core/lib/support/thd_posix.c +10 -25
  514. data/src/core/lib/support/thd_windows.c +10 -25
  515. data/src/core/lib/support/time.c +10 -25
  516. data/src/core/lib/support/time_posix.c +10 -25
  517. data/src/core/lib/support/time_precise.c +18 -33
  518. data/src/core/lib/support/time_precise.h +10 -25
  519. data/src/core/lib/support/time_windows.c +10 -25
  520. data/src/core/lib/support/tls_pthread.c +10 -25
  521. data/src/core/lib/support/tmpfile.h +10 -25
  522. data/src/core/lib/support/tmpfile_msys.c +10 -25
  523. data/src/core/lib/support/tmpfile_posix.c +10 -25
  524. data/src/core/lib/support/tmpfile_windows.c +10 -25
  525. data/src/core/lib/support/wrap_memcpy.c +10 -25
  526. data/src/core/lib/surface/alarm.c +78 -35
  527. data/src/core/lib/surface/alarm_internal.h +40 -0
  528. data/src/core/lib/surface/api_trace.c +11 -26
  529. data/src/core/lib/surface/api_trace.h +10 -25
  530. data/src/core/lib/surface/byte_buffer.c +10 -25
  531. data/src/core/lib/surface/byte_buffer_reader.c +10 -25
  532. data/src/core/lib/surface/call.c +64 -84
  533. data/src/core/lib/surface/call.h +11 -26
  534. data/src/core/lib/surface/call_details.c +10 -25
  535. data/src/core/lib/surface/call_log_batch.c +10 -25
  536. data/src/core/lib/surface/call_test_only.h +10 -25
  537. data/src/core/lib/surface/channel.c +11 -26
  538. data/src/core/lib/surface/channel.h +11 -26
  539. data/src/core/lib/surface/channel_init.c +10 -25
  540. data/src/core/lib/surface/channel_init.h +10 -25
  541. data/src/core/lib/surface/channel_ping.c +12 -27
  542. data/src/core/lib/surface/channel_stack_type.c +10 -25
  543. data/src/core/lib/surface/channel_stack_type.h +10 -25
  544. data/src/core/lib/surface/completion_queue.c +442 -331
  545. data/src/core/lib/surface/completion_queue.h +16 -33
  546. data/src/core/lib/surface/completion_queue_factory.c +10 -25
  547. data/src/core/lib/surface/completion_queue_factory.h +10 -25
  548. data/src/core/lib/surface/event_string.c +10 -25
  549. data/src/core/lib/surface/event_string.h +10 -25
  550. data/src/core/lib/surface/init.c +38 -47
  551. data/src/core/lib/surface/init.h +10 -25
  552. data/src/core/lib/surface/init_secure.c +20 -27
  553. data/src/core/lib/surface/lame_client.cc +14 -29
  554. data/src/core/lib/surface/lame_client.h +10 -25
  555. data/src/core/lib/surface/metadata_array.c +10 -25
  556. data/src/core/lib/surface/server.c +128 -81
  557. data/src/core/lib/surface/server.h +10 -25
  558. data/src/core/lib/surface/validate_metadata.c +10 -25
  559. data/src/core/lib/surface/validate_metadata.h +10 -25
  560. data/src/core/lib/surface/version.c +11 -26
  561. data/src/core/lib/transport/bdp_estimator.c +19 -29
  562. data/src/core/lib/transport/bdp_estimator.h +16 -29
  563. data/src/core/lib/transport/byte_stream.c +127 -36
  564. data/src/core/lib/transport/byte_stream.h +88 -46
  565. data/src/core/lib/transport/connectivity_state.c +17 -31
  566. data/src/core/lib/transport/connectivity_state.h +10 -25
  567. data/src/core/lib/transport/error_utils.c +10 -25
  568. data/src/core/lib/transport/error_utils.h +10 -25
  569. data/src/core/lib/transport/http2_errors.h +10 -25
  570. data/src/core/lib/transport/metadata.c +87 -85
  571. data/src/core/lib/transport/metadata.h +15 -28
  572. data/src/core/lib/transport/metadata_batch.c +10 -25
  573. data/src/core/lib/transport/metadata_batch.h +10 -25
  574. data/src/core/lib/transport/pid_controller.c +10 -25
  575. data/src/core/lib/transport/pid_controller.h +10 -25
  576. data/src/core/lib/transport/service_config.c +11 -26
  577. data/src/core/lib/transport/service_config.h +10 -25
  578. data/src/core/lib/transport/static_metadata.c +12 -26
  579. data/src/core/lib/transport/static_metadata.h +10 -25
  580. data/src/core/lib/transport/status_conversion.c +10 -25
  581. data/src/core/lib/transport/status_conversion.h +10 -25
  582. data/src/core/lib/transport/timeout_encoding.c +10 -25
  583. data/src/core/lib/transport/timeout_encoding.h +10 -25
  584. data/src/core/lib/transport/transport.c +60 -53
  585. data/src/core/lib/transport/transport.h +36 -34
  586. data/src/core/lib/transport/transport_impl.h +10 -25
  587. data/src/core/lib/transport/transport_op_string.c +10 -28
  588. data/src/core/plugin_registry/grpc_plugin_registry.c +22 -25
  589. data/src/core/tsi/fake_transport_security.c +199 -94
  590. data/src/core/tsi/fake_transport_security.h +11 -26
  591. data/src/core/tsi/gts_transport_security.c +40 -0
  592. data/src/core/tsi/gts_transport_security.h +37 -0
  593. data/src/core/tsi/ssl_transport_security.c +13 -32
  594. data/src/core/tsi/ssl_transport_security.h +10 -25
  595. data/src/core/tsi/ssl_types.h +10 -25
  596. data/src/core/tsi/transport_security.c +48 -78
  597. data/src/core/tsi/transport_security.h +18 -27
  598. data/src/core/tsi/transport_security_adapter.c +17 -29
  599. data/src/core/tsi/transport_security_adapter.h +10 -25
  600. data/src/core/tsi/transport_security_grpc.c +64 -0
  601. data/src/core/tsi/transport_security_grpc.h +80 -0
  602. data/src/core/tsi/transport_security_interface.h +21 -27
  603. data/src/ruby/bin/apis/google/protobuf/empty.rb +10 -25
  604. data/src/ruby/bin/apis/pubsub_demo.rb +10 -25
  605. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +10 -25
  606. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +10 -25
  607. data/src/ruby/bin/math_client.rb +10 -25
  608. data/src/ruby/bin/math_server.rb +10 -25
  609. data/src/ruby/bin/math_services_pb.rb +10 -25
  610. data/src/ruby/bin/noproto_client.rb +10 -25
  611. data/src/ruby/bin/noproto_server.rb +10 -25
  612. data/src/ruby/ext/grpc/extconf.rb +10 -25
  613. data/src/ruby/ext/grpc/rb_byte_buffer.c +10 -25
  614. data/src/ruby/ext/grpc/rb_byte_buffer.h +10 -25
  615. data/src/ruby/ext/grpc/rb_call.c +44 -25
  616. data/src/ruby/ext/grpc/rb_call.h +10 -25
  617. data/src/ruby/ext/grpc/rb_call_credentials.c +10 -25
  618. data/src/ruby/ext/grpc/rb_call_credentials.h +10 -25
  619. data/src/ruby/ext/grpc/rb_channel.c +10 -25
  620. data/src/ruby/ext/grpc/rb_channel.h +10 -25
  621. data/src/ruby/ext/grpc/rb_channel_args.c +10 -25
  622. data/src/ruby/ext/grpc/rb_channel_args.h +10 -25
  623. data/src/ruby/ext/grpc/rb_channel_credentials.c +10 -25
  624. data/src/ruby/ext/grpc/rb_channel_credentials.h +10 -25
  625. data/src/ruby/ext/grpc/rb_completion_queue.c +10 -25
  626. data/src/ruby/ext/grpc/rb_completion_queue.h +10 -25
  627. data/src/ruby/ext/grpc/rb_compression_options.c +10 -25
  628. data/src/ruby/ext/grpc/rb_compression_options.h +10 -25
  629. data/src/ruby/ext/grpc/rb_event_thread.c +10 -25
  630. data/src/ruby/ext/grpc/rb_event_thread.h +10 -25
  631. data/src/ruby/ext/grpc/rb_grpc.c +10 -25
  632. data/src/ruby/ext/grpc/rb_grpc.h +10 -25
  633. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -25
  634. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +16 -31
  635. data/src/ruby/ext/grpc/rb_loader.c +10 -25
  636. data/src/ruby/ext/grpc/rb_loader.h +10 -25
  637. data/src/ruby/ext/grpc/rb_server.c +10 -25
  638. data/src/ruby/ext/grpc/rb_server.h +10 -25
  639. data/src/ruby/ext/grpc/rb_server_credentials.c +10 -25
  640. data/src/ruby/ext/grpc/rb_server_credentials.h +10 -25
  641. data/src/ruby/lib/grpc.rb +10 -25
  642. data/src/ruby/lib/grpc/core/time_consts.rb +10 -25
  643. data/src/ruby/lib/grpc/errors.rb +16 -30
  644. data/src/ruby/lib/grpc/generic/active_call.rb +25 -27
  645. data/src/ruby/lib/grpc/generic/bidi_call.rb +17 -27
  646. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -25
  647. data/src/ruby/lib/grpc/generic/rpc_desc.rb +10 -25
  648. data/src/ruby/lib/grpc/generic/rpc_server.rb +10 -25
  649. data/src/ruby/lib/grpc/generic/service.rb +10 -25
  650. data/src/ruby/lib/grpc/grpc.rb +10 -25
  651. data/src/ruby/lib/grpc/logconfig.rb +10 -25
  652. data/src/ruby/lib/grpc/notifier.rb +10 -25
  653. data/src/ruby/lib/grpc/version.rb +11 -26
  654. data/src/ruby/pb/generate_proto_ruby.sh +10 -25
  655. data/src/ruby/pb/grpc/health/checker.rb +10 -25
  656. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +10 -25
  657. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +10 -25
  658. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +10 -25
  659. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +10 -25
  660. data/src/ruby/pb/test/client.rb +10 -25
  661. data/src/ruby/pb/test/server.rb +10 -25
  662. data/src/ruby/spec/call_credentials_spec.rb +10 -25
  663. data/src/ruby/spec/call_spec.rb +43 -25
  664. data/src/ruby/spec/channel_connection_spec.rb +10 -25
  665. data/src/ruby/spec/channel_credentials_spec.rb +11 -26
  666. data/src/ruby/spec/channel_spec.rb +10 -25
  667. data/src/ruby/spec/client_auth_spec.rb +10 -25
  668. data/src/ruby/spec/client_server_spec.rb +66 -25
  669. data/src/ruby/spec/compression_options_spec.rb +10 -25
  670. data/src/ruby/spec/error_sanity_spec.rb +10 -25
  671. data/src/ruby/spec/generic/active_call_spec.rb +10 -25
  672. data/src/ruby/spec/generic/client_stub_spec.rb +146 -35
  673. data/src/ruby/spec/generic/rpc_desc_spec.rb +10 -25
  674. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +10 -25
  675. data/src/ruby/spec/generic/rpc_server_spec.rb +124 -34
  676. data/src/ruby/spec/generic/service_spec.rb +10 -25
  677. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +10 -25
  678. data/src/ruby/spec/pb/health/checker_spec.rb +10 -25
  679. data/src/ruby/spec/server_credentials_spec.rb +10 -25
  680. data/src/ruby/spec/server_spec.rb +10 -25
  681. data/src/ruby/spec/spec_helper.rb +10 -25
  682. data/src/ruby/spec/time_consts_spec.rb +10 -25
  683. data/third_party/boringssl/crypto/aes/key_wrap.c +138 -0
  684. data/third_party/boringssl/crypto/asn1/a_bitstr.c +6 -3
  685. data/third_party/boringssl/crypto/asn1/a_enum.c +4 -1
  686. data/third_party/boringssl/crypto/asn1/a_gentm.c +20 -15
  687. data/third_party/boringssl/crypto/asn1/a_int.c +7 -4
  688. data/third_party/boringssl/crypto/asn1/a_object.c +5 -2
  689. data/third_party/boringssl/crypto/asn1/a_time.c +0 -1
  690. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -2
  691. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -2
  692. data/third_party/boringssl/crypto/asn1/asn1_locl.h +35 -0
  693. data/third_party/boringssl/crypto/asn1/tasn_dec.c +3 -1
  694. data/third_party/boringssl/crypto/asn1/tasn_enc.c +6 -3
  695. data/third_party/boringssl/crypto/asn1/tasn_new.c +12 -7
  696. data/third_party/boringssl/crypto/asn1/tasn_utl.c +22 -8
  697. data/third_party/boringssl/crypto/{time_support.c → asn1/time_support.c} +1 -1
  698. data/third_party/boringssl/crypto/asn1/x_long.c +5 -2
  699. data/third_party/boringssl/crypto/base64/base64.c +7 -5
  700. data/third_party/boringssl/crypto/bio/bio.c +24 -10
  701. data/third_party/boringssl/crypto/bio/bio_mem.c +12 -10
  702. data/third_party/boringssl/crypto/bio/connect.c +7 -18
  703. data/third_party/boringssl/crypto/bio/fd.c +3 -6
  704. data/third_party/boringssl/crypto/bio/file.c +6 -6
  705. data/third_party/boringssl/crypto/bio/hexdump.c +4 -2
  706. data/third_party/boringssl/crypto/bio/pair.c +30 -344
  707. data/third_party/boringssl/crypto/bio/socket.c +6 -7
  708. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -3
  709. data/third_party/boringssl/crypto/bn/add.c +1 -1
  710. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +11 -10
  711. data/third_party/boringssl/crypto/bn/bn.c +6 -20
  712. data/third_party/boringssl/crypto/bn/cmp.c +14 -0
  713. data/third_party/boringssl/crypto/bn/convert.c +73 -2
  714. data/third_party/boringssl/crypto/bn/ctx.c +3 -1
  715. data/third_party/boringssl/crypto/bn/div.c +108 -51
  716. data/third_party/boringssl/crypto/bn/exponentiation.c +15 -33
  717. data/third_party/boringssl/crypto/bn/gcd.c +29 -22
  718. data/third_party/boringssl/crypto/bn/generic.c +71 -67
  719. data/third_party/boringssl/crypto/bn/internal.h +19 -6
  720. data/third_party/boringssl/crypto/bn/kronecker.c +1 -0
  721. data/third_party/boringssl/crypto/bn/montgomery.c +9 -10
  722. data/third_party/boringssl/crypto/bn/montgomery_inv.c +47 -0
  723. data/third_party/boringssl/crypto/bn/mul.c +11 -9
  724. data/third_party/boringssl/crypto/bn/random.c +6 -3
  725. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -65
  726. data/third_party/boringssl/crypto/bn/rsaz_exp.h +0 -3
  727. data/third_party/boringssl/crypto/bn/shift.c +9 -1
  728. data/third_party/boringssl/crypto/bn/sqrt.c +3 -1
  729. data/third_party/boringssl/crypto/buf/buf.c +6 -4
  730. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +2 -1
  731. data/third_party/boringssl/crypto/bytestring/ber.c +2 -1
  732. data/third_party/boringssl/crypto/bytestring/cbb.c +9 -7
  733. data/third_party/boringssl/crypto/bytestring/cbs.c +54 -2
  734. data/third_party/boringssl/crypto/chacha/chacha.c +1 -1
  735. data/third_party/boringssl/crypto/cipher/aead.c +3 -3
  736. data/third_party/boringssl/crypto/cipher/cipher.c +18 -13
  737. data/third_party/boringssl/crypto/cipher/e_aes.c +335 -281
  738. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +113 -137
  739. data/third_party/boringssl/crypto/cipher/e_null.c +2 -1
  740. data/third_party/boringssl/crypto/cipher/e_rc2.c +54 -49
  741. data/third_party/boringssl/crypto/cipher/e_ssl3.c +4 -3
  742. data/third_party/boringssl/crypto/cipher/e_tls.c +5 -5
  743. data/third_party/boringssl/crypto/cipher/tls_cbc.c +41 -112
  744. data/third_party/boringssl/crypto/cmac/cmac.c +6 -4
  745. data/third_party/boringssl/crypto/conf/conf.c +6 -3
  746. data/third_party/boringssl/crypto/cpu-arm-linux.c +2 -2
  747. data/third_party/boringssl/crypto/curve25519/curve25519.c +28 -34
  748. data/third_party/boringssl/crypto/curve25519/spake25519.c +7 -6
  749. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +2 -1
  750. data/third_party/boringssl/crypto/des/des.c +1 -1
  751. data/third_party/boringssl/crypto/des/internal.h +58 -46
  752. data/third_party/boringssl/crypto/dh/dh.c +4 -8
  753. data/third_party/boringssl/crypto/digest/digest.c +5 -2
  754. data/third_party/boringssl/crypto/digest/digests.c +70 -33
  755. data/third_party/boringssl/crypto/digest/md32_common.h +39 -27
  756. data/third_party/boringssl/crypto/dsa/dsa.c +11 -19
  757. data/third_party/boringssl/crypto/ec/ec.c +1 -1
  758. data/third_party/boringssl/crypto/ec/ec_asn1.c +3 -2
  759. data/third_party/boringssl/crypto/ec/ec_key.c +1 -1
  760. data/third_party/boringssl/crypto/ec/ec_montgomery.c +6 -11
  761. data/third_party/boringssl/crypto/ec/oct.c +2 -14
  762. data/third_party/boringssl/crypto/ec/p224-64.c +78 -122
  763. data/third_party/boringssl/crypto/ec/p256-64.c +93 -133
  764. data/third_party/boringssl/crypto/ec/p256-x86_64.c +48 -61
  765. data/third_party/boringssl/crypto/ec/p256-x86_64.h +113 -0
  766. data/third_party/boringssl/crypto/ec/simple.c +2 -1
  767. data/third_party/boringssl/crypto/ec/wnaf.c +52 -43
  768. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -2
  769. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +17 -16
  770. data/third_party/boringssl/crypto/engine/engine.c +3 -1
  771. data/third_party/boringssl/crypto/err/err.c +5 -5
  772. data/third_party/boringssl/crypto/evp/evp.c +1 -1
  773. data/third_party/boringssl/crypto/evp/evp_asn1.c +1 -1
  774. data/third_party/boringssl/crypto/evp/evp_ctx.c +23 -29
  775. data/third_party/boringssl/crypto/evp/p_ec.c +2 -1
  776. data/third_party/boringssl/crypto/evp/p_rsa.c +9 -3
  777. data/third_party/boringssl/crypto/evp/pbkdf.c +3 -1
  778. data/third_party/boringssl/crypto/hkdf/hkdf.c +3 -1
  779. data/third_party/boringssl/crypto/hmac/hmac.c +4 -2
  780. data/third_party/boringssl/crypto/internal.h +81 -0
  781. data/third_party/boringssl/crypto/lhash/lhash.c +7 -13
  782. data/third_party/boringssl/crypto/md4/md4.c +20 -18
  783. data/third_party/boringssl/crypto/md5/md5.c +31 -21
  784. data/third_party/boringssl/crypto/mem.c +4 -10
  785. data/third_party/boringssl/crypto/modes/cbc.c +2 -6
  786. data/third_party/boringssl/crypto/modes/cfb.c +2 -2
  787. data/third_party/boringssl/crypto/modes/ctr.c +1 -1
  788. data/third_party/boringssl/crypto/modes/gcm.c +117 -334
  789. data/third_party/boringssl/crypto/modes/internal.h +107 -84
  790. data/third_party/boringssl/crypto/modes/ofb.c +3 -3
  791. data/third_party/boringssl/crypto/modes/polyval.c +94 -0
  792. data/third_party/boringssl/crypto/obj/obj.c +13 -8
  793. data/third_party/boringssl/crypto/obj/obj_dat.h +6109 -5187
  794. data/third_party/boringssl/crypto/obj/obj_xref.c +55 -57
  795. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -3
  796. data/third_party/boringssl/crypto/pkcs8/internal.h +27 -8
  797. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +137 -352
  798. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +371 -364
  799. data/third_party/boringssl/crypto/poly1305/poly1305.c +12 -18
  800. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +2 -2
  801. data/third_party/boringssl/crypto/{newhope/reduce.c → pool/internal.h} +24 -21
  802. data/third_party/boringssl/crypto/pool/pool.c +200 -0
  803. data/third_party/boringssl/crypto/rand/deterministic.c +6 -5
  804. data/third_party/boringssl/crypto/rand/fuchsia.c +43 -0
  805. data/third_party/boringssl/crypto/rand/rand.c +7 -7
  806. data/third_party/boringssl/crypto/rand/urandom.c +136 -22
  807. data/third_party/boringssl/crypto/rand/windows.c +2 -2
  808. data/third_party/boringssl/crypto/rsa/blinding.c +2 -1
  809. data/third_party/boringssl/crypto/rsa/padding.c +11 -11
  810. data/third_party/boringssl/crypto/rsa/rsa.c +4 -4
  811. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +7 -1
  812. data/third_party/boringssl/crypto/rsa/rsa_impl.c +41 -80
  813. data/third_party/boringssl/crypto/sha/sha1-altivec.c +346 -0
  814. data/third_party/boringssl/crypto/sha/sha1.c +60 -42
  815. data/third_party/boringssl/crypto/sha/sha256.c +4 -2
  816. data/third_party/boringssl/crypto/sha/sha512.c +9 -7
  817. data/third_party/boringssl/crypto/stack/stack.c +10 -7
  818. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  819. data/third_party/boringssl/crypto/thread_win.c +2 -2
  820. data/third_party/boringssl/crypto/x509/a_verify.c +1 -1
  821. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -1
  822. data/third_party/boringssl/crypto/x509/by_dir.c +1 -1
  823. data/third_party/boringssl/crypto/x509/t_x509.c +78 -38
  824. data/third_party/boringssl/crypto/x509/x509_cmp.c +8 -5
  825. data/third_party/boringssl/crypto/x509/x509_lu.c +6 -1
  826. data/third_party/boringssl/crypto/x509/x509_obj.c +4 -1
  827. data/third_party/boringssl/crypto/x509/x509_vfy.c +42 -8
  828. data/third_party/boringssl/crypto/x509/x509_vpm.c +8 -6
  829. data/third_party/boringssl/crypto/x509/x509name.c +4 -1
  830. data/third_party/boringssl/crypto/x509/x_crl.c +4 -2
  831. data/third_party/boringssl/crypto/x509/x_name.c +23 -13
  832. data/third_party/boringssl/crypto/x509/x_pkey.c +4 -1
  833. data/third_party/boringssl/crypto/x509/x_x509.c +42 -3
  834. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  835. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  836. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +1 -1
  837. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +4 -1
  838. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +4 -1
  839. data/third_party/boringssl/crypto/x509v3/v3_pci.c +6 -3
  840. data/third_party/boringssl/crypto/x509v3/v3_purp.c +13 -21
  841. data/third_party/boringssl/crypto/x509v3/v3_utl.c +19 -33
  842. data/third_party/boringssl/include/openssl/aead.h +9 -20
  843. data/third_party/boringssl/include/openssl/aes.h +21 -9
  844. data/third_party/boringssl/include/openssl/asn1.h +9 -1
  845. data/third_party/boringssl/include/openssl/base.h +33 -6
  846. data/third_party/boringssl/include/openssl/bio.h +10 -103
  847. data/third_party/boringssl/include/openssl/bn.h +58 -42
  848. data/third_party/boringssl/include/openssl/bytestring.h +17 -0
  849. data/third_party/boringssl/include/openssl/cipher.h +4 -3
  850. data/third_party/boringssl/include/openssl/conf.h +4 -1
  851. data/third_party/boringssl/include/openssl/curve25519.h +13 -0
  852. data/third_party/boringssl/include/openssl/digest.h +5 -3
  853. data/third_party/boringssl/include/openssl/dsa.h +5 -5
  854. data/third_party/boringssl/include/openssl/ec.h +2 -2
  855. data/third_party/boringssl/include/openssl/ecdh.h +3 -4
  856. data/third_party/boringssl/include/openssl/ecdsa.h +10 -10
  857. data/third_party/boringssl/include/openssl/err.h +5 -5
  858. data/third_party/boringssl/include/openssl/evp.h +11 -7
  859. data/third_party/boringssl/include/openssl/lhash.h +2 -3
  860. data/third_party/boringssl/include/openssl/lhash_macros.h +56 -14
  861. data/third_party/boringssl/include/openssl/nid.h +2949 -2916
  862. data/third_party/boringssl/include/openssl/obj.h +1 -1
  863. data/third_party/boringssl/include/openssl/pkcs8.h +21 -42
  864. data/third_party/boringssl/include/openssl/pool.h +87 -0
  865. data/third_party/boringssl/include/openssl/rand.h +1 -1
  866. data/third_party/boringssl/include/openssl/rsa.h +4 -2
  867. data/third_party/boringssl/include/openssl/sha.h +0 -4
  868. data/third_party/boringssl/include/openssl/ssl.h +327 -662
  869. data/third_party/boringssl/include/openssl/ssl3.h +1 -21
  870. data/third_party/boringssl/include/openssl/stack.h +1 -0
  871. data/third_party/boringssl/include/openssl/stack_macros.h +85 -0
  872. data/third_party/boringssl/include/openssl/tls1.h +23 -52
  873. data/third_party/boringssl/include/openssl/type_check.h +4 -0
  874. data/third_party/boringssl/include/openssl/x509.h +10 -59
  875. data/third_party/boringssl/include/openssl/x509_vfy.h +7 -1
  876. data/third_party/boringssl/include/openssl/x509v3.h +4 -4
  877. data/third_party/boringssl/ssl/bio_ssl.c +175 -0
  878. data/third_party/boringssl/ssl/custom_extensions.c +24 -21
  879. data/third_party/boringssl/ssl/d1_both.c +259 -289
  880. data/third_party/boringssl/ssl/d1_lib.c +8 -20
  881. data/third_party/boringssl/ssl/d1_pkt.c +6 -15
  882. data/third_party/boringssl/ssl/dtls_method.c +22 -8
  883. data/third_party/boringssl/ssl/dtls_record.c +27 -2
  884. data/third_party/boringssl/ssl/handshake_client.c +460 -579
  885. data/third_party/boringssl/ssl/handshake_server.c +662 -644
  886. data/third_party/boringssl/ssl/internal.h +1009 -375
  887. data/third_party/boringssl/ssl/s3_both.c +312 -162
  888. data/third_party/boringssl/ssl/s3_lib.c +12 -128
  889. data/third_party/boringssl/ssl/s3_pkt.c +22 -30
  890. data/third_party/boringssl/ssl/ssl_aead_ctx.c +28 -22
  891. data/third_party/boringssl/ssl/ssl_asn1.c +210 -114
  892. data/third_party/boringssl/ssl/ssl_buffer.c +2 -1
  893. data/third_party/boringssl/ssl/ssl_cert.c +417 -219
  894. data/third_party/boringssl/ssl/ssl_cipher.c +191 -393
  895. data/third_party/boringssl/ssl/ssl_ecdh.c +19 -164
  896. data/third_party/boringssl/ssl/ssl_file.c +0 -11
  897. data/third_party/boringssl/ssl/ssl_lib.c +325 -652
  898. data/third_party/boringssl/ssl/{ssl_rsa.c → ssl_privkey.c} +21 -131
  899. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +76 -0
  900. data/third_party/boringssl/ssl/ssl_session.c +206 -95
  901. data/third_party/boringssl/ssl/ssl_stat.c +18 -84
  902. data/third_party/boringssl/ssl/{s3_enc.c → ssl_transcript.c} +150 -157
  903. data/third_party/boringssl/ssl/ssl_x509.c +815 -0
  904. data/third_party/boringssl/ssl/t1_enc.c +188 -174
  905. data/third_party/boringssl/ssl/t1_lib.c +1064 -764
  906. data/third_party/boringssl/ssl/tls13_both.c +290 -96
  907. data/third_party/boringssl/ssl/tls13_client.c +344 -314
  908. data/third_party/boringssl/ssl/tls13_enc.c +239 -200
  909. data/third_party/boringssl/ssl/tls13_server.c +374 -366
  910. data/third_party/boringssl/ssl/tls_method.c +40 -5
  911. data/third_party/boringssl/ssl/tls_record.c +166 -71
  912. metadata +39 -25
  913. data/src/core/lib/iomgr/workqueue.h +0 -87
  914. data/src/core/lib/iomgr/workqueue_uv.c +0 -65
  915. data/src/core/lib/iomgr/workqueue_uv.h +0 -37
  916. data/src/core/lib/iomgr/workqueue_windows.c +0 -63
  917. data/src/core/lib/iomgr/workqueue_windows.h +0 -37
  918. data/third_party/boringssl/crypto/bio/buffer.c +0 -496
  919. data/third_party/boringssl/crypto/newhope/error_correction.c +0 -131
  920. data/third_party/boringssl/crypto/newhope/internal.h +0 -71
  921. data/third_party/boringssl/crypto/newhope/newhope.c +0 -174
  922. data/third_party/boringssl/crypto/newhope/ntt.c +0 -148
  923. data/third_party/boringssl/crypto/newhope/poly.c +0 -183
  924. data/third_party/boringssl/crypto/newhope/precomp.c +0 -306
  925. data/third_party/boringssl/crypto/obj/obj_xref.h +0 -96
  926. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +0 -151
  927. data/third_party/boringssl/include/openssl/newhope.h +0 -158
  928. data/third_party/boringssl/include/openssl/time_support.h +0 -91
@@ -20,6 +20,7 @@
20
20
  #include <string.h>
21
21
 
22
22
  #include "internal.h"
23
+ #include "../internal.h"
23
24
 
24
25
 
25
26
  void CBS_init(CBS *cbs, const uint8_t *data, size_t len) {
@@ -76,7 +77,7 @@ int CBS_strdup(const CBS *cbs, char **out_ptr) {
76
77
  }
77
78
 
78
79
  int CBS_contains_zero_byte(const CBS *cbs) {
79
- return memchr(cbs->data, 0, cbs->len) != NULL;
80
+ return OPENSSL_memchr(cbs->data, 0, cbs->len) != NULL;
80
81
  }
81
82
 
82
83
  int CBS_mem_equal(const CBS *cbs, const uint8_t *data, size_t len) {
@@ -150,7 +151,7 @@ int CBS_copy_bytes(CBS *cbs, uint8_t *out, size_t len) {
150
151
  if (!cbs_get(cbs, &v, len)) {
151
152
  return 0;
152
153
  }
153
- memcpy(out, v, len);
154
+ OPENSSL_memcpy(out, v, len);
154
155
  return 1;
155
156
  }
156
157
 
@@ -262,6 +263,20 @@ static int cbs_get_any_asn1_element(CBS *cbs, CBS *out, unsigned *out_tag,
262
263
  return CBS_get_bytes(cbs, out, len);
263
264
  }
264
265
 
266
+ int CBS_get_any_asn1(CBS *cbs, CBS *out, unsigned *out_tag) {
267
+ size_t header_len;
268
+ if (!CBS_get_any_asn1_element(cbs, out, out_tag, &header_len)) {
269
+ return 0;
270
+ }
271
+
272
+ if (!CBS_skip(out, header_len)) {
273
+ assert(0);
274
+ return 0;
275
+ }
276
+
277
+ return 1;
278
+ }
279
+
265
280
  int CBS_get_any_asn1_element(CBS *cbs, CBS *out, unsigned *out_tag,
266
281
  size_t *out_header_len) {
267
282
  return cbs_get_any_asn1_element(cbs, out, out_tag, out_header_len,
@@ -437,3 +452,40 @@ int CBS_get_optional_asn1_bool(CBS *cbs, int *out, unsigned tag,
437
452
  }
438
453
  return 1;
439
454
  }
455
+
456
+ int CBS_is_valid_asn1_bitstring(const CBS *cbs) {
457
+ CBS in = *cbs;
458
+ uint8_t num_unused_bits;
459
+ if (!CBS_get_u8(&in, &num_unused_bits) ||
460
+ num_unused_bits > 7) {
461
+ return 0;
462
+ }
463
+
464
+ if (num_unused_bits == 0) {
465
+ return 1;
466
+ }
467
+
468
+ /* All num_unused_bits bits must exist and be zeros. */
469
+ uint8_t last;
470
+ if (!CBS_get_last_u8(&in, &last) ||
471
+ (last & ((1 << num_unused_bits) - 1)) != 0) {
472
+ return 0;
473
+ }
474
+
475
+ return 1;
476
+ }
477
+
478
+ int CBS_asn1_bitstring_has_bit(const CBS *cbs, unsigned bit) {
479
+ if (!CBS_is_valid_asn1_bitstring(cbs)) {
480
+ return 0;
481
+ }
482
+
483
+ const unsigned byte_num = (bit >> 3) + 1;
484
+ const unsigned bit_num = 7 - (bit & 7);
485
+
486
+ /* Unused bits are zero, and this function does not distinguish between
487
+ * missing and unset bits. Thus it is sufficient to do a byte-level length
488
+ * check. */
489
+ return byte_num < CBS_len(cbs) &&
490
+ (CBS_data(cbs)[byte_num] & (1 << bit_num)) != 0;
491
+ }
@@ -96,7 +96,7 @@ static void chacha_core(uint8_t output[64], const uint32_t input[16]) {
96
96
  uint32_t x[16];
97
97
  int i;
98
98
 
99
- memcpy(x, input, sizeof(uint32_t) * 16);
99
+ OPENSSL_memcpy(x, input, sizeof(uint32_t) * 16);
100
100
  for (i = 20; i > 0; i -= 2) {
101
101
  QUARTERROUND(0, 4, 8, 12)
102
102
  QUARTERROUND(1, 5, 9, 13)
@@ -32,7 +32,7 @@ size_t EVP_AEAD_max_overhead(const EVP_AEAD *aead) { return aead->overhead; }
32
32
  size_t EVP_AEAD_max_tag_len(const EVP_AEAD *aead) { return aead->max_tag_len; }
33
33
 
34
34
  void EVP_AEAD_CTX_zero(EVP_AEAD_CTX *ctx) {
35
- memset(ctx, 0, sizeof(EVP_AEAD_CTX));
35
+ OPENSSL_memset(ctx, 0, sizeof(EVP_AEAD_CTX));
36
36
  }
37
37
 
38
38
  int EVP_AEAD_CTX_init(EVP_AEAD_CTX *ctx, const EVP_AEAD *aead,
@@ -116,7 +116,7 @@ int EVP_AEAD_CTX_seal(const EVP_AEAD_CTX *ctx, uint8_t *out, size_t *out_len,
116
116
  error:
117
117
  /* In the event of an error, clear the output buffer so that a caller
118
118
  * that doesn't check the return value doesn't send raw data. */
119
- memset(out, 0, max_out_len);
119
+ OPENSSL_memset(out, 0, max_out_len);
120
120
  *out_len = 0;
121
121
  return 0;
122
122
  }
@@ -139,7 +139,7 @@ error:
139
139
  /* In the event of an error, clear the output buffer so that a caller
140
140
  * that doesn't check the return value doesn't try and process bad
141
141
  * data. */
142
- memset(out, 0, max_out_len);
142
+ OPENSSL_memset(out, 0, max_out_len);
143
143
  *out_len = 0;
144
144
  return 0;
145
145
  }
@@ -64,6 +64,7 @@
64
64
  #include <openssl/nid.h>
65
65
 
66
66
  #include "internal.h"
67
+ #include "../internal.h"
67
68
 
68
69
 
69
70
  const EVP_CIPHER *EVP_get_cipherbynid(int nid) {
@@ -88,7 +89,7 @@ const EVP_CIPHER *EVP_get_cipherbynid(int nid) {
88
89
  }
89
90
 
90
91
  void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx) {
91
- memset(ctx, 0, sizeof(EVP_CIPHER_CTX));
92
+ OPENSSL_memset(ctx, 0, sizeof(EVP_CIPHER_CTX));
92
93
  }
93
94
 
94
95
  EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void) {
@@ -108,7 +109,7 @@ int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c) {
108
109
  }
109
110
  OPENSSL_free(c->cipher_data);
110
111
 
111
- memset(c, 0, sizeof(EVP_CIPHER_CTX));
112
+ OPENSSL_memset(c, 0, sizeof(EVP_CIPHER_CTX));
112
113
  return 1;
113
114
  }
114
115
 
@@ -126,19 +127,23 @@ int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in) {
126
127
  }
127
128
 
128
129
  EVP_CIPHER_CTX_cleanup(out);
129
- memcpy(out, in, sizeof(EVP_CIPHER_CTX));
130
+ OPENSSL_memcpy(out, in, sizeof(EVP_CIPHER_CTX));
130
131
 
131
132
  if (in->cipher_data && in->cipher->ctx_size) {
132
133
  out->cipher_data = OPENSSL_malloc(in->cipher->ctx_size);
133
134
  if (!out->cipher_data) {
135
+ out->cipher = NULL;
134
136
  OPENSSL_PUT_ERROR(CIPHER, ERR_R_MALLOC_FAILURE);
135
137
  return 0;
136
138
  }
137
- memcpy(out->cipher_data, in->cipher_data, in->cipher->ctx_size);
139
+ OPENSSL_memcpy(out->cipher_data, in->cipher_data, in->cipher->ctx_size);
138
140
  }
139
141
 
140
142
  if (in->cipher->flags & EVP_CIPH_CUSTOM_COPY) {
141
- return in->cipher->ctrl((EVP_CIPHER_CTX *)in, EVP_CTRL_COPY, 0, out);
143
+ if (!in->cipher->ctrl((EVP_CIPHER_CTX *)in, EVP_CTRL_COPY, 0, out)) {
144
+ out->cipher = NULL;
145
+ return 0;
146
+ }
142
147
  }
143
148
 
144
149
  return 1;
@@ -210,9 +215,9 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
210
215
  case EVP_CIPH_CBC_MODE:
211
216
  assert(EVP_CIPHER_CTX_iv_length(ctx) <= sizeof(ctx->iv));
212
217
  if (iv) {
213
- memcpy(ctx->oiv, iv, EVP_CIPHER_CTX_iv_length(ctx));
218
+ OPENSSL_memcpy(ctx->oiv, iv, EVP_CIPHER_CTX_iv_length(ctx));
214
219
  }
215
- memcpy(ctx->iv, ctx->oiv, EVP_CIPHER_CTX_iv_length(ctx));
220
+ OPENSSL_memcpy(ctx->iv, ctx->oiv, EVP_CIPHER_CTX_iv_length(ctx));
216
221
  break;
217
222
 
218
223
  case EVP_CIPH_CTR_MODE:
@@ -220,7 +225,7 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
220
225
  ctx->num = 0;
221
226
  /* Don't reuse IV for CTR mode */
222
227
  if (iv) {
223
- memcpy(ctx->iv, iv, EVP_CIPHER_CTX_iv_length(ctx));
228
+ OPENSSL_memcpy(ctx->iv, iv, EVP_CIPHER_CTX_iv_length(ctx));
224
229
  }
225
230
  break;
226
231
 
@@ -285,13 +290,13 @@ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
285
290
  assert(bl <= (int)sizeof(ctx->buf));
286
291
  if (i != 0) {
287
292
  if (bl - i > in_len) {
288
- memcpy(&ctx->buf[i], in, in_len);
293
+ OPENSSL_memcpy(&ctx->buf[i], in, in_len);
289
294
  ctx->buf_len += in_len;
290
295
  *out_len = 0;
291
296
  return 1;
292
297
  } else {
293
298
  j = bl - i;
294
- memcpy(&ctx->buf[i], in, j);
299
+ OPENSSL_memcpy(&ctx->buf[i], in, j);
295
300
  if (!ctx->cipher->cipher(ctx, out, ctx->buf, bl)) {
296
301
  return 0;
297
302
  }
@@ -314,7 +319,7 @@ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
314
319
  }
315
320
 
316
321
  if (i != 0) {
317
- memcpy(ctx->buf, &in[in_len], i);
322
+ OPENSSL_memcpy(ctx->buf, &in[in_len], i);
318
323
  }
319
324
  ctx->buf_len = i;
320
325
  return 1;
@@ -393,7 +398,7 @@ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
393
398
  assert(b <= sizeof(ctx->final));
394
399
 
395
400
  if (ctx->final_used) {
396
- memcpy(out, ctx->final, b);
401
+ OPENSSL_memcpy(out, ctx->final, b);
397
402
  out += b;
398
403
  fix_len = 1;
399
404
  } else {
@@ -409,7 +414,7 @@ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
409
414
  if (b > 1 && !ctx->buf_len) {
410
415
  *out_len -= b;
411
416
  ctx->final_used = 1;
412
- memcpy(ctx->final, &out[*out_len], b);
417
+ OPENSSL_memcpy(ctx->final, &out[*out_len], b);
413
418
  } else {
414
419
  ctx->final_used = 0;
415
420
  }
@@ -479,7 +479,7 @@ static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
479
479
  if (gctx->key_set) {
480
480
  CRYPTO_gcm128_setiv(&gctx->gcm, &gctx->ks.ks, iv, gctx->ivlen);
481
481
  } else {
482
- memcpy(gctx->iv, iv, gctx->ivlen);
482
+ OPENSSL_memcpy(gctx->iv, iv, gctx->ivlen);
483
483
  }
484
484
  gctx->iv_set = 1;
485
485
  gctx->iv_gen = 0;
@@ -545,7 +545,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
545
545
  if (arg <= 0 || arg > 16 || c->encrypt) {
546
546
  return 0;
547
547
  }
548
- memcpy(c->buf, ptr, arg);
548
+ OPENSSL_memcpy(c->buf, ptr, arg);
549
549
  gctx->taglen = arg;
550
550
  return 1;
551
551
 
@@ -553,13 +553,13 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
553
553
  if (arg <= 0 || arg > 16 || !c->encrypt || gctx->taglen < 0) {
554
554
  return 0;
555
555
  }
556
- memcpy(ptr, c->buf, arg);
556
+ OPENSSL_memcpy(ptr, c->buf, arg);
557
557
  return 1;
558
558
 
559
559
  case EVP_CTRL_GCM_SET_IV_FIXED:
560
560
  /* Special case: -1 length restores whole IV */
561
561
  if (arg == -1) {
562
- memcpy(gctx->iv, ptr, gctx->ivlen);
562
+ OPENSSL_memcpy(gctx->iv, ptr, gctx->ivlen);
563
563
  gctx->iv_gen = 1;
564
564
  return 1;
565
565
  }
@@ -569,7 +569,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
569
569
  return 0;
570
570
  }
571
571
  if (arg) {
572
- memcpy(gctx->iv, ptr, arg);
572
+ OPENSSL_memcpy(gctx->iv, ptr, arg);
573
573
  }
574
574
  if (c->encrypt && !RAND_bytes(gctx->iv + arg, gctx->ivlen - arg)) {
575
575
  return 0;
@@ -585,7 +585,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
585
585
  if (arg <= 0 || arg > gctx->ivlen) {
586
586
  arg = gctx->ivlen;
587
587
  }
588
- memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
588
+ OPENSSL_memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
589
589
  /* Invocation field will be at least 8 bytes in size and
590
590
  * so no need to check wrap around or increment more than
591
591
  * last 8 bytes. */
@@ -597,7 +597,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
597
597
  if (gctx->iv_gen == 0 || gctx->key_set == 0 || c->encrypt) {
598
598
  return 0;
599
599
  }
600
- memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
600
+ OPENSSL_memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
601
601
  CRYPTO_gcm128_setiv(&gctx->gcm, &gctx->ks.ks, gctx->iv, gctx->ivlen);
602
602
  gctx->iv_set = 1;
603
603
  return 1;
@@ -612,7 +612,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
612
612
  if (!gctx_out->iv) {
613
613
  return 0;
614
614
  }
615
- memcpy(gctx_out->iv, gctx->iv, gctx->ivlen);
615
+ OPENSSL_memcpy(gctx_out->iv, gctx->iv, gctx->ivlen);
616
616
  }
617
617
  return 1;
618
618
  }
@@ -860,7 +860,7 @@ static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
860
860
  if (gctx->key_set) {
861
861
  CRYPTO_gcm128_setiv(&gctx->gcm, &gctx->ks.ks, iv, gctx->ivlen);
862
862
  } else {
863
- memcpy(gctx->iv, iv, gctx->ivlen);
863
+ OPENSSL_memcpy(gctx->iv, iv, gctx->ivlen);
864
864
  }
865
865
  gctx->iv_set = 1;
866
866
  gctx->iv_gen = 0;
@@ -1073,7 +1073,7 @@ static int aead_aes_gcm_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
1073
1073
 
1074
1074
  const AES_KEY *key = &gcm_ctx->ks.ks;
1075
1075
 
1076
- memcpy(&gcm, &gcm_ctx->gcm, sizeof(gcm));
1076
+ OPENSSL_memcpy(&gcm, &gcm_ctx->gcm, sizeof(gcm));
1077
1077
  CRYPTO_gcm128_setiv(&gcm, key, nonce, nonce_len);
1078
1078
 
1079
1079
  if (ad_len > 0 && !CRYPTO_gcm128_aad(&gcm, ad, ad_len)) {
@@ -1120,7 +1120,7 @@ static int aead_aes_gcm_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
1120
1120
 
1121
1121
  const AES_KEY *key = &gcm_ctx->ks.ks;
1122
1122
 
1123
- memcpy(&gcm, &gcm_ctx->gcm, sizeof(gcm));
1123
+ OPENSSL_memcpy(&gcm, &gcm_ctx->gcm, sizeof(gcm));
1124
1124
  CRYPTO_gcm128_setiv(&gcm, key, nonce, nonce_len);
1125
1125
 
1126
1126
  if (!CRYPTO_gcm128_aad(&gcm, ad, ad_len)) {
@@ -1179,266 +1179,6 @@ const EVP_AEAD *EVP_aead_aes_128_gcm(void) { return &aead_aes_128_gcm; }
1179
1179
  const EVP_AEAD *EVP_aead_aes_256_gcm(void) { return &aead_aes_256_gcm; }
1180
1180
 
1181
1181
 
1182
- /* AES Key Wrap is specified in
1183
- * http://csrc.nist.gov/groups/ST/toolkit/documents/kms/key-wrap.pdf
1184
- * or https://tools.ietf.org/html/rfc3394 */
1185
-
1186
- struct aead_aes_key_wrap_ctx {
1187
- uint8_t key[32];
1188
- unsigned key_bits;
1189
- };
1190
-
1191
- static int aead_aes_key_wrap_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
1192
- size_t key_len, size_t tag_len) {
1193
- struct aead_aes_key_wrap_ctx *kw_ctx;
1194
- const size_t key_bits = key_len * 8;
1195
-
1196
- if (key_bits != 128 && key_bits != 256) {
1197
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
1198
- return 0; /* EVP_AEAD_CTX_init should catch this. */
1199
- }
1200
-
1201
- if (tag_len == EVP_AEAD_DEFAULT_TAG_LENGTH) {
1202
- tag_len = 8;
1203
- }
1204
-
1205
- if (tag_len != 8) {
1206
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_TAG_SIZE);
1207
- return 0;
1208
- }
1209
-
1210
- kw_ctx = OPENSSL_malloc(sizeof(struct aead_aes_key_wrap_ctx));
1211
- if (kw_ctx == NULL) {
1212
- OPENSSL_PUT_ERROR(CIPHER, ERR_R_MALLOC_FAILURE);
1213
- return 0;
1214
- }
1215
-
1216
- memcpy(kw_ctx->key, key, key_len);
1217
- kw_ctx->key_bits = key_bits;
1218
-
1219
- ctx->aead_state = kw_ctx;
1220
- return 1;
1221
- }
1222
-
1223
- static void aead_aes_key_wrap_cleanup(EVP_AEAD_CTX *ctx) {
1224
- struct aead_aes_key_wrap_ctx *kw_ctx = ctx->aead_state;
1225
- OPENSSL_cleanse(kw_ctx, sizeof(struct aead_aes_key_wrap_ctx));
1226
- OPENSSL_free(kw_ctx);
1227
- }
1228
-
1229
- /* kDefaultAESKeyWrapNonce is the default nonce value given in 2.2.3.1. */
1230
- static const uint8_t kDefaultAESKeyWrapNonce[8] = {0xa6, 0xa6, 0xa6, 0xa6,
1231
- 0xa6, 0xa6, 0xa6, 0xa6};
1232
-
1233
-
1234
- static int aead_aes_key_wrap_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
1235
- size_t *out_len, size_t max_out_len,
1236
- const uint8_t *nonce, size_t nonce_len,
1237
- const uint8_t *in, size_t in_len,
1238
- const uint8_t *ad, size_t ad_len) {
1239
- const struct aead_aes_key_wrap_ctx *kw_ctx = ctx->aead_state;
1240
- union {
1241
- double align;
1242
- AES_KEY ks;
1243
- } ks;
1244
- /* Variables in this function match up with the variables in the second half
1245
- * of section 2.2.1. */
1246
- unsigned i, j, n;
1247
- uint8_t A[AES_BLOCK_SIZE];
1248
-
1249
- if (ad_len != 0) {
1250
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_AD_SIZE);
1251
- return 0;
1252
- }
1253
-
1254
- if (nonce_len == 0) {
1255
- nonce = kDefaultAESKeyWrapNonce;
1256
- nonce_len = sizeof(kDefaultAESKeyWrapNonce);
1257
- }
1258
-
1259
- if (nonce_len != 8) {
1260
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
1261
- return 0;
1262
- }
1263
-
1264
- if (in_len % 8 != 0) {
1265
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_INPUT_SIZE);
1266
- return 0;
1267
- }
1268
-
1269
- /* The code below only handles a 32-bit |t| thus 6*|n| must be less than
1270
- * 2^32, where |n| is |in_len| / 8. So in_len < 4/3 * 2^32 and we
1271
- * conservatively cap it to 2^32-16 to stop 32-bit platforms complaining that
1272
- * a comparison is always true. */
1273
- if (in_len > 0xfffffff0) {
1274
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
1275
- return 0;
1276
- }
1277
-
1278
- n = in_len / 8;
1279
-
1280
- if (n < 2) {
1281
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_INPUT_SIZE);
1282
- return 0;
1283
- }
1284
-
1285
- if (in_len + 8 < in_len) {
1286
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
1287
- return 0;
1288
- }
1289
-
1290
- if (max_out_len < in_len + 8) {
1291
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
1292
- return 0;
1293
- }
1294
-
1295
- if (AES_set_encrypt_key(kw_ctx->key, kw_ctx->key_bits, &ks.ks) < 0) {
1296
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_AES_KEY_SETUP_FAILED);
1297
- return 0;
1298
- }
1299
-
1300
- memmove(out + 8, in, in_len);
1301
- memcpy(A, nonce, 8);
1302
-
1303
- for (j = 0; j < 6; j++) {
1304
- for (i = 1; i <= n; i++) {
1305
- uint32_t t;
1306
-
1307
- memcpy(A + 8, out + 8 * i, 8);
1308
- AES_encrypt(A, A, &ks.ks);
1309
- t = n * j + i;
1310
- A[7] ^= t & 0xff;
1311
- A[6] ^= (t >> 8) & 0xff;
1312
- A[5] ^= (t >> 16) & 0xff;
1313
- A[4] ^= (t >> 24) & 0xff;
1314
- memcpy(out + 8 * i, A + 8, 8);
1315
- }
1316
- }
1317
-
1318
- memcpy(out, A, 8);
1319
- *out_len = in_len + 8;
1320
- return 1;
1321
- }
1322
-
1323
- static int aead_aes_key_wrap_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
1324
- size_t *out_len, size_t max_out_len,
1325
- const uint8_t *nonce, size_t nonce_len,
1326
- const uint8_t *in, size_t in_len,
1327
- const uint8_t *ad, size_t ad_len) {
1328
- const struct aead_aes_key_wrap_ctx *kw_ctx = ctx->aead_state;
1329
- union {
1330
- double align;
1331
- AES_KEY ks;
1332
- } ks;
1333
- /* Variables in this function match up with the variables in the second half
1334
- * of section 2.2.1. */
1335
- unsigned i, j, n;
1336
- uint8_t A[AES_BLOCK_SIZE];
1337
-
1338
- if (ad_len != 0) {
1339
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_AD_SIZE);
1340
- return 0;
1341
- }
1342
-
1343
- if (nonce_len == 0) {
1344
- nonce = kDefaultAESKeyWrapNonce;
1345
- nonce_len = sizeof(kDefaultAESKeyWrapNonce);
1346
- }
1347
-
1348
- if (nonce_len != 8) {
1349
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
1350
- return 0;
1351
- }
1352
-
1353
- if (in_len % 8 != 0) {
1354
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_INPUT_SIZE);
1355
- return 0;
1356
- }
1357
-
1358
- /* The code below only handles a 32-bit |t| thus 6*|n| must be less than
1359
- * 2^32, where |n| is |in_len| / 8. So in_len < 4/3 * 2^32 and we
1360
- * conservatively cap it to 2^32-8 to stop 32-bit platforms complaining that
1361
- * a comparison is always true. */
1362
- if (in_len > 0xfffffff8) {
1363
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
1364
- return 0;
1365
- }
1366
-
1367
- if (in_len < 24) {
1368
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
1369
- return 0;
1370
- }
1371
-
1372
- n = (in_len / 8) - 1;
1373
-
1374
- if (max_out_len < in_len - 8) {
1375
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
1376
- return 0;
1377
- }
1378
-
1379
- if (AES_set_decrypt_key(kw_ctx->key, kw_ctx->key_bits, &ks.ks) < 0) {
1380
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_AES_KEY_SETUP_FAILED);
1381
- return 0;
1382
- }
1383
-
1384
- memcpy(A, in, 8);
1385
- memmove(out, in + 8, in_len - 8);
1386
-
1387
- for (j = 5; j < 6; j--) {
1388
- for (i = n; i > 0; i--) {
1389
- uint32_t t;
1390
-
1391
- t = n * j + i;
1392
- A[7] ^= t & 0xff;
1393
- A[6] ^= (t >> 8) & 0xff;
1394
- A[5] ^= (t >> 16) & 0xff;
1395
- A[4] ^= (t >> 24) & 0xff;
1396
- memcpy(A + 8, out + 8 * (i - 1), 8);
1397
- AES_decrypt(A, A, &ks.ks);
1398
- memcpy(out + 8 * (i - 1), A + 8, 8);
1399
- }
1400
- }
1401
-
1402
- if (CRYPTO_memcmp(A, nonce, 8) != 0) {
1403
- OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
1404
- return 0;
1405
- }
1406
-
1407
- *out_len = in_len - 8;
1408
- return 1;
1409
- }
1410
-
1411
- static const EVP_AEAD aead_aes_128_key_wrap = {
1412
- 16, /* key len */
1413
- 8, /* nonce len */
1414
- 8, /* overhead */
1415
- 8, /* max tag length */
1416
- aead_aes_key_wrap_init,
1417
- NULL, /* init_with_direction */
1418
- aead_aes_key_wrap_cleanup,
1419
- aead_aes_key_wrap_seal,
1420
- aead_aes_key_wrap_open,
1421
- NULL, /* get_iv */
1422
- };
1423
-
1424
- static const EVP_AEAD aead_aes_256_key_wrap = {
1425
- 32, /* key len */
1426
- 8, /* nonce len */
1427
- 8, /* overhead */
1428
- 8, /* max tag length */
1429
- aead_aes_key_wrap_init,
1430
- NULL, /* init_with_direction */
1431
- aead_aes_key_wrap_cleanup,
1432
- aead_aes_key_wrap_seal,
1433
- aead_aes_key_wrap_open,
1434
- NULL, /* get_iv */
1435
- };
1436
-
1437
- const EVP_AEAD *EVP_aead_aes_128_key_wrap(void) { return &aead_aes_128_key_wrap; }
1438
-
1439
- const EVP_AEAD *EVP_aead_aes_256_key_wrap(void) { return &aead_aes_256_key_wrap; }
1440
-
1441
-
1442
1182
  #define EVP_AEAD_AES_CTR_HMAC_SHA256_TAG_LEN SHA256_DIGEST_LENGTH
1443
1183
  #define EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN 12
1444
1184
 
@@ -1458,8 +1198,8 @@ static void hmac_init(SHA256_CTX *out_inner, SHA256_CTX *out_outer,
1458
1198
  const uint8_t hmac_key[32]) {
1459
1199
  static const size_t hmac_key_len = 32;
1460
1200
  uint8_t block[SHA256_CBLOCK];
1461
- memcpy(block, hmac_key, hmac_key_len);
1462
- memset(block + hmac_key_len, 0x36, sizeof(block) - hmac_key_len);
1201
+ OPENSSL_memcpy(block, hmac_key, hmac_key_len);
1202
+ OPENSSL_memset(block + hmac_key_len, 0x36, sizeof(block) - hmac_key_len);
1463
1203
 
1464
1204
  unsigned i;
1465
1205
  for (i = 0; i < hmac_key_len; i++) {
@@ -1469,7 +1209,7 @@ static void hmac_init(SHA256_CTX *out_inner, SHA256_CTX *out_outer,
1469
1209
  SHA256_Init(out_inner);
1470
1210
  SHA256_Update(out_inner, block, sizeof(block));
1471
1211
 
1472
- memset(block + hmac_key_len, 0x5c, sizeof(block) - hmac_key_len);
1212
+ OPENSSL_memset(block + hmac_key_len, 0x5c, sizeof(block) - hmac_key_len);
1473
1213
  for (i = 0; i < hmac_key_len; i++) {
1474
1214
  block[i] ^= (0x36 ^ 0x5c);
1475
1215
  }
@@ -1544,7 +1284,7 @@ static void hmac_calculate(uint8_t out[SHA256_DIGEST_LENGTH],
1544
1284
  const uint8_t *nonce, const uint8_t *ciphertext,
1545
1285
  size_t ciphertext_len) {
1546
1286
  SHA256_CTX sha256;
1547
- memcpy(&sha256, inner_init_state, sizeof(sha256));
1287
+ OPENSSL_memcpy(&sha256, inner_init_state, sizeof(sha256));
1548
1288
  hmac_update_uint64(&sha256, ad_len);
1549
1289
  hmac_update_uint64(&sha256, ciphertext_len);
1550
1290
  SHA256_Update(&sha256, nonce, EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN);
@@ -1557,7 +1297,7 @@ static void hmac_calculate(uint8_t out[SHA256_DIGEST_LENGTH],
1557
1297
  SHA256_CBLOCK)) %
1558
1298
  SHA256_CBLOCK;
1559
1299
  uint8_t padding[SHA256_CBLOCK];
1560
- memset(padding, 0, num_padding);
1300
+ OPENSSL_memset(padding, 0, num_padding);
1561
1301
  SHA256_Update(&sha256, padding, num_padding);
1562
1302
 
1563
1303
  SHA256_Update(&sha256, ciphertext, ciphertext_len);
@@ -1565,7 +1305,7 @@ static void hmac_calculate(uint8_t out[SHA256_DIGEST_LENGTH],
1565
1305
  uint8_t inner_digest[SHA256_DIGEST_LENGTH];
1566
1306
  SHA256_Final(inner_digest, &sha256);
1567
1307
 
1568
- memcpy(&sha256, outer_init_state, sizeof(sha256));
1308
+ OPENSSL_memcpy(&sha256, outer_init_state, sizeof(sha256));
1569
1309
  SHA256_Update(&sha256, inner_digest, sizeof(inner_digest));
1570
1310
  SHA256_Final(out, &sha256);
1571
1311
  }
@@ -1577,11 +1317,11 @@ static void aead_aes_ctr_hmac_sha256_crypt(
1577
1317
  * bytes is pointless. However, |CRYPTO_ctr128_encrypt| requires it. */
1578
1318
  uint8_t partial_block_buffer[AES_BLOCK_SIZE];
1579
1319
  unsigned partial_block_offset = 0;
1580
- memset(partial_block_buffer, 0, sizeof(partial_block_buffer));
1320
+ OPENSSL_memset(partial_block_buffer, 0, sizeof(partial_block_buffer));
1581
1321
 
1582
1322
  uint8_t counter[AES_BLOCK_SIZE];
1583
- memcpy(counter, nonce, EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN);
1584
- memset(counter + EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN, 0, 4);
1323
+ OPENSSL_memcpy(counter, nonce, EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN);
1324
+ OPENSSL_memset(counter + EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN, 0, 4);
1585
1325
 
1586
1326
  if (aes_ctx->ctr) {
1587
1327
  CRYPTO_ctr128_encrypt_ctr32(in, out, len, &aes_ctx->ks.ks, counter,
@@ -1624,7 +1364,7 @@ static int aead_aes_ctr_hmac_sha256_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
1624
1364
  uint8_t hmac_result[SHA256_DIGEST_LENGTH];
1625
1365
  hmac_calculate(hmac_result, &aes_ctx->inner_init_state,
1626
1366
  &aes_ctx->outer_init_state, ad, ad_len, nonce, out, in_len);
1627
- memcpy(out + in_len, hmac_result, aes_ctx->tag_len);
1367
+ OPENSSL_memcpy(out + in_len, hmac_result, aes_ctx->tag_len);
1628
1368
  *out_len = in_len + aes_ctx->tag_len;
1629
1369
 
1630
1370
  return 1;
@@ -1706,6 +1446,320 @@ const EVP_AEAD *EVP_aead_aes_256_ctr_hmac_sha256(void) {
1706
1446
  return &aead_aes_256_ctr_hmac_sha256;
1707
1447
  }
1708
1448
 
1449
+ #if !defined(OPENSSL_SMALL)
1450
+
1451
+ #define EVP_AEAD_AES_GCM_SIV_NONCE_LEN 12
1452
+ #define EVP_AEAD_AES_GCM_SIV_TAG_LEN 16
1453
+
1454
+ struct aead_aes_gcm_siv_ctx {
1455
+ union {
1456
+ double align;
1457
+ AES_KEY ks;
1458
+ } ks;
1459
+ block128_f kgk_block;
1460
+ unsigned is_256:1;
1461
+ };
1462
+
1463
+ static int aead_aes_gcm_siv_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
1464
+ size_t key_len, size_t tag_len) {
1465
+ const size_t key_bits = key_len * 8;
1466
+
1467
+ if (key_bits != 128 && key_bits != 256) {
1468
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
1469
+ return 0; /* EVP_AEAD_CTX_init should catch this. */
1470
+ }
1471
+
1472
+ if (tag_len == EVP_AEAD_DEFAULT_TAG_LENGTH) {
1473
+ tag_len = EVP_AEAD_AES_GCM_SIV_TAG_LEN;
1474
+ }
1475
+
1476
+ if (tag_len != EVP_AEAD_AES_GCM_SIV_TAG_LEN) {
1477
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TAG_TOO_LARGE);
1478
+ return 0;
1479
+ }
1480
+
1481
+ struct aead_aes_gcm_siv_ctx *gcm_siv_ctx =
1482
+ OPENSSL_malloc(sizeof(struct aead_aes_gcm_siv_ctx));
1483
+ if (gcm_siv_ctx == NULL) {
1484
+ return 0;
1485
+ }
1486
+ OPENSSL_memset(gcm_siv_ctx, 0, sizeof(struct aead_aes_gcm_siv_ctx));
1487
+
1488
+ if (aesni_capable()) {
1489
+ aesni_set_encrypt_key(key, key_len * 8, &gcm_siv_ctx->ks.ks);
1490
+ gcm_siv_ctx->kgk_block = (block128_f)aesni_encrypt;
1491
+ } else if (hwaes_capable()) {
1492
+ aes_hw_set_encrypt_key(key, key_len * 8, &gcm_siv_ctx->ks.ks);
1493
+ gcm_siv_ctx->kgk_block = (block128_f)aes_hw_encrypt;
1494
+ } else if (vpaes_capable()) {
1495
+ vpaes_set_encrypt_key(key, key_len * 8, &gcm_siv_ctx->ks.ks);
1496
+ gcm_siv_ctx->kgk_block = (block128_f)vpaes_encrypt;
1497
+ } else {
1498
+ AES_set_encrypt_key(key, key_len * 8, &gcm_siv_ctx->ks.ks);
1499
+ gcm_siv_ctx->kgk_block = (block128_f)AES_encrypt;
1500
+ }
1501
+
1502
+ gcm_siv_ctx->is_256 = (key_len == 32);
1503
+ ctx->aead_state = gcm_siv_ctx;
1504
+
1505
+ return 1;
1506
+ }
1507
+
1508
+ static void aead_aes_gcm_siv_cleanup(EVP_AEAD_CTX *ctx) {
1509
+ struct aead_aes_gcm_siv_ctx *gcm_siv_ctx = ctx->aead_state;
1510
+ OPENSSL_cleanse(gcm_siv_ctx, sizeof(struct aead_aes_gcm_siv_ctx));
1511
+ OPENSSL_free(gcm_siv_ctx);
1512
+ }
1513
+
1514
+ /* gcm_siv_crypt encrypts (or decrypts—it's the same thing) |in_len| bytes from
1515
+ * |in| to |out|, using the block function |enc_block| with |key| in counter
1516
+ * mode, starting at |initial_counter|. This differs from the traditional
1517
+ * counter mode code in that the counter is handled little-endian, only the
1518
+ * first four bytes are used and the GCM-SIV tweak to the final byte is
1519
+ * applied. The |in| and |out| pointers may be equal but otherwise must not
1520
+ * alias. */
1521
+ static void gcm_siv_crypt(uint8_t *out, const uint8_t *in, size_t in_len,
1522
+ const uint8_t initial_counter[AES_BLOCK_SIZE],
1523
+ block128_f enc_block, const AES_KEY *key) {
1524
+ union {
1525
+ uint32_t w[4];
1526
+ uint8_t c[16];
1527
+ } counter;
1528
+
1529
+ OPENSSL_memcpy(counter.c, initial_counter, AES_BLOCK_SIZE);
1530
+ counter.c[15] |= 0x80;
1531
+
1532
+ for (size_t done = 0; done < in_len;) {
1533
+ uint8_t keystream[AES_BLOCK_SIZE];
1534
+ enc_block(counter.c, keystream, key);
1535
+ counter.w[0]++;
1536
+
1537
+ size_t todo = AES_BLOCK_SIZE;
1538
+ if (in_len - done < todo) {
1539
+ todo = in_len - done;
1540
+ }
1541
+
1542
+ for (size_t i = 0; i < todo; i++) {
1543
+ out[done + i] = keystream[i] ^ in[done + i];
1544
+ }
1545
+
1546
+ done += todo;
1547
+ }
1548
+ }
1549
+
1550
+ /* gcm_siv_polyval evaluates POLYVAL at |auth_key| on the given plaintext and
1551
+ * AD. The result is written to |out_tag|. */
1552
+ static void gcm_siv_polyval(
1553
+ uint8_t out_tag[16], const uint8_t *in, size_t in_len, const uint8_t *ad,
1554
+ size_t ad_len, const uint8_t auth_key[16],
1555
+ const uint8_t nonce[EVP_AEAD_AES_GCM_SIV_NONCE_LEN]) {
1556
+ struct polyval_ctx polyval_ctx;
1557
+ CRYPTO_POLYVAL_init(&polyval_ctx, auth_key);
1558
+
1559
+ CRYPTO_POLYVAL_update_blocks(&polyval_ctx, ad, ad_len & ~15);
1560
+
1561
+ uint8_t scratch[16];
1562
+ if (ad_len & 15) {
1563
+ OPENSSL_memset(scratch, 0, sizeof(scratch));
1564
+ OPENSSL_memcpy(scratch, &ad[ad_len & ~15], ad_len & 15);
1565
+ CRYPTO_POLYVAL_update_blocks(&polyval_ctx, scratch, sizeof(scratch));
1566
+ }
1567
+
1568
+ CRYPTO_POLYVAL_update_blocks(&polyval_ctx, in, in_len & ~15);
1569
+ if (in_len & 15) {
1570
+ OPENSSL_memset(scratch, 0, sizeof(scratch));
1571
+ OPENSSL_memcpy(scratch, &in[in_len & ~15], in_len & 15);
1572
+ CRYPTO_POLYVAL_update_blocks(&polyval_ctx, scratch, sizeof(scratch));
1573
+ }
1574
+
1575
+ union {
1576
+ uint8_t c[16];
1577
+ struct {
1578
+ uint64_t ad;
1579
+ uint64_t in;
1580
+ } bitlens;
1581
+ } length_block;
1582
+
1583
+ length_block.bitlens.ad = ad_len * 8;
1584
+ length_block.bitlens.in = in_len * 8;
1585
+ CRYPTO_POLYVAL_update_blocks(&polyval_ctx, length_block.c,
1586
+ sizeof(length_block));
1587
+
1588
+ CRYPTO_POLYVAL_finish(&polyval_ctx, out_tag);
1589
+ for (size_t i = 0; i < EVP_AEAD_AES_GCM_SIV_NONCE_LEN; i++) {
1590
+ out_tag[i] ^= nonce[i];
1591
+ }
1592
+ out_tag[15] &= 0x7f;
1593
+ }
1594
+
1595
+ /* gcm_siv_record_keys contains the keys used for a specific GCM-SIV record. */
1596
+ struct gcm_siv_record_keys {
1597
+ uint8_t auth_key[16];
1598
+ union {
1599
+ double align;
1600
+ AES_KEY ks;
1601
+ } enc_key;
1602
+ block128_f enc_block;
1603
+ };
1604
+
1605
+ /* gcm_siv_keys calculates the keys for a specific GCM-SIV record with the
1606
+ * given nonce and writes them to |*out_keys|. */
1607
+ static void gcm_siv_keys(
1608
+ const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx,
1609
+ struct gcm_siv_record_keys *out_keys,
1610
+ const uint8_t nonce[EVP_AEAD_AES_GCM_SIV_NONCE_LEN]) {
1611
+ const AES_KEY *const key = &gcm_siv_ctx->ks.ks;
1612
+ uint8_t key_material[(128 /* POLYVAL key */ + 256 /* max AES key */) / 8];
1613
+ const size_t blocks_needed = gcm_siv_ctx->is_256 ? 6 : 4;
1614
+
1615
+ uint8_t counter[AES_BLOCK_SIZE];
1616
+ OPENSSL_memset(counter, 0, AES_BLOCK_SIZE - EVP_AEAD_AES_GCM_SIV_NONCE_LEN);
1617
+ OPENSSL_memcpy(counter + AES_BLOCK_SIZE - EVP_AEAD_AES_GCM_SIV_NONCE_LEN,
1618
+ nonce, EVP_AEAD_AES_GCM_SIV_NONCE_LEN);
1619
+ for (size_t i = 0; i < blocks_needed; i++) {
1620
+ counter[0] = i;
1621
+
1622
+ uint8_t ciphertext[AES_BLOCK_SIZE];
1623
+ gcm_siv_ctx->kgk_block(counter, ciphertext, key);
1624
+ OPENSSL_memcpy(&key_material[i * 8], ciphertext, 8);
1625
+ }
1626
+
1627
+ OPENSSL_memcpy(out_keys->auth_key, key_material, 16);
1628
+ aes_ctr_set_key(&out_keys->enc_key.ks, NULL, &out_keys->enc_block,
1629
+ key_material + 16, gcm_siv_ctx->is_256 ? 32 : 16);
1630
+ }
1631
+
1632
+ static int aead_aes_gcm_siv_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
1633
+ size_t *out_len, size_t max_out_len,
1634
+ const uint8_t *nonce, size_t nonce_len,
1635
+ const uint8_t *in, size_t in_len,
1636
+ const uint8_t *ad, size_t ad_len) {
1637
+ const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx = ctx->aead_state;
1638
+ const uint64_t in_len_64 = in_len;
1639
+ const uint64_t ad_len_64 = ad_len;
1640
+
1641
+ if (in_len + EVP_AEAD_AES_GCM_SIV_TAG_LEN < in_len ||
1642
+ in_len_64 > (UINT64_C(1) << 36) ||
1643
+ ad_len_64 >= (UINT64_C(1) << 61)) {
1644
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
1645
+ return 0;
1646
+ }
1647
+
1648
+ if (max_out_len < in_len + EVP_AEAD_AES_GCM_SIV_TAG_LEN) {
1649
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
1650
+ return 0;
1651
+ }
1652
+
1653
+ if (nonce_len != EVP_AEAD_AES_GCM_SIV_NONCE_LEN) {
1654
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
1655
+ return 0;
1656
+ }
1657
+
1658
+ struct gcm_siv_record_keys keys;
1659
+ gcm_siv_keys(gcm_siv_ctx, &keys, nonce);
1660
+
1661
+ uint8_t tag[16];
1662
+ gcm_siv_polyval(tag, in, in_len, ad, ad_len, keys.auth_key, nonce);
1663
+ keys.enc_block(tag, tag, &keys.enc_key.ks);
1664
+
1665
+ gcm_siv_crypt(out, in, in_len, tag, keys.enc_block, &keys.enc_key.ks);
1666
+
1667
+ OPENSSL_memcpy(&out[in_len], tag, EVP_AEAD_AES_GCM_SIV_TAG_LEN);
1668
+ *out_len = in_len + EVP_AEAD_AES_GCM_SIV_TAG_LEN;
1669
+
1670
+ return 1;
1671
+ }
1672
+
1673
+ static int aead_aes_gcm_siv_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
1674
+ size_t *out_len, size_t max_out_len,
1675
+ const uint8_t *nonce, size_t nonce_len,
1676
+ const uint8_t *in, size_t in_len,
1677
+ const uint8_t *ad, size_t ad_len) {
1678
+ const uint64_t ad_len_64 = ad_len;
1679
+ if (ad_len_64 >= (UINT64_C(1) << 61)) {
1680
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
1681
+ return 0;
1682
+ }
1683
+
1684
+ const uint64_t in_len_64 = in_len;
1685
+ if (in_len < EVP_AEAD_AES_GCM_SIV_TAG_LEN ||
1686
+ in_len_64 > (UINT64_C(1) << 36) + AES_BLOCK_SIZE) {
1687
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
1688
+ return 0;
1689
+ }
1690
+
1691
+ if (nonce_len != EVP_AEAD_AES_GCM_SIV_NONCE_LEN) {
1692
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
1693
+ return 0;
1694
+ }
1695
+
1696
+ const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx = ctx->aead_state;
1697
+ const size_t plaintext_len = in_len - EVP_AEAD_AES_GCM_SIV_TAG_LEN;
1698
+
1699
+ if (max_out_len < plaintext_len) {
1700
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
1701
+ return 0;
1702
+ }
1703
+
1704
+ struct gcm_siv_record_keys keys;
1705
+ gcm_siv_keys(gcm_siv_ctx, &keys, nonce);
1706
+
1707
+ gcm_siv_crypt(out, in, plaintext_len, &in[plaintext_len], keys.enc_block,
1708
+ &keys.enc_key.ks);
1709
+
1710
+ uint8_t expected_tag[EVP_AEAD_AES_GCM_SIV_TAG_LEN];
1711
+ gcm_siv_polyval(expected_tag, out, plaintext_len, ad, ad_len, keys.auth_key,
1712
+ nonce);
1713
+ keys.enc_block(expected_tag, expected_tag, &keys.enc_key.ks);
1714
+
1715
+ if (CRYPTO_memcmp(expected_tag, &in[plaintext_len], sizeof(expected_tag)) !=
1716
+ 0) {
1717
+ OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
1718
+ return 0;
1719
+ }
1720
+
1721
+ *out_len = plaintext_len;
1722
+ return 1;
1723
+ }
1724
+
1725
+ static const EVP_AEAD aead_aes_128_gcm_siv = {
1726
+ 16, /* key length */
1727
+ EVP_AEAD_AES_GCM_SIV_NONCE_LEN, /* nonce length */
1728
+ EVP_AEAD_AES_GCM_SIV_TAG_LEN, /* overhead */
1729
+ EVP_AEAD_AES_GCM_SIV_TAG_LEN, /* max tag length */
1730
+
1731
+ aead_aes_gcm_siv_init,
1732
+ NULL /* init_with_direction */,
1733
+ aead_aes_gcm_siv_cleanup,
1734
+ aead_aes_gcm_siv_seal,
1735
+ aead_aes_gcm_siv_open,
1736
+ NULL /* get_iv */,
1737
+ };
1738
+
1739
+ static const EVP_AEAD aead_aes_256_gcm_siv = {
1740
+ 32, /* key length */
1741
+ EVP_AEAD_AES_GCM_SIV_NONCE_LEN, /* nonce length */
1742
+ EVP_AEAD_AES_GCM_SIV_TAG_LEN, /* overhead */
1743
+ EVP_AEAD_AES_GCM_SIV_TAG_LEN, /* max tag length */
1744
+
1745
+ aead_aes_gcm_siv_init,
1746
+ NULL /* init_with_direction */,
1747
+ aead_aes_gcm_siv_cleanup,
1748
+ aead_aes_gcm_siv_seal,
1749
+ aead_aes_gcm_siv_open,
1750
+ NULL /* get_iv */,
1751
+ };
1752
+
1753
+ const EVP_AEAD *EVP_aead_aes_128_gcm_siv(void) {
1754
+ return &aead_aes_128_gcm_siv;
1755
+ }
1756
+
1757
+ const EVP_AEAD *EVP_aead_aes_256_gcm_siv(void) {
1758
+ return &aead_aes_256_gcm_siv;
1759
+ }
1760
+
1761
+ #endif /* !OPENSSL_SMALL */
1762
+
1709
1763
  int EVP_has_aes_hardware(void) {
1710
1764
  #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
1711
1765
  return aesni_capable() && crypto_gcm_clmul_enabled();