grpc 0.12.0 → 0.13.0.pre1.1

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 (673) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +5707 -22222
  3. data/include/grpc/byte_buffer.h +2 -83
  4. data/include/grpc/census.h +191 -121
  5. data/include/grpc/compression.h +14 -38
  6. data/include/grpc/grpc.h +88 -434
  7. data/include/grpc/grpc_security.h +76 -46
  8. data/include/grpc/grpc_zookeeper.h +1 -1
  9. data/include/grpc/impl/codegen/alloc.h +74 -0
  10. data/include/grpc/impl/codegen/atm.h +92 -0
  11. data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
  12. data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
  13. data/include/grpc/impl/codegen/atm_win32.h +125 -0
  14. data/include/grpc/impl/codegen/byte_buffer.h +121 -0
  15. data/include/grpc/impl/codegen/compression_types.h +73 -0
  16. data/include/grpc/impl/codegen/connectivity_state.h +59 -0
  17. data/include/grpc/impl/codegen/grpc_types.h +373 -0
  18. data/include/grpc/impl/codegen/log.h +110 -0
  19. data/include/grpc/impl/codegen/port_platform.h +362 -0
  20. data/include/grpc/impl/codegen/propagation_bits.h +67 -0
  21. data/include/grpc/impl/codegen/slice.h +182 -0
  22. data/include/grpc/impl/codegen/slice_buffer.h +105 -0
  23. data/include/grpc/impl/codegen/status.h +163 -0
  24. data/include/grpc/impl/codegen/sync.h +316 -0
  25. data/include/grpc/impl/codegen/sync_generic.h +55 -0
  26. data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
  27. data/include/grpc/impl/codegen/sync_win32.h +49 -0
  28. data/include/grpc/impl/codegen/time.h +132 -0
  29. data/include/grpc/status.h +2 -126
  30. data/include/grpc/support/alloc.h +2 -35
  31. data/include/grpc/support/atm.h +2 -55
  32. data/include/grpc/support/atm_gcc_atomic.h +5 -38
  33. data/include/grpc/support/atm_gcc_sync.h +2 -50
  34. data/include/grpc/support/atm_win32.h +2 -88
  35. data/include/grpc/support/avl.h +7 -7
  36. data/include/grpc/support/cmdline.h +15 -13
  37. data/include/grpc/support/cpu.h +5 -3
  38. data/include/grpc/support/histogram.h +23 -20
  39. data/include/grpc/support/host_port.h +5 -3
  40. data/include/grpc/support/log.h +2 -71
  41. data/include/grpc/support/log_win32.h +2 -2
  42. data/include/grpc/support/port_platform.h +2 -319
  43. data/include/grpc/support/slice.h +2 -145
  44. data/include/grpc/support/slice_buffer.h +2 -65
  45. data/include/grpc/support/string_util.h +3 -3
  46. data/include/grpc/support/subprocess.h +8 -6
  47. data/include/grpc/support/sync.h +2 -278
  48. data/include/grpc/support/sync_generic.h +2 -18
  49. data/include/grpc/support/sync_posix.h +2 -10
  50. data/include/grpc/support/sync_win32.h +2 -12
  51. data/include/grpc/support/thd.h +11 -11
  52. data/include/grpc/support/time.h +2 -91
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +1 -1
  55. data/include/grpc/support/tls_msvc.h +1 -1
  56. data/include/grpc/support/tls_pthread.h +2 -2
  57. data/src/boringssl/err_data.c +1252 -0
  58. data/src/core/census/context.c +492 -8
  59. data/src/core/census/grpc_filter.c +3 -3
  60. data/src/core/census/initialize.c +4 -7
  61. data/src/core/census/operation.c +2 -2
  62. data/src/core/census/placeholders.c +109 -0
  63. data/src/core/census/rpc_metric_id.h +6 -6
  64. data/src/core/census/tracing.c +1 -1
  65. data/src/core/channel/channel_args.c +4 -3
  66. data/src/core/channel/channel_stack.c +1 -1
  67. data/src/core/channel/client_channel.c +18 -14
  68. data/src/core/channel/client_uchannel.c +3 -3
  69. data/src/core/channel/compress_filter.c +8 -8
  70. data/src/core/channel/http_client_filter.c +2 -2
  71. data/src/core/channel/http_server_filter.c +9 -9
  72. data/src/core/channel/subchannel_call_holder.c +12 -10
  73. data/src/core/client_config/lb_policies/pick_first.c +49 -31
  74. data/src/core/client_config/lb_policies/round_robin.c +7 -7
  75. data/src/core/client_config/resolvers/dns_resolver.c +3 -3
  76. data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
  77. data/src/core/client_config/subchannel.c +36 -25
  78. data/src/core/compression/algorithm.c +3 -3
  79. data/src/core/httpcli/format_request.c +1 -1
  80. data/src/core/httpcli/httpcli.c +5 -5
  81. data/src/core/httpcli/httpcli_security_connector.c +2 -3
  82. data/src/core/httpcli/parser.c +7 -7
  83. data/src/core/httpcli/parser.h +1 -1
  84. data/src/core/iomgr/closure.c +7 -7
  85. data/src/core/iomgr/closure.h +6 -5
  86. data/src/core/iomgr/exec_ctx.c +12 -8
  87. data/src/core/iomgr/exec_ctx.h +12 -5
  88. data/src/core/iomgr/executor.c +4 -4
  89. data/src/core/iomgr/executor.h +2 -2
  90. data/src/core/iomgr/fd_posix.c +28 -17
  91. data/src/core/iomgr/fd_posix.h +7 -4
  92. data/src/core/iomgr/iocp_windows.c +6 -8
  93. data/src/core/iomgr/pollset_multipoller_with_epoll.c +70 -5
  94. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +4 -2
  95. data/src/core/iomgr/pollset_posix.c +15 -15
  96. data/src/core/iomgr/pollset_posix.h +4 -2
  97. data/src/core/iomgr/pollset_windows.c +3 -12
  98. data/src/core/iomgr/resolve_address_posix.c +2 -2
  99. data/src/core/iomgr/resolve_address_windows.c +2 -2
  100. data/src/core/iomgr/sockaddr_utils.c +6 -6
  101. data/src/core/iomgr/sockaddr_win32.h +1 -6
  102. data/src/core/iomgr/tcp_client_posix.c +7 -7
  103. data/src/core/iomgr/tcp_client_windows.c +4 -4
  104. data/src/core/iomgr/tcp_posix.c +14 -8
  105. data/src/core/iomgr/tcp_posix.h +7 -1
  106. data/src/core/iomgr/tcp_server.h +40 -20
  107. data/src/core/iomgr/tcp_server_posix.c +106 -49
  108. data/src/core/iomgr/tcp_server_windows.c +98 -49
  109. data/src/core/iomgr/tcp_windows.c +11 -15
  110. data/src/core/iomgr/timer.c +8 -8
  111. data/src/core/iomgr/timer.h +1 -1
  112. data/src/core/iomgr/timer_heap.c +10 -10
  113. data/src/core/iomgr/timer_heap.h +2 -2
  114. data/src/core/iomgr/udp_server.c +2 -12
  115. data/src/core/iomgr/udp_server.h +1 -9
  116. data/src/core/iomgr/workqueue.h +2 -4
  117. data/src/core/iomgr/workqueue_posix.c +3 -3
  118. data/src/core/json/json_reader.c +11 -12
  119. data/src/core/json/json_reader.h +4 -4
  120. data/src/core/json/json_string.c +19 -19
  121. data/src/core/json/json_writer.c +7 -9
  122. data/src/core/profiling/basic_timers.c +1 -1
  123. data/src/core/security/base64.c +9 -9
  124. data/src/core/security/client_auth_filter.c +4 -4
  125. data/src/core/security/credentials.c +5 -5
  126. data/src/core/security/google_default_credentials.c +3 -3
  127. data/src/core/security/handshake.c +6 -5
  128. data/src/core/security/json_token.c +13 -7
  129. data/src/core/security/jwt_verifier.c +3 -2
  130. data/src/core/security/secure_endpoint.c +16 -16
  131. data/src/core/security/security_connector.c +47 -17
  132. data/src/core/security/security_connector.h +5 -5
  133. data/src/core/security/server_auth_filter.c +3 -3
  134. data/src/core/security/server_secure_chttp2.c +30 -31
  135. data/src/core/statistics/census_interface.h +2 -2
  136. data/src/core/statistics/census_rpc_stats.h +3 -3
  137. data/src/core/support/alloc.c +1 -1
  138. data/src/core/support/cpu_posix.c +2 -2
  139. data/src/core/support/env_linux.c +12 -2
  140. data/src/core/support/env_win32.c +15 -7
  141. data/src/core/support/histogram.c +5 -5
  142. data/src/core/support/log_posix.c +1 -1
  143. data/src/core/support/log_win32.c +4 -3
  144. data/src/core/support/murmur_hash.c +11 -11
  145. data/src/core/support/murmur_hash.h +1 -1
  146. data/src/core/support/slice.c +11 -11
  147. data/src/core/support/slice_buffer.c +6 -6
  148. data/src/core/support/stack_lockfree.c +20 -10
  149. data/src/core/support/string.c +15 -15
  150. data/src/core/support/string.h +5 -5
  151. data/src/core/support/string_win32.c +5 -5
  152. data/src/core/support/subprocess_windows.c +141 -0
  153. data/src/core/support/sync.c +4 -4
  154. data/src/core/support/sync_posix.c +2 -2
  155. data/src/core/support/sync_win32.c +10 -5
  156. data/src/core/support/time.c +29 -29
  157. data/src/core/support/time_posix.c +15 -6
  158. data/src/core/support/time_precise.c +2 -2
  159. data/src/core/support/time_win32.c +18 -9
  160. data/src/core/support/tls_pthread.c +1 -1
  161. data/src/core/support/wrap_memcpy.c +53 -0
  162. data/src/core/surface/alarm.c +83 -0
  163. data/src/core/surface/byte_buffer_reader.c +1 -1
  164. data/src/core/surface/call.c +78 -69
  165. data/src/core/surface/call.h +2 -2
  166. data/src/core/surface/call_test_only.h +2 -2
  167. data/src/core/surface/channel.c +9 -9
  168. data/src/core/surface/channel.h +1 -1
  169. data/src/core/surface/channel_connectivity.c +3 -3
  170. data/src/core/surface/channel_create.c +3 -3
  171. data/src/core/surface/channel_ping.c +2 -2
  172. data/src/core/surface/completion_queue.c +11 -12
  173. data/src/core/surface/completion_queue.h +1 -1
  174. data/src/core/surface/init.c +7 -5
  175. data/src/core/surface/lame_client.c +3 -3
  176. data/src/core/surface/secure_channel_create.c +3 -3
  177. data/src/core/surface/server.c +28 -28
  178. data/src/core/surface/server_chttp2.c +8 -8
  179. data/src/core/surface/server_create.c +1 -4
  180. data/src/core/surface/validate_metadata.c +3 -3
  181. data/src/core/surface/version.c +2 -2
  182. data/src/core/transport/byte_stream.c +8 -6
  183. data/src/core/transport/byte_stream.h +6 -5
  184. data/src/core/transport/chttp2/bin_encoder.c +29 -29
  185. data/src/core/transport/chttp2/frame_data.c +29 -26
  186. data/src/core/transport/chttp2/frame_data.h +6 -6
  187. data/src/core/transport/chttp2/frame_goaway.c +30 -30
  188. data/src/core/transport/chttp2/frame_goaway.h +6 -6
  189. data/src/core/transport/chttp2/frame_ping.c +6 -6
  190. data/src/core/transport/chttp2/frame_ping.h +5 -5
  191. data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
  192. data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
  193. data/src/core/transport/chttp2/frame_settings.c +30 -30
  194. data/src/core/transport/chttp2/frame_settings.h +13 -13
  195. data/src/core/transport/chttp2/frame_window_update.c +17 -18
  196. data/src/core/transport/chttp2/frame_window_update.h +5 -7
  197. data/src/core/transport/chttp2/hpack_encoder.c +69 -73
  198. data/src/core/transport/chttp2/hpack_encoder.h +16 -16
  199. data/src/core/transport/chttp2/hpack_parser.c +167 -167
  200. data/src/core/transport/chttp2/hpack_parser.h +16 -16
  201. data/src/core/transport/chttp2/hpack_table.c +13 -13
  202. data/src/core/transport/chttp2/hpack_table.h +11 -11
  203. data/src/core/transport/chttp2/internal.h +97 -86
  204. data/src/core/transport/chttp2/parsing.c +25 -25
  205. data/src/core/transport/chttp2/stream_lists.c +26 -3
  206. data/src/core/transport/chttp2/stream_map.c +13 -14
  207. data/src/core/transport/chttp2/stream_map.h +6 -7
  208. data/src/core/transport/chttp2/timeout_encoding.c +19 -16
  209. data/src/core/transport/chttp2/varint.c +8 -9
  210. data/src/core/transport/chttp2/varint.h +7 -8
  211. data/src/core/transport/chttp2/writing.c +26 -23
  212. data/src/core/transport/chttp2_transport.c +133 -92
  213. data/src/core/transport/connectivity_state.c +6 -6
  214. data/src/core/transport/metadata.c +18 -18
  215. data/src/core/transport/metadata.h +5 -5
  216. data/src/core/transport/static_metadata.c +15 -16
  217. data/src/core/transport/static_metadata.h +5 -5
  218. data/src/core/transport/transport.c +5 -5
  219. data/src/core/transport/transport.h +14 -1
  220. data/src/core/tsi/fake_transport_security.c +7 -7
  221. data/src/core/tsi/ssl_transport_security.c +6 -4
  222. data/src/core/tsi/ssl_types.h +55 -0
  223. data/src/ruby/ext/grpc/extconf.rb +51 -14
  224. data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
  225. data/src/ruby/ext/grpc/rb_call.c +6 -3
  226. data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
  227. data/src/ruby/ext/grpc/rb_channel.c +4 -2
  228. data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
  229. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
  230. data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
  231. data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
  232. data/src/ruby/ext/grpc/rb_grpc.c +11 -3
  233. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
  234. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
  235. data/src/ruby/ext/grpc/rb_loader.c +72 -0
  236. data/src/ruby/ext/grpc/rb_loader.h +40 -0
  237. data/src/ruby/ext/grpc/rb_server.c +3 -1
  238. data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
  239. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  240. data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
  241. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  242. data/src/ruby/lib/grpc/grpc.rb +34 -0
  243. data/src/ruby/lib/grpc/version.rb +1 -1
  244. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  245. data/third_party/boringssl/crypto/aes/aes.c +1142 -0
  246. data/third_party/boringssl/crypto/aes/internal.h +87 -0
  247. data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
  248. data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
  249. data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
  250. data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
  251. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
  252. data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
  253. data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
  254. data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
  255. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
  256. data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
  257. data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
  258. data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
  259. data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
  260. data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
  261. data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
  262. data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
  263. data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
  264. data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
  265. data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
  266. data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
  267. data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
  268. data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
  269. data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
  270. data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
  271. data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
  272. data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
  273. data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
  274. data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
  275. data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
  276. data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
  277. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
  278. data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
  279. data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
  280. data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
  281. data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
  282. data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
  283. data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
  284. data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
  285. data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
  286. data/third_party/boringssl/crypto/base64/base64.c +478 -0
  287. data/third_party/boringssl/crypto/bio/bio.c +608 -0
  288. data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
  289. data/third_party/boringssl/crypto/bio/buffer.c +496 -0
  290. data/third_party/boringssl/crypto/bio/connect.c +544 -0
  291. data/third_party/boringssl/crypto/bio/fd.c +270 -0
  292. data/third_party/boringssl/crypto/bio/file.c +349 -0
  293. data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
  294. data/third_party/boringssl/crypto/bio/internal.h +108 -0
  295. data/third_party/boringssl/crypto/bio/pair.c +803 -0
  296. data/third_party/boringssl/crypto/bio/printf.c +119 -0
  297. data/third_party/boringssl/crypto/bio/socket.c +195 -0
  298. data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
  299. data/third_party/boringssl/crypto/bn/add.c +377 -0
  300. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
  301. data/third_party/boringssl/crypto/bn/bn.c +341 -0
  302. data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
  303. data/third_party/boringssl/crypto/bn/cmp.c +200 -0
  304. data/third_party/boringssl/crypto/bn/convert.c +597 -0
  305. data/third_party/boringssl/crypto/bn/ctx.c +311 -0
  306. data/third_party/boringssl/crypto/bn/div.c +625 -0
  307. data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
  308. data/third_party/boringssl/crypto/bn/gcd.c +711 -0
  309. data/third_party/boringssl/crypto/bn/generic.c +1019 -0
  310. data/third_party/boringssl/crypto/bn/internal.h +294 -0
  311. data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
  312. data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
  313. data/third_party/boringssl/crypto/bn/mul.c +888 -0
  314. data/third_party/boringssl/crypto/bn/prime.c +845 -0
  315. data/third_party/boringssl/crypto/bn/random.c +326 -0
  316. data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
  317. data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
  318. data/third_party/boringssl/crypto/bn/shift.c +299 -0
  319. data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
  320. data/third_party/boringssl/crypto/buf/buf.c +235 -0
  321. data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
  322. data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
  323. data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
  324. data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
  325. data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
  326. data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
  327. data/third_party/boringssl/crypto/cipher/aead.c +167 -0
  328. data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
  329. data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
  330. data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
  331. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
  332. data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
  333. data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
  334. data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
  335. data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
  336. data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
  337. data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
  338. data/third_party/boringssl/crypto/cipher/internal.h +164 -0
  339. data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
  340. data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
  341. data/third_party/boringssl/crypto/conf/conf.c +778 -0
  342. data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
  343. data/third_party/boringssl/crypto/conf/internal.h +31 -0
  344. data/third_party/boringssl/crypto/cpu-arm.c +199 -0
  345. data/third_party/boringssl/crypto/cpu-intel.c +261 -0
  346. data/third_party/boringssl/crypto/crypto.c +140 -0
  347. data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
  348. data/third_party/boringssl/crypto/des/des.c +771 -0
  349. data/third_party/boringssl/crypto/des/internal.h +212 -0
  350. data/third_party/boringssl/crypto/dh/check.c +180 -0
  351. data/third_party/boringssl/crypto/dh/dh.c +463 -0
  352. data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
  353. data/third_party/boringssl/crypto/dh/internal.h +80 -0
  354. data/third_party/boringssl/crypto/dh/params.c +301 -0
  355. data/third_party/boringssl/crypto/digest/digest.c +248 -0
  356. data/third_party/boringssl/crypto/digest/digests.c +321 -0
  357. data/third_party/boringssl/crypto/digest/internal.h +112 -0
  358. data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
  359. data/third_party/boringssl/crypto/directory.h +66 -0
  360. data/third_party/boringssl/crypto/directory_posix.c +108 -0
  361. data/third_party/boringssl/crypto/directory_win.c +144 -0
  362. data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
  363. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
  364. data/third_party/boringssl/crypto/dsa/internal.h +78 -0
  365. data/third_party/boringssl/crypto/ec/ec.c +889 -0
  366. data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
  367. data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
  368. data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
  369. data/third_party/boringssl/crypto/ec/internal.h +318 -0
  370. data/third_party/boringssl/crypto/ec/oct.c +416 -0
  371. data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
  372. data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
  373. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
  374. data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
  375. data/third_party/boringssl/crypto/ec/simple.c +1313 -0
  376. data/third_party/boringssl/crypto/ec/util-64.c +183 -0
  377. data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
  378. data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
  379. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
  380. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
  381. data/third_party/boringssl/crypto/engine/engine.c +96 -0
  382. data/third_party/boringssl/crypto/err/err.c +756 -0
  383. data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
  384. data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
  385. data/third_party/boringssl/crypto/evp/evp.c +411 -0
  386. data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
  387. data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
  388. data/third_party/boringssl/crypto/evp/internal.h +278 -0
  389. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
  390. data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
  391. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
  392. data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
  393. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
  394. data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
  395. data/third_party/boringssl/crypto/evp/sign.c +151 -0
  396. data/third_party/boringssl/crypto/ex_data.c +294 -0
  397. data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
  398. data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
  399. data/third_party/boringssl/crypto/internal.h +532 -0
  400. data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
  401. data/third_party/boringssl/crypto/md4/md4.c +225 -0
  402. data/third_party/boringssl/crypto/md5/md5.c +275 -0
  403. data/third_party/boringssl/crypto/mem.c +200 -0
  404. data/third_party/boringssl/crypto/modes/cbc.c +216 -0
  405. data/third_party/boringssl/crypto/modes/cfb.c +231 -0
  406. data/third_party/boringssl/crypto/modes/ctr.c +226 -0
  407. data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
  408. data/third_party/boringssl/crypto/modes/internal.h +370 -0
  409. data/third_party/boringssl/crypto/modes/ofb.c +108 -0
  410. data/third_party/boringssl/crypto/obj/obj.c +664 -0
  411. data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
  412. data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
  413. data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
  414. data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
  415. data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
  416. data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
  417. data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
  418. data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
  419. data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
  420. data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
  421. data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
  422. data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
  423. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
  424. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
  425. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
  426. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
  427. data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
  428. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
  429. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
  430. data/third_party/boringssl/crypto/rand/internal.h +32 -0
  431. data/third_party/boringssl/crypto/rand/rand.c +239 -0
  432. data/third_party/boringssl/crypto/rand/urandom.c +223 -0
  433. data/third_party/boringssl/crypto/rand/windows.c +56 -0
  434. data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
  435. data/third_party/boringssl/crypto/refcount_c11.c +67 -0
  436. data/third_party/boringssl/crypto/refcount_lock.c +53 -0
  437. data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
  438. data/third_party/boringssl/crypto/rsa/internal.h +164 -0
  439. data/third_party/boringssl/crypto/rsa/padding.c +711 -0
  440. data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
  441. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
  442. data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
  443. data/third_party/boringssl/crypto/sha/sha1.c +337 -0
  444. data/third_party/boringssl/crypto/sha/sha256.c +327 -0
  445. data/third_party/boringssl/crypto/sha/sha512.c +607 -0
  446. data/third_party/boringssl/crypto/stack/stack.c +386 -0
  447. data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
  448. data/third_party/boringssl/crypto/test/test_util.h +35 -0
  449. data/third_party/boringssl/crypto/thread.c +101 -0
  450. data/third_party/boringssl/crypto/thread_none.c +55 -0
  451. data/third_party/boringssl/crypto/thread_pthread.c +167 -0
  452. data/third_party/boringssl/crypto/thread_win.c +282 -0
  453. data/third_party/boringssl/crypto/time_support.c +212 -0
  454. data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
  455. data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
  456. data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
  457. data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
  458. data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
  459. data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
  460. data/third_party/boringssl/crypto/x509/by_file.c +295 -0
  461. data/third_party/boringssl/crypto/x509/charmap.h +15 -0
  462. data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
  463. data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
  464. data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
  465. data/third_party/boringssl/crypto/x509/t_req.c +246 -0
  466. data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
  467. data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
  468. data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
  469. data/third_party/boringssl/crypto/x509/x509.c +152 -0
  470. data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
  471. data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
  472. data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
  473. data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
  474. data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
  475. data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
  476. data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
  477. data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
  478. data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
  479. data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
  480. data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
  481. data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
  482. data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
  483. data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
  484. data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
  485. data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
  486. data/third_party/boringssl/crypto/x509/x509name.c +381 -0
  487. data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
  488. data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
  489. data/third_party/boringssl/crypto/x509/x509type.c +128 -0
  490. data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
  491. data/third_party/boringssl/crypto/x509/x_all.c +547 -0
  492. data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
  493. data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
  494. data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
  495. data/third_party/boringssl/crypto/x509/x_info.c +95 -0
  496. data/third_party/boringssl/crypto/x509/x_name.c +538 -0
  497. data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
  498. data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
  499. data/third_party/boringssl/crypto/x509/x_req.c +112 -0
  500. data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
  501. data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
  502. data/third_party/boringssl/crypto/x509/x_val.c +69 -0
  503. data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
  504. data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
  505. data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
  506. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
  507. data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
  508. data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
  509. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
  510. data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
  511. data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
  512. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
  513. data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
  514. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
  515. data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
  516. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
  517. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
  518. data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
  519. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
  520. data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
  521. data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
  522. data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
  523. data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
  524. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
  525. data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
  526. data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
  527. data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
  528. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
  529. data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
  530. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
  531. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
  532. data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
  533. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
  534. data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
  535. data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
  536. data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
  537. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
  538. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
  539. data/third_party/boringssl/include/openssl/aead.h +346 -0
  540. data/third_party/boringssl/include/openssl/aes.h +158 -0
  541. data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
  542. data/third_party/boringssl/include/openssl/asn1.h +1168 -0
  543. data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
  544. data/third_party/boringssl/include/openssl/asn1t.h +906 -0
  545. data/third_party/boringssl/include/openssl/base.h +261 -0
  546. data/third_party/boringssl/include/openssl/base64.h +184 -0
  547. data/third_party/boringssl/include/openssl/bio.h +902 -0
  548. data/third_party/boringssl/include/openssl/blowfish.h +93 -0
  549. data/third_party/boringssl/include/openssl/bn.h +885 -0
  550. data/third_party/boringssl/include/openssl/buf.h +118 -0
  551. data/third_party/boringssl/include/openssl/buffer.h +18 -0
  552. data/third_party/boringssl/include/openssl/bytestring.h +360 -0
  553. data/third_party/boringssl/include/openssl/cast.h +96 -0
  554. data/third_party/boringssl/include/openssl/chacha.h +37 -0
  555. data/third_party/boringssl/include/openssl/cipher.h +571 -0
  556. data/third_party/boringssl/include/openssl/cmac.h +76 -0
  557. data/third_party/boringssl/include/openssl/conf.h +145 -0
  558. data/third_party/boringssl/include/openssl/cpu.h +184 -0
  559. data/third_party/boringssl/include/openssl/crypto.h +68 -0
  560. data/third_party/boringssl/include/openssl/curve25519.h +88 -0
  561. data/third_party/boringssl/include/openssl/des.h +177 -0
  562. data/third_party/boringssl/include/openssl/dh.h +238 -0
  563. data/third_party/boringssl/include/openssl/digest.h +258 -0
  564. data/third_party/boringssl/include/openssl/dsa.h +343 -0
  565. data/third_party/boringssl/include/openssl/dtls1.h +16 -0
  566. data/third_party/boringssl/include/openssl/ec.h +355 -0
  567. data/third_party/boringssl/include/openssl/ec_key.h +280 -0
  568. data/third_party/boringssl/include/openssl/ecdh.h +102 -0
  569. data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
  570. data/third_party/boringssl/include/openssl/engine.h +98 -0
  571. data/third_party/boringssl/include/openssl/err.h +487 -0
  572. data/third_party/boringssl/include/openssl/evp.h +750 -0
  573. data/third_party/boringssl/include/openssl/ex_data.h +213 -0
  574. data/third_party/boringssl/include/openssl/hkdf.h +44 -0
  575. data/third_party/boringssl/include/openssl/hmac.h +160 -0
  576. data/third_party/boringssl/include/openssl/lhash.h +192 -0
  577. data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
  578. data/third_party/boringssl/include/openssl/md4.h +102 -0
  579. data/third_party/boringssl/include/openssl/md5.h +107 -0
  580. data/third_party/boringssl/include/openssl/mem.h +140 -0
  581. data/third_party/boringssl/include/openssl/obj.h +198 -0
  582. data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
  583. data/third_party/boringssl/include/openssl/objects.h +18 -0
  584. data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
  585. data/third_party/boringssl/include/openssl/opensslv.h +18 -0
  586. data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
  587. data/third_party/boringssl/include/openssl/pem.h +521 -0
  588. data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
  589. data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
  590. data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
  591. data/third_party/boringssl/include/openssl/poly1305.h +51 -0
  592. data/third_party/boringssl/include/openssl/pqueue.h +146 -0
  593. data/third_party/boringssl/include/openssl/rand.h +113 -0
  594. data/third_party/boringssl/include/openssl/rc4.h +90 -0
  595. data/third_party/boringssl/include/openssl/rsa.h +637 -0
  596. data/third_party/boringssl/include/openssl/safestack.h +16 -0
  597. data/third_party/boringssl/include/openssl/sha.h +256 -0
  598. data/third_party/boringssl/include/openssl/srtp.h +18 -0
  599. data/third_party/boringssl/include/openssl/ssl.h +4466 -0
  600. data/third_party/boringssl/include/openssl/ssl3.h +441 -0
  601. data/third_party/boringssl/include/openssl/stack.h +298 -0
  602. data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
  603. data/third_party/boringssl/include/openssl/thread.h +173 -0
  604. data/third_party/boringssl/include/openssl/time_support.h +90 -0
  605. data/third_party/boringssl/include/openssl/tls1.h +653 -0
  606. data/third_party/boringssl/include/openssl/type_check.h +91 -0
  607. data/third_party/boringssl/include/openssl/x509.h +1258 -0
  608. data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
  609. data/third_party/boringssl/include/openssl/x509v3.h +798 -0
  610. data/third_party/boringssl/ssl/custom_extensions.c +257 -0
  611. data/third_party/boringssl/ssl/d1_both.c +880 -0
  612. data/third_party/boringssl/ssl/d1_clnt.c +566 -0
  613. data/third_party/boringssl/ssl/d1_lib.c +340 -0
  614. data/third_party/boringssl/ssl/d1_meth.c +130 -0
  615. data/third_party/boringssl/ssl/d1_pkt.c +578 -0
  616. data/third_party/boringssl/ssl/d1_srtp.c +234 -0
  617. data/third_party/boringssl/ssl/d1_srvr.c +485 -0
  618. data/third_party/boringssl/ssl/dtls_record.c +308 -0
  619. data/third_party/boringssl/ssl/internal.h +1276 -0
  620. data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
  621. data/third_party/boringssl/ssl/s3_both.c +571 -0
  622. data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
  623. data/third_party/boringssl/ssl/s3_enc.c +494 -0
  624. data/third_party/boringssl/ssl/s3_lib.c +587 -0
  625. data/third_party/boringssl/ssl/s3_meth.c +166 -0
  626. data/third_party/boringssl/ssl/s3_pkt.c +732 -0
  627. data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
  628. data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
  629. data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
  630. data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
  631. data/third_party/boringssl/ssl/ssl_cert.c +539 -0
  632. data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
  633. data/third_party/boringssl/ssl/ssl_file.c +633 -0
  634. data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
  635. data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
  636. data/third_party/boringssl/ssl/ssl_session.c +764 -0
  637. data/third_party/boringssl/ssl/ssl_stat.c +591 -0
  638. data/third_party/boringssl/ssl/t1_enc.c +708 -0
  639. data/third_party/boringssl/ssl/t1_lib.c +2905 -0
  640. data/third_party/boringssl/ssl/test/async_bio.h +45 -0
  641. data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
  642. data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
  643. data/third_party/boringssl/ssl/test/test_config.h +108 -0
  644. data/third_party/boringssl/ssl/tls_record.c +342 -0
  645. data/third_party/zlib/adler32.c +179 -0
  646. data/third_party/zlib/compress.c +80 -0
  647. data/third_party/zlib/crc32.c +425 -0
  648. data/third_party/zlib/crc32.h +441 -0
  649. data/third_party/zlib/deflate.c +1967 -0
  650. data/third_party/zlib/deflate.h +346 -0
  651. data/third_party/zlib/gzclose.c +25 -0
  652. data/third_party/zlib/gzguts.h +209 -0
  653. data/third_party/zlib/gzlib.c +634 -0
  654. data/third_party/zlib/gzread.c +594 -0
  655. data/third_party/zlib/gzwrite.c +577 -0
  656. data/third_party/zlib/infback.c +640 -0
  657. data/third_party/zlib/inffast.c +340 -0
  658. data/third_party/zlib/inffast.h +11 -0
  659. data/third_party/zlib/inffixed.h +94 -0
  660. data/third_party/zlib/inflate.c +1512 -0
  661. data/third_party/zlib/inflate.h +122 -0
  662. data/third_party/zlib/inftrees.c +306 -0
  663. data/third_party/zlib/inftrees.h +62 -0
  664. data/third_party/zlib/trees.c +1226 -0
  665. data/third_party/zlib/trees.h +128 -0
  666. data/third_party/zlib/uncompr.c +59 -0
  667. data/third_party/zlib/zconf.h +511 -0
  668. data/third_party/zlib/zlib.h +1768 -0
  669. data/third_party/zlib/zutil.c +324 -0
  670. data/third_party/zlib/zutil.h +253 -0
  671. metadata +492 -25
  672. data/Rakefile +0 -63
  673. data/src/ruby/lib/grpc/grpc.so +0 -0
@@ -0,0 +1,1252 @@
1
+ /* ====================================================================
2
+ * Copyright (c) 2008 The OpenSSL Project. All rights reserved.
3
+ *
4
+ * Redistribution and use in source and binary forms, with or without
5
+ * modification, are permitted provided that the following conditions
6
+ * are met:
7
+ *
8
+ * 1. Redistributions of source code must retain the above copyright
9
+ * notice, this list of conditions and the following disclaimer.
10
+ *
11
+ * 2. Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in
13
+ * the documentation and/or other materials provided with the
14
+ * distribution.
15
+ *
16
+ * 3. All advertising materials mentioning features or use of this
17
+ * software must display the following acknowledgment:
18
+ * "This product includes software developed by the OpenSSL Project
19
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
20
+ *
21
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22
+ * endorse or promote products derived from this software without
23
+ * prior written permission. For written permission, please contact
24
+ * openssl-core@openssl.org.
25
+ *
26
+ * 5. Products derived from this software may not be called "OpenSSL"
27
+ * nor may "OpenSSL" appear in their names without prior written
28
+ * permission of the OpenSSL Project.
29
+ *
30
+ * 6. Redistributions of any form whatsoever must retain the following
31
+ * acknowledgment:
32
+ * "This product includes software developed by the OpenSSL Project
33
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
34
+ *
35
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
39
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
47
+ * ==================================================================== */
48
+
49
+ #include <openssl/base.h>
50
+
51
+ #include <assert.h>
52
+ #include <string.h>
53
+
54
+ #include <openssl/mem.h>
55
+ #include <openssl/cpu.h>
56
+
57
+ #include "internal.h"
58
+
59
+
60
+ #if !defined(OPENSSL_NO_ASM) && \
61
+ (defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
62
+ defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64))
63
+ #define GHASH_ASM
64
+ #endif
65
+
66
+ #if defined(BSWAP4) && STRICT_ALIGNMENT == 1
67
+ /* redefine, because alignment is ensured */
68
+ #undef GETU32
69
+ #define GETU32(p) BSWAP4(*(const uint32_t *)(p))
70
+ #undef PUTU32
71
+ #define PUTU32(p, v) *(uint32_t *)(p) = BSWAP4(v)
72
+ #endif
73
+
74
+ #define PACK(s) ((size_t)(s) << (sizeof(size_t) * 8 - 16))
75
+ #define REDUCE1BIT(V) \
76
+ do { \
77
+ if (sizeof(size_t) == 8) { \
78
+ uint64_t T = UINT64_C(0xe100000000000000) & (0 - (V.lo & 1)); \
79
+ V.lo = (V.hi << 63) | (V.lo >> 1); \
80
+ V.hi = (V.hi >> 1) ^ T; \
81
+ } else { \
82
+ uint32_t T = 0xe1000000U & (0 - (uint32_t)(V.lo & 1)); \
83
+ V.lo = (V.hi << 63) | (V.lo >> 1); \
84
+ V.hi = (V.hi >> 1) ^ ((uint64_t)T << 32); \
85
+ } \
86
+ } while (0)
87
+
88
+ // kSizeTWithoutLower4Bits is a mask that can be used to zero the lower four
89
+ // bits of a |size_t|.
90
+ static const size_t kSizeTWithoutLower4Bits = (size_t) -16;
91
+
92
+ static void gcm_init_4bit(u128 Htable[16], uint64_t H[2]) {
93
+ u128 V;
94
+
95
+ Htable[0].hi = 0;
96
+ Htable[0].lo = 0;
97
+ V.hi = H[0];
98
+ V.lo = H[1];
99
+
100
+ Htable[8] = V;
101
+ REDUCE1BIT(V);
102
+ Htable[4] = V;
103
+ REDUCE1BIT(V);
104
+ Htable[2] = V;
105
+ REDUCE1BIT(V);
106
+ Htable[1] = V;
107
+ Htable[3].hi = V.hi ^ Htable[2].hi, Htable[3].lo = V.lo ^ Htable[2].lo;
108
+ V = Htable[4];
109
+ Htable[5].hi = V.hi ^ Htable[1].hi, Htable[5].lo = V.lo ^ Htable[1].lo;
110
+ Htable[6].hi = V.hi ^ Htable[2].hi, Htable[6].lo = V.lo ^ Htable[2].lo;
111
+ Htable[7].hi = V.hi ^ Htable[3].hi, Htable[7].lo = V.lo ^ Htable[3].lo;
112
+ V = Htable[8];
113
+ Htable[9].hi = V.hi ^ Htable[1].hi, Htable[9].lo = V.lo ^ Htable[1].lo;
114
+ Htable[10].hi = V.hi ^ Htable[2].hi, Htable[10].lo = V.lo ^ Htable[2].lo;
115
+ Htable[11].hi = V.hi ^ Htable[3].hi, Htable[11].lo = V.lo ^ Htable[3].lo;
116
+ Htable[12].hi = V.hi ^ Htable[4].hi, Htable[12].lo = V.lo ^ Htable[4].lo;
117
+ Htable[13].hi = V.hi ^ Htable[5].hi, Htable[13].lo = V.lo ^ Htable[5].lo;
118
+ Htable[14].hi = V.hi ^ Htable[6].hi, Htable[14].lo = V.lo ^ Htable[6].lo;
119
+ Htable[15].hi = V.hi ^ Htable[7].hi, Htable[15].lo = V.lo ^ Htable[7].lo;
120
+
121
+ #if defined(GHASH_ASM) && defined(OPENSSL_ARM)
122
+ /* ARM assembler expects specific dword order in Htable. */
123
+ {
124
+ int j;
125
+ const union {
126
+ long one;
127
+ char little;
128
+ } is_endian = {1};
129
+
130
+ if (is_endian.little) {
131
+ for (j = 0; j < 16; ++j) {
132
+ V = Htable[j];
133
+ Htable[j].hi = V.lo;
134
+ Htable[j].lo = V.hi;
135
+ }
136
+ } else {
137
+ for (j = 0; j < 16; ++j) {
138
+ V = Htable[j];
139
+ Htable[j].hi = V.lo << 32 | V.lo >> 32;
140
+ Htable[j].lo = V.hi << 32 | V.hi >> 32;
141
+ }
142
+ }
143
+ }
144
+ #endif
145
+ }
146
+
147
+ #if !defined(GHASH_ASM) || defined(OPENSSL_AARCH64)
148
+ static const size_t rem_4bit[16] = {
149
+ PACK(0x0000), PACK(0x1C20), PACK(0x3840), PACK(0x2460),
150
+ PACK(0x7080), PACK(0x6CA0), PACK(0x48C0), PACK(0x54E0),
151
+ PACK(0xE100), PACK(0xFD20), PACK(0xD940), PACK(0xC560),
152
+ PACK(0x9180), PACK(0x8DA0), PACK(0xA9C0), PACK(0xB5E0)};
153
+
154
+ static void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]) {
155
+ u128 Z;
156
+ int cnt = 15;
157
+ size_t rem, nlo, nhi;
158
+ const union {
159
+ long one;
160
+ char little;
161
+ } is_endian = {1};
162
+
163
+ nlo = ((const uint8_t *)Xi)[15];
164
+ nhi = nlo >> 4;
165
+ nlo &= 0xf;
166
+
167
+ Z.hi = Htable[nlo].hi;
168
+ Z.lo = Htable[nlo].lo;
169
+
170
+ while (1) {
171
+ rem = (size_t)Z.lo & 0xf;
172
+ Z.lo = (Z.hi << 60) | (Z.lo >> 4);
173
+ Z.hi = (Z.hi >> 4);
174
+ if (sizeof(size_t) == 8) {
175
+ Z.hi ^= rem_4bit[rem];
176
+ } else {
177
+ Z.hi ^= (uint64_t)rem_4bit[rem] << 32;
178
+ }
179
+
180
+ Z.hi ^= Htable[nhi].hi;
181
+ Z.lo ^= Htable[nhi].lo;
182
+
183
+ if (--cnt < 0) {
184
+ break;
185
+ }
186
+
187
+ nlo = ((const uint8_t *)Xi)[cnt];
188
+ nhi = nlo >> 4;
189
+ nlo &= 0xf;
190
+
191
+ rem = (size_t)Z.lo & 0xf;
192
+ Z.lo = (Z.hi << 60) | (Z.lo >> 4);
193
+ Z.hi = (Z.hi >> 4);
194
+ if (sizeof(size_t) == 8) {
195
+ Z.hi ^= rem_4bit[rem];
196
+ } else {
197
+ Z.hi ^= (uint64_t)rem_4bit[rem] << 32;
198
+ }
199
+
200
+ Z.hi ^= Htable[nlo].hi;
201
+ Z.lo ^= Htable[nlo].lo;
202
+ }
203
+
204
+ if (is_endian.little) {
205
+ #ifdef BSWAP8
206
+ Xi[0] = BSWAP8(Z.hi);
207
+ Xi[1] = BSWAP8(Z.lo);
208
+ #else
209
+ uint8_t *p = (uint8_t *)Xi;
210
+ uint32_t v;
211
+ v = (uint32_t)(Z.hi >> 32);
212
+ PUTU32(p, v);
213
+ v = (uint32_t)(Z.hi);
214
+ PUTU32(p + 4, v);
215
+ v = (uint32_t)(Z.lo >> 32);
216
+ PUTU32(p + 8, v);
217
+ v = (uint32_t)(Z.lo);
218
+ PUTU32(p + 12, v);
219
+ #endif
220
+ } else {
221
+ Xi[0] = Z.hi;
222
+ Xi[1] = Z.lo;
223
+ }
224
+ }
225
+
226
+ /* Streamed gcm_mult_4bit, see CRYPTO_gcm128_[en|de]crypt for
227
+ * details... Compiler-generated code doesn't seem to give any
228
+ * performance improvement, at least not on x86[_64]. It's here
229
+ * mostly as reference and a placeholder for possible future
230
+ * non-trivial optimization[s]... */
231
+ static void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
232
+ size_t len) {
233
+ u128 Z;
234
+ int cnt;
235
+ size_t rem, nlo, nhi;
236
+ const union {
237
+ long one;
238
+ char little;
239
+ } is_endian = {1};
240
+
241
+ do {
242
+ cnt = 15;
243
+ nlo = ((const uint8_t *)Xi)[15];
244
+ nlo ^= inp[15];
245
+ nhi = nlo >> 4;
246
+ nlo &= 0xf;
247
+
248
+ Z.hi = Htable[nlo].hi;
249
+ Z.lo = Htable[nlo].lo;
250
+
251
+ while (1) {
252
+ rem = (size_t)Z.lo & 0xf;
253
+ Z.lo = (Z.hi << 60) | (Z.lo >> 4);
254
+ Z.hi = (Z.hi >> 4);
255
+ if (sizeof(size_t) == 8) {
256
+ Z.hi ^= rem_4bit[rem];
257
+ } else {
258
+ Z.hi ^= (uint64_t)rem_4bit[rem] << 32;
259
+ }
260
+
261
+ Z.hi ^= Htable[nhi].hi;
262
+ Z.lo ^= Htable[nhi].lo;
263
+
264
+ if (--cnt < 0) {
265
+ break;
266
+ }
267
+
268
+ nlo = ((const uint8_t *)Xi)[cnt];
269
+ nlo ^= inp[cnt];
270
+ nhi = nlo >> 4;
271
+ nlo &= 0xf;
272
+
273
+ rem = (size_t)Z.lo & 0xf;
274
+ Z.lo = (Z.hi << 60) | (Z.lo >> 4);
275
+ Z.hi = (Z.hi >> 4);
276
+ if (sizeof(size_t) == 8) {
277
+ Z.hi ^= rem_4bit[rem];
278
+ } else {
279
+ Z.hi ^= (uint64_t)rem_4bit[rem] << 32;
280
+ }
281
+
282
+ Z.hi ^= Htable[nlo].hi;
283
+ Z.lo ^= Htable[nlo].lo;
284
+ }
285
+
286
+ if (is_endian.little) {
287
+ #ifdef BSWAP8
288
+ Xi[0] = BSWAP8(Z.hi);
289
+ Xi[1] = BSWAP8(Z.lo);
290
+ #else
291
+ uint8_t *p = (uint8_t *)Xi;
292
+ uint32_t v;
293
+ v = (uint32_t)(Z.hi >> 32);
294
+ PUTU32(p, v);
295
+ v = (uint32_t)(Z.hi);
296
+ PUTU32(p + 4, v);
297
+ v = (uint32_t)(Z.lo >> 32);
298
+ PUTU32(p + 8, v);
299
+ v = (uint32_t)(Z.lo);
300
+ PUTU32(p + 12, v);
301
+ #endif
302
+ } else {
303
+ Xi[0] = Z.hi;
304
+ Xi[1] = Z.lo;
305
+ }
306
+ } while (inp += 16, len -= 16);
307
+ }
308
+ #else /* GHASH_ASM */
309
+ void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]);
310
+ void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
311
+ size_t len);
312
+ #endif
313
+
314
+ #define GCM_MUL(ctx, Xi) gcm_gmult_4bit(ctx->Xi.u, ctx->Htable)
315
+ #if defined(GHASH_ASM)
316
+ #define GHASH(ctx, in, len) gcm_ghash_4bit((ctx)->Xi.u, (ctx)->Htable, in, len)
317
+ /* GHASH_CHUNK is "stride parameter" missioned to mitigate cache
318
+ * trashing effect. In other words idea is to hash data while it's
319
+ * still in L1 cache after encryption pass... */
320
+ #define GHASH_CHUNK (3 * 1024)
321
+ #endif
322
+
323
+
324
+ #if defined(GHASH_ASM)
325
+ #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
326
+ #define GHASH_ASM_X86_OR_64
327
+ #define GCM_FUNCREF_4BIT
328
+ void gcm_init_clmul(u128 Htable[16], const uint64_t Xi[2]);
329
+ void gcm_gmult_clmul(uint64_t Xi[2], const u128 Htable[16]);
330
+ void gcm_ghash_clmul(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
331
+ size_t len);
332
+
333
+ #if defined(OPENSSL_X86)
334
+ #define gcm_init_avx gcm_init_clmul
335
+ #define gcm_gmult_avx gcm_gmult_clmul
336
+ #define gcm_ghash_avx gcm_ghash_clmul
337
+ #else
338
+ void gcm_init_avx(u128 Htable[16], const uint64_t Xi[2]);
339
+ void gcm_gmult_avx(uint64_t Xi[2], const u128 Htable[16]);
340
+ void gcm_ghash_avx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp, size_t len);
341
+ #endif
342
+
343
+ #if defined(OPENSSL_X86)
344
+ #define GHASH_ASM_X86
345
+ void gcm_gmult_4bit_mmx(uint64_t Xi[2], const u128 Htable[16]);
346
+ void gcm_ghash_4bit_mmx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
347
+ size_t len);
348
+
349
+ void gcm_gmult_4bit_x86(uint64_t Xi[2], const u128 Htable[16]);
350
+ void gcm_ghash_4bit_x86(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
351
+ size_t len);
352
+ #endif
353
+ #elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
354
+ #include <openssl/arm_arch.h>
355
+ #if __ARM_ARCH__ >= 7
356
+ #define GHASH_ASM_ARM
357
+ #define GCM_FUNCREF_4BIT
358
+
359
+ static int pmull_capable(void) {
360
+ return CRYPTO_is_ARMv8_PMULL_capable();
361
+ }
362
+
363
+ void gcm_init_v8(u128 Htable[16], const uint64_t Xi[2]);
364
+ void gcm_gmult_v8(uint64_t Xi[2], const u128 Htable[16]);
365
+ void gcm_ghash_v8(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
366
+ size_t len);
367
+
368
+ #if defined(OPENSSL_ARM)
369
+ /* 32-bit ARM also has support for doing GCM with NEON instructions. */
370
+ static int neon_capable(void) {
371
+ return CRYPTO_is_NEON_capable();
372
+ }
373
+
374
+ void gcm_init_neon(u128 Htable[16], const uint64_t Xi[2]);
375
+ void gcm_gmult_neon(uint64_t Xi[2], const u128 Htable[16]);
376
+ void gcm_ghash_neon(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
377
+ size_t len);
378
+ #else
379
+ /* AArch64 only has the ARMv8 versions of functions. */
380
+ static int neon_capable(void) {
381
+ return 0;
382
+ }
383
+ void gcm_init_neon(u128 Htable[16], const uint64_t Xi[2]) {
384
+ abort();
385
+ }
386
+ void gcm_gmult_neon(uint64_t Xi[2], const u128 Htable[16]) {
387
+ abort();
388
+ }
389
+ void gcm_ghash_neon(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
390
+ size_t len) {
391
+ abort();
392
+ }
393
+ #endif
394
+
395
+ #endif
396
+ #endif
397
+ #endif
398
+
399
+ #ifdef GCM_FUNCREF_4BIT
400
+ #undef GCM_MUL
401
+ #define GCM_MUL(ctx, Xi) (*gcm_gmult_p)(ctx->Xi.u, ctx->Htable)
402
+ #ifdef GHASH
403
+ #undef GHASH
404
+ #define GHASH(ctx, in, len) (*gcm_ghash_p)(ctx->Xi.u, ctx->Htable, in, len)
405
+ #endif
406
+ #endif
407
+
408
+ GCM128_CONTEXT *CRYPTO_gcm128_new(const void *key, block128_f block) {
409
+ GCM128_CONTEXT *ret;
410
+
411
+ ret = (GCM128_CONTEXT *)OPENSSL_malloc(sizeof(GCM128_CONTEXT));
412
+ if (ret != NULL) {
413
+ CRYPTO_gcm128_init(ret, key, block);
414
+ }
415
+
416
+ return ret;
417
+ }
418
+
419
+ void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, const void *key,
420
+ block128_f block) {
421
+ const union {
422
+ long one;
423
+ char little;
424
+ } is_endian = {1};
425
+
426
+ memset(ctx, 0, sizeof(*ctx));
427
+ ctx->block = block;
428
+
429
+ (*block)(ctx->H.c, ctx->H.c, key);
430
+
431
+ if (is_endian.little) {
432
+ /* H is stored in host byte order */
433
+ #ifdef BSWAP8
434
+ ctx->H.u[0] = BSWAP8(ctx->H.u[0]);
435
+ ctx->H.u[1] = BSWAP8(ctx->H.u[1]);
436
+ #else
437
+ uint8_t *p = ctx->H.c;
438
+ uint64_t hi, lo;
439
+ hi = (uint64_t)GETU32(p) << 32 | GETU32(p + 4);
440
+ lo = (uint64_t)GETU32(p + 8) << 32 | GETU32(p + 12);
441
+ ctx->H.u[0] = hi;
442
+ ctx->H.u[1] = lo;
443
+ #endif
444
+ }
445
+
446
+ #if defined(GHASH_ASM_X86_OR_64)
447
+ if (crypto_gcm_clmul_enabled()) {
448
+ if (((OPENSSL_ia32cap_P[1] >> 22) & 0x41) == 0x41) { /* AVX+MOVBE */
449
+ gcm_init_avx(ctx->Htable, ctx->H.u);
450
+ ctx->gmult = gcm_gmult_avx;
451
+ ctx->ghash = gcm_ghash_avx;
452
+ } else {
453
+ gcm_init_clmul(ctx->Htable, ctx->H.u);
454
+ ctx->gmult = gcm_gmult_clmul;
455
+ ctx->ghash = gcm_ghash_clmul;
456
+ }
457
+ return;
458
+ }
459
+ gcm_init_4bit(ctx->Htable, ctx->H.u);
460
+ #if defined(GHASH_ASM_X86) /* x86 only */
461
+ if (OPENSSL_ia32cap_P[0] & (1 << 25)) { /* check SSE bit */
462
+ ctx->gmult = gcm_gmult_4bit_mmx;
463
+ ctx->ghash = gcm_ghash_4bit_mmx;
464
+ } else {
465
+ ctx->gmult = gcm_gmult_4bit_x86;
466
+ ctx->ghash = gcm_ghash_4bit_x86;
467
+ }
468
+ #else
469
+ ctx->gmult = gcm_gmult_4bit;
470
+ ctx->ghash = gcm_ghash_4bit;
471
+ #endif
472
+ #elif defined(GHASH_ASM_ARM)
473
+ if (pmull_capable()) {
474
+ gcm_init_v8(ctx->Htable, ctx->H.u);
475
+ ctx->gmult = gcm_gmult_v8;
476
+ ctx->ghash = gcm_ghash_v8;
477
+ } else if (neon_capable()) {
478
+ gcm_init_neon(ctx->Htable,ctx->H.u);
479
+ ctx->gmult = gcm_gmult_neon;
480
+ ctx->ghash = gcm_ghash_neon;
481
+ } else {
482
+ gcm_init_4bit(ctx->Htable, ctx->H.u);
483
+ ctx->gmult = gcm_gmult_4bit;
484
+ ctx->ghash = gcm_ghash_4bit;
485
+ }
486
+ #else
487
+ gcm_init_4bit(ctx->Htable, ctx->H.u);
488
+ ctx->gmult = gcm_gmult_4bit;
489
+ ctx->ghash = gcm_ghash_4bit;
490
+ #endif
491
+ }
492
+
493
+ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const void *key,
494
+ const uint8_t *iv, size_t len) {
495
+ const union {
496
+ long one;
497
+ char little;
498
+ } is_endian = {1};
499
+ unsigned int ctr;
500
+ #ifdef GCM_FUNCREF_4BIT
501
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
502
+ #endif
503
+
504
+ ctx->Yi.u[0] = 0;
505
+ ctx->Yi.u[1] = 0;
506
+ ctx->Xi.u[0] = 0;
507
+ ctx->Xi.u[1] = 0;
508
+ ctx->len.u[0] = 0; /* AAD length */
509
+ ctx->len.u[1] = 0; /* message length */
510
+ ctx->ares = 0;
511
+ ctx->mres = 0;
512
+
513
+ if (len == 12) {
514
+ memcpy(ctx->Yi.c, iv, 12);
515
+ ctx->Yi.c[15] = 1;
516
+ ctr = 1;
517
+ } else {
518
+ size_t i;
519
+ uint64_t len0 = len;
520
+
521
+ while (len >= 16) {
522
+ for (i = 0; i < 16; ++i) {
523
+ ctx->Yi.c[i] ^= iv[i];
524
+ }
525
+ GCM_MUL(ctx, Yi);
526
+ iv += 16;
527
+ len -= 16;
528
+ }
529
+ if (len) {
530
+ for (i = 0; i < len; ++i) {
531
+ ctx->Yi.c[i] ^= iv[i];
532
+ }
533
+ GCM_MUL(ctx, Yi);
534
+ }
535
+ len0 <<= 3;
536
+ if (is_endian.little) {
537
+ #ifdef BSWAP8
538
+ ctx->Yi.u[1] ^= BSWAP8(len0);
539
+ #else
540
+ ctx->Yi.c[8] ^= (uint8_t)(len0 >> 56);
541
+ ctx->Yi.c[9] ^= (uint8_t)(len0 >> 48);
542
+ ctx->Yi.c[10] ^= (uint8_t)(len0 >> 40);
543
+ ctx->Yi.c[11] ^= (uint8_t)(len0 >> 32);
544
+ ctx->Yi.c[12] ^= (uint8_t)(len0 >> 24);
545
+ ctx->Yi.c[13] ^= (uint8_t)(len0 >> 16);
546
+ ctx->Yi.c[14] ^= (uint8_t)(len0 >> 8);
547
+ ctx->Yi.c[15] ^= (uint8_t)(len0);
548
+ #endif
549
+ } else {
550
+ ctx->Yi.u[1] ^= len0;
551
+ }
552
+
553
+ GCM_MUL(ctx, Yi);
554
+
555
+ if (is_endian.little) {
556
+ ctr = GETU32(ctx->Yi.c + 12);
557
+ } else {
558
+ ctr = ctx->Yi.d[3];
559
+ }
560
+ }
561
+
562
+ (*ctx->block)(ctx->Yi.c, ctx->EK0.c, key);
563
+ ++ctr;
564
+ if (is_endian.little) {
565
+ PUTU32(ctx->Yi.c + 12, ctr);
566
+ } else {
567
+ ctx->Yi.d[3] = ctr;
568
+ }
569
+ }
570
+
571
+ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
572
+ size_t i;
573
+ unsigned int n;
574
+ uint64_t alen = ctx->len.u[0];
575
+ #ifdef GCM_FUNCREF_4BIT
576
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
577
+ #ifdef GHASH
578
+ void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
579
+ size_t len) = ctx->ghash;
580
+ #endif
581
+ #endif
582
+
583
+ if (ctx->len.u[1]) {
584
+ return 0;
585
+ }
586
+
587
+ alen += len;
588
+ if (alen > (UINT64_C(1) << 61) || (sizeof(len) == 8 && alen < len)) {
589
+ return 0;
590
+ }
591
+ ctx->len.u[0] = alen;
592
+
593
+ n = ctx->ares;
594
+ if (n) {
595
+ while (n && len) {
596
+ ctx->Xi.c[n] ^= *(aad++);
597
+ --len;
598
+ n = (n + 1) % 16;
599
+ }
600
+ if (n == 0) {
601
+ GCM_MUL(ctx, Xi);
602
+ } else {
603
+ ctx->ares = n;
604
+ return 1;
605
+ }
606
+ }
607
+
608
+ #ifdef GHASH
609
+ if ((i = (len & (size_t) - 16))) {
610
+ GHASH(ctx, aad, i);
611
+ aad += i;
612
+ len -= i;
613
+ }
614
+ #else
615
+ while (len >= 16) {
616
+ for (i = 0; i < 16; ++i) {
617
+ ctx->Xi.c[i] ^= aad[i];
618
+ }
619
+ GCM_MUL(ctx, Xi);
620
+ aad += 16;
621
+ len -= 16;
622
+ }
623
+ #endif
624
+ if (len) {
625
+ n = (unsigned int)len;
626
+ for (i = 0; i < len; ++i) {
627
+ ctx->Xi.c[i] ^= aad[i];
628
+ }
629
+ }
630
+
631
+ ctx->ares = n;
632
+ return 1;
633
+ }
634
+
635
+ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
636
+ const unsigned char *in, unsigned char *out,
637
+ size_t len) {
638
+ const union {
639
+ long one;
640
+ char little;
641
+ } is_endian = {1};
642
+ unsigned int n, ctr;
643
+ size_t i;
644
+ uint64_t mlen = ctx->len.u[1];
645
+ block128_f block = ctx->block;
646
+ #ifdef GCM_FUNCREF_4BIT
647
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
648
+ #ifdef GHASH
649
+ void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
650
+ size_t len) = ctx->ghash;
651
+ #endif
652
+ #endif
653
+
654
+ mlen += len;
655
+ if (mlen > ((UINT64_C(1) << 36) - 32) ||
656
+ (sizeof(len) == 8 && mlen < len)) {
657
+ return 0;
658
+ }
659
+ ctx->len.u[1] = mlen;
660
+
661
+ if (ctx->ares) {
662
+ /* First call to encrypt finalizes GHASH(AAD) */
663
+ GCM_MUL(ctx, Xi);
664
+ ctx->ares = 0;
665
+ }
666
+
667
+ if (is_endian.little) {
668
+ ctr = GETU32(ctx->Yi.c + 12);
669
+ } else {
670
+ ctr = ctx->Yi.d[3];
671
+ }
672
+
673
+ n = ctx->mres;
674
+ if (n) {
675
+ while (n && len) {
676
+ ctx->Xi.c[n] ^= *(out++) = *(in++) ^ ctx->EKi.c[n];
677
+ --len;
678
+ n = (n + 1) % 16;
679
+ }
680
+ if (n == 0) {
681
+ GCM_MUL(ctx, Xi);
682
+ } else {
683
+ ctx->mres = n;
684
+ return 1;
685
+ }
686
+ }
687
+ if (STRICT_ALIGNMENT && ((size_t)in | (size_t)out) % sizeof(size_t) != 0) {
688
+ for (i = 0; i < len; ++i) {
689
+ if (n == 0) {
690
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
691
+ ++ctr;
692
+ if (is_endian.little) {
693
+ PUTU32(ctx->Yi.c + 12, ctr);
694
+ } else {
695
+ ctx->Yi.d[3] = ctr;
696
+ }
697
+ }
698
+ ctx->Xi.c[n] ^= out[i] = in[i] ^ ctx->EKi.c[n];
699
+ n = (n + 1) % 16;
700
+ if (n == 0) {
701
+ GCM_MUL(ctx, Xi);
702
+ }
703
+ }
704
+
705
+ ctx->mres = n;
706
+ return 1;
707
+ }
708
+ #if defined(GHASH) && defined(GHASH_CHUNK)
709
+ while (len >= GHASH_CHUNK) {
710
+ size_t j = GHASH_CHUNK;
711
+
712
+ while (j) {
713
+ size_t *out_t = (size_t *)out;
714
+ const size_t *in_t = (const size_t *)in;
715
+
716
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
717
+ ++ctr;
718
+ if (is_endian.little) {
719
+ PUTU32(ctx->Yi.c + 12, ctr);
720
+ } else {
721
+ ctx->Yi.d[3] = ctr;
722
+ }
723
+ for (i = 0; i < 16 / sizeof(size_t); ++i) {
724
+ out_t[i] = in_t[i] ^ ctx->EKi.t[i];
725
+ }
726
+ out += 16;
727
+ in += 16;
728
+ j -= 16;
729
+ }
730
+ GHASH(ctx, out - GHASH_CHUNK, GHASH_CHUNK);
731
+ len -= GHASH_CHUNK;
732
+ }
733
+ if ((i = (len & (size_t) - 16))) {
734
+ size_t j = i;
735
+
736
+ while (len >= 16) {
737
+ size_t *out_t = (size_t *)out;
738
+ const size_t *in_t = (const size_t *)in;
739
+
740
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
741
+ ++ctr;
742
+ if (is_endian.little) {
743
+ PUTU32(ctx->Yi.c + 12, ctr);
744
+ } else {
745
+ ctx->Yi.d[3] = ctr;
746
+ }
747
+ for (i = 0; i < 16 / sizeof(size_t); ++i) {
748
+ out_t[i] = in_t[i] ^ ctx->EKi.t[i];
749
+ }
750
+ out += 16;
751
+ in += 16;
752
+ len -= 16;
753
+ }
754
+ GHASH(ctx, out - j, j);
755
+ }
756
+ #else
757
+ while (len >= 16) {
758
+ size_t *out_t = (size_t *)out;
759
+ const size_t *in_t = (const size_t *)in;
760
+
761
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
762
+ ++ctr;
763
+ if (is_endian.little) {
764
+ PUTU32(ctx->Yi.c + 12, ctr);
765
+ } else {
766
+ ctx->Yi.d[3] = ctr;
767
+ }
768
+ for (i = 0; i < 16 / sizeof(size_t); ++i) {
769
+ ctx->Xi.t[i] ^= out_t[i] = in_t[i] ^ ctx->EKi.t[i];
770
+ }
771
+ GCM_MUL(ctx, Xi);
772
+ out += 16;
773
+ in += 16;
774
+ len -= 16;
775
+ }
776
+ #endif
777
+ if (len) {
778
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
779
+ ++ctr;
780
+ if (is_endian.little) {
781
+ PUTU32(ctx->Yi.c + 12, ctr);
782
+ } else {
783
+ ctx->Yi.d[3] = ctr;
784
+ }
785
+ while (len--) {
786
+ ctx->Xi.c[n] ^= out[n] = in[n] ^ ctx->EKi.c[n];
787
+ ++n;
788
+ }
789
+ }
790
+
791
+ ctx->mres = n;
792
+ return 1;
793
+ }
794
+
795
+ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
796
+ const unsigned char *in, unsigned char *out,
797
+ size_t len) {
798
+ const union {
799
+ long one;
800
+ char little;
801
+ } is_endian = {1};
802
+ unsigned int n, ctr;
803
+ size_t i;
804
+ uint64_t mlen = ctx->len.u[1];
805
+ block128_f block = ctx->block;
806
+ #ifdef GCM_FUNCREF_4BIT
807
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
808
+ #ifdef GHASH
809
+ void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
810
+ size_t len) = ctx->ghash;
811
+ #endif
812
+ #endif
813
+
814
+ mlen += len;
815
+ if (mlen > ((UINT64_C(1) << 36) - 32) ||
816
+ (sizeof(len) == 8 && mlen < len)) {
817
+ return 0;
818
+ }
819
+ ctx->len.u[1] = mlen;
820
+
821
+ if (ctx->ares) {
822
+ /* First call to decrypt finalizes GHASH(AAD) */
823
+ GCM_MUL(ctx, Xi);
824
+ ctx->ares = 0;
825
+ }
826
+
827
+ if (is_endian.little) {
828
+ ctr = GETU32(ctx->Yi.c + 12);
829
+ } else {
830
+ ctr = ctx->Yi.d[3];
831
+ }
832
+
833
+ n = ctx->mres;
834
+ if (n) {
835
+ while (n && len) {
836
+ uint8_t c = *(in++);
837
+ *(out++) = c ^ ctx->EKi.c[n];
838
+ ctx->Xi.c[n] ^= c;
839
+ --len;
840
+ n = (n + 1) % 16;
841
+ }
842
+ if (n == 0) {
843
+ GCM_MUL(ctx, Xi);
844
+ } else {
845
+ ctx->mres = n;
846
+ return 1;
847
+ }
848
+ }
849
+ if (STRICT_ALIGNMENT && ((size_t)in | (size_t)out) % sizeof(size_t) != 0) {
850
+ for (i = 0; i < len; ++i) {
851
+ uint8_t c;
852
+ if (n == 0) {
853
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
854
+ ++ctr;
855
+ if (is_endian.little) {
856
+ PUTU32(ctx->Yi.c + 12, ctr);
857
+ } else {
858
+ ctx->Yi.d[3] = ctr;
859
+ }
860
+ }
861
+ c = in[i];
862
+ out[i] = c ^ ctx->EKi.c[n];
863
+ ctx->Xi.c[n] ^= c;
864
+ n = (n + 1) % 16;
865
+ if (n == 0) {
866
+ GCM_MUL(ctx, Xi);
867
+ }
868
+ }
869
+
870
+ ctx->mres = n;
871
+ return 1;
872
+ }
873
+ #if defined(GHASH) && defined(GHASH_CHUNK)
874
+ while (len >= GHASH_CHUNK) {
875
+ size_t j = GHASH_CHUNK;
876
+
877
+ GHASH(ctx, in, GHASH_CHUNK);
878
+ while (j) {
879
+ size_t *out_t = (size_t *)out;
880
+ const size_t *in_t = (const size_t *)in;
881
+
882
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
883
+ ++ctr;
884
+ if (is_endian.little) {
885
+ PUTU32(ctx->Yi.c + 12, ctr);
886
+ } else {
887
+ ctx->Yi.d[3] = ctr;
888
+ }
889
+ for (i = 0; i < 16 / sizeof(size_t); ++i) {
890
+ out_t[i] = in_t[i] ^ ctx->EKi.t[i];
891
+ }
892
+ out += 16;
893
+ in += 16;
894
+ j -= 16;
895
+ }
896
+ len -= GHASH_CHUNK;
897
+ }
898
+ if ((i = (len & (size_t) - 16))) {
899
+ GHASH(ctx, in, i);
900
+ while (len >= 16) {
901
+ size_t *out_t = (size_t *)out;
902
+ const size_t *in_t = (const size_t *)in;
903
+
904
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
905
+ ++ctr;
906
+ if (is_endian.little) {
907
+ PUTU32(ctx->Yi.c + 12, ctr);
908
+ } else {
909
+ ctx->Yi.d[3] = ctr;
910
+ }
911
+ for (i = 0; i < 16 / sizeof(size_t); ++i) {
912
+ out_t[i] = in_t[i] ^ ctx->EKi.t[i];
913
+ }
914
+ out += 16;
915
+ in += 16;
916
+ len -= 16;
917
+ }
918
+ }
919
+ #else
920
+ while (len >= 16) {
921
+ size_t *out_t = (size_t *)out;
922
+ const size_t *in_t = (const size_t *)in;
923
+
924
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
925
+ ++ctr;
926
+ if (is_endian.little) {
927
+ PUTU32(ctx->Yi.c + 12, ctr);
928
+ } else {
929
+ ctx->Yi.d[3] = ctr;
930
+ }
931
+ for (i = 0; i < 16 / sizeof(size_t); ++i) {
932
+ size_t c = in_t[i];
933
+ out_t[i] = c ^ ctx->EKi.t[i];
934
+ ctx->Xi.t[i] ^= c;
935
+ }
936
+ GCM_MUL(ctx, Xi);
937
+ out += 16;
938
+ in += 16;
939
+ len -= 16;
940
+ }
941
+ #endif
942
+ if (len) {
943
+ (*block)(ctx->Yi.c, ctx->EKi.c, key);
944
+ ++ctr;
945
+ if (is_endian.little) {
946
+ PUTU32(ctx->Yi.c + 12, ctr);
947
+ } else {
948
+ ctx->Yi.d[3] = ctr;
949
+ }
950
+ while (len--) {
951
+ uint8_t c = in[n];
952
+ ctx->Xi.c[n] ^= c;
953
+ out[n] = c ^ ctx->EKi.c[n];
954
+ ++n;
955
+ }
956
+ }
957
+
958
+ ctx->mres = n;
959
+ return 1;
960
+ }
961
+
962
+ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
963
+ const uint8_t *in, uint8_t *out, size_t len,
964
+ ctr128_f stream) {
965
+ const union {
966
+ long one;
967
+ char little;
968
+ } is_endian = {1};
969
+ unsigned int n, ctr;
970
+ uint64_t mlen = ctx->len.u[1];
971
+ #ifdef GCM_FUNCREF_4BIT
972
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
973
+ #ifdef GHASH
974
+ void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
975
+ size_t len) = ctx->ghash;
976
+ #endif
977
+ #endif
978
+
979
+ mlen += len;
980
+ if (mlen > ((UINT64_C(1) << 36) - 32) ||
981
+ (sizeof(len) == 8 && mlen < len)) {
982
+ return 0;
983
+ }
984
+ ctx->len.u[1] = mlen;
985
+
986
+ if (ctx->ares) {
987
+ /* First call to encrypt finalizes GHASH(AAD) */
988
+ GCM_MUL(ctx, Xi);
989
+ ctx->ares = 0;
990
+ }
991
+
992
+ if (is_endian.little) {
993
+ ctr = GETU32(ctx->Yi.c + 12);
994
+ } else {
995
+ ctr = ctx->Yi.d[3];
996
+ }
997
+
998
+ n = ctx->mres;
999
+ if (n) {
1000
+ while (n && len) {
1001
+ ctx->Xi.c[n] ^= *(out++) = *(in++) ^ ctx->EKi.c[n];
1002
+ --len;
1003
+ n = (n + 1) % 16;
1004
+ }
1005
+ if (n == 0) {
1006
+ GCM_MUL(ctx, Xi);
1007
+ } else {
1008
+ ctx->mres = n;
1009
+ return 1;
1010
+ }
1011
+ }
1012
+ #if defined(GHASH)
1013
+ while (len >= GHASH_CHUNK) {
1014
+ (*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
1015
+ ctr += GHASH_CHUNK / 16;
1016
+ if (is_endian.little) {
1017
+ PUTU32(ctx->Yi.c + 12, ctr);
1018
+ } else {
1019
+ ctx->Yi.d[3] = ctr;
1020
+ }
1021
+ GHASH(ctx, out, GHASH_CHUNK);
1022
+ out += GHASH_CHUNK;
1023
+ in += GHASH_CHUNK;
1024
+ len -= GHASH_CHUNK;
1025
+ }
1026
+ #endif
1027
+ size_t i = len & kSizeTWithoutLower4Bits;
1028
+ if (i != 0) {
1029
+ size_t j = i / 16;
1030
+
1031
+ (*stream)(in, out, j, key, ctx->Yi.c);
1032
+ ctr += (unsigned int)j;
1033
+ if (is_endian.little) {
1034
+ PUTU32(ctx->Yi.c + 12, ctr);
1035
+ } else {
1036
+ ctx->Yi.d[3] = ctr;
1037
+ }
1038
+ in += i;
1039
+ len -= i;
1040
+ #if defined(GHASH)
1041
+ GHASH(ctx, out, i);
1042
+ out += i;
1043
+ #else
1044
+ while (j--) {
1045
+ for (i = 0; i < 16; ++i) {
1046
+ ctx->Xi.c[i] ^= out[i];
1047
+ }
1048
+ GCM_MUL(ctx, Xi);
1049
+ out += 16;
1050
+ }
1051
+ #endif
1052
+ }
1053
+ if (len) {
1054
+ (*ctx->block)(ctx->Yi.c, ctx->EKi.c, key);
1055
+ ++ctr;
1056
+ if (is_endian.little) {
1057
+ PUTU32(ctx->Yi.c + 12, ctr);
1058
+ } else {
1059
+ ctx->Yi.d[3] = ctr;
1060
+ }
1061
+ while (len--) {
1062
+ ctx->Xi.c[n] ^= out[n] = in[n] ^ ctx->EKi.c[n];
1063
+ ++n;
1064
+ }
1065
+ }
1066
+
1067
+ ctx->mres = n;
1068
+ return 1;
1069
+ }
1070
+
1071
+ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
1072
+ const uint8_t *in, uint8_t *out, size_t len,
1073
+ ctr128_f stream) {
1074
+ const union {
1075
+ long one;
1076
+ char little;
1077
+ } is_endian = {1};
1078
+ unsigned int n, ctr;
1079
+ uint64_t mlen = ctx->len.u[1];
1080
+ #ifdef GCM_FUNCREF_4BIT
1081
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
1082
+ #ifdef GHASH
1083
+ void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
1084
+ size_t len) = ctx->ghash;
1085
+ #endif
1086
+ #endif
1087
+
1088
+ mlen += len;
1089
+ if (mlen > ((UINT64_C(1) << 36) - 32) ||
1090
+ (sizeof(len) == 8 && mlen < len)) {
1091
+ return 0;
1092
+ }
1093
+ ctx->len.u[1] = mlen;
1094
+
1095
+ if (ctx->ares) {
1096
+ /* First call to decrypt finalizes GHASH(AAD) */
1097
+ GCM_MUL(ctx, Xi);
1098
+ ctx->ares = 0;
1099
+ }
1100
+
1101
+ if (is_endian.little) {
1102
+ ctr = GETU32(ctx->Yi.c + 12);
1103
+ } else {
1104
+ ctr = ctx->Yi.d[3];
1105
+ }
1106
+
1107
+ n = ctx->mres;
1108
+ if (n) {
1109
+ while (n && len) {
1110
+ uint8_t c = *(in++);
1111
+ *(out++) = c ^ ctx->EKi.c[n];
1112
+ ctx->Xi.c[n] ^= c;
1113
+ --len;
1114
+ n = (n + 1) % 16;
1115
+ }
1116
+ if (n == 0) {
1117
+ GCM_MUL(ctx, Xi);
1118
+ } else {
1119
+ ctx->mres = n;
1120
+ return 1;
1121
+ }
1122
+ }
1123
+ #if defined(GHASH)
1124
+ while (len >= GHASH_CHUNK) {
1125
+ GHASH(ctx, in, GHASH_CHUNK);
1126
+ (*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
1127
+ ctr += GHASH_CHUNK / 16;
1128
+ if (is_endian.little) {
1129
+ PUTU32(ctx->Yi.c + 12, ctr);
1130
+ } else {
1131
+ ctx->Yi.d[3] = ctr;
1132
+ }
1133
+ out += GHASH_CHUNK;
1134
+ in += GHASH_CHUNK;
1135
+ len -= GHASH_CHUNK;
1136
+ }
1137
+ #endif
1138
+ size_t i = len & kSizeTWithoutLower4Bits;
1139
+ if (i != 0) {
1140
+ size_t j = i / 16;
1141
+
1142
+ #if defined(GHASH)
1143
+ GHASH(ctx, in, i);
1144
+ #else
1145
+ while (j--) {
1146
+ size_t k;
1147
+ for (k = 0; k < 16; ++k) {
1148
+ ctx->Xi.c[k] ^= in[k];
1149
+ }
1150
+ GCM_MUL(ctx, Xi);
1151
+ in += 16;
1152
+ }
1153
+ j = i / 16;
1154
+ in -= i;
1155
+ #endif
1156
+ (*stream)(in, out, j, key, ctx->Yi.c);
1157
+ ctr += (unsigned int)j;
1158
+ if (is_endian.little) {
1159
+ PUTU32(ctx->Yi.c + 12, ctr);
1160
+ } else {
1161
+ ctx->Yi.d[3] = ctr;
1162
+ }
1163
+ out += i;
1164
+ in += i;
1165
+ len -= i;
1166
+ }
1167
+ if (len) {
1168
+ (*ctx->block)(ctx->Yi.c, ctx->EKi.c, key);
1169
+ ++ctr;
1170
+ if (is_endian.little) {
1171
+ PUTU32(ctx->Yi.c + 12, ctr);
1172
+ } else {
1173
+ ctx->Yi.d[3] = ctr;
1174
+ }
1175
+ while (len--) {
1176
+ uint8_t c = in[n];
1177
+ ctx->Xi.c[n] ^= c;
1178
+ out[n] = c ^ ctx->EKi.c[n];
1179
+ ++n;
1180
+ }
1181
+ }
1182
+
1183
+ ctx->mres = n;
1184
+ return 1;
1185
+ }
1186
+
1187
+ int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const uint8_t *tag, size_t len) {
1188
+ const union {
1189
+ long one;
1190
+ char little;
1191
+ } is_endian = {1};
1192
+ uint64_t alen = ctx->len.u[0] << 3;
1193
+ uint64_t clen = ctx->len.u[1] << 3;
1194
+ #ifdef GCM_FUNCREF_4BIT
1195
+ void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) = ctx->gmult;
1196
+ #endif
1197
+
1198
+ if (ctx->mres || ctx->ares) {
1199
+ GCM_MUL(ctx, Xi);
1200
+ }
1201
+
1202
+ if (is_endian.little) {
1203
+ #ifdef BSWAP8
1204
+ alen = BSWAP8(alen);
1205
+ clen = BSWAP8(clen);
1206
+ #else
1207
+ uint8_t *p = ctx->len.c;
1208
+
1209
+ ctx->len.u[0] = alen;
1210
+ ctx->len.u[1] = clen;
1211
+
1212
+ alen = (uint64_t)GETU32(p) << 32 | GETU32(p + 4);
1213
+ clen = (uint64_t)GETU32(p + 8) << 32 | GETU32(p + 12);
1214
+ #endif
1215
+ }
1216
+
1217
+ ctx->Xi.u[0] ^= alen;
1218
+ ctx->Xi.u[1] ^= clen;
1219
+ GCM_MUL(ctx, Xi);
1220
+
1221
+ ctx->Xi.u[0] ^= ctx->EK0.u[0];
1222
+ ctx->Xi.u[1] ^= ctx->EK0.u[1];
1223
+
1224
+ if (tag && len <= sizeof(ctx->Xi)) {
1225
+ return CRYPTO_memcmp(ctx->Xi.c, tag, len) == 0;
1226
+ } else {
1227
+ return 0;
1228
+ }
1229
+ }
1230
+
1231
+ void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len) {
1232
+ CRYPTO_gcm128_finish(ctx, NULL, 0);
1233
+ memcpy(tag, ctx->Xi.c, len <= sizeof(ctx->Xi.c) ? len : sizeof(ctx->Xi.c));
1234
+ }
1235
+
1236
+ void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx) {
1237
+ if (ctx) {
1238
+ OPENSSL_cleanse(ctx, sizeof(*ctx));
1239
+ OPENSSL_free(ctx);
1240
+ }
1241
+ }
1242
+
1243
+ #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
1244
+ int crypto_gcm_clmul_enabled(void) {
1245
+ #ifdef GHASH_ASM
1246
+ return OPENSSL_ia32cap_P[0] & (1 << 24) && /* check FXSR bit */
1247
+ OPENSSL_ia32cap_P[1] & (1 << 1); /* check PCLMULQDQ bit */
1248
+ #else
1249
+ return 0;
1250
+ #endif
1251
+ }
1252
+ #endif