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,278 @@
1
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2
+ * All rights reserved.
3
+ *
4
+ * This package is an SSL implementation written
5
+ * by Eric Young (eay@cryptsoft.com).
6
+ * The implementation was written so as to conform with Netscapes SSL.
7
+ *
8
+ * This library is free for commercial and non-commercial use as long as
9
+ * the following conditions are aheared to. The following conditions
10
+ * apply to all code found in this distribution, be it the RC4, RSA,
11
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12
+ * included with this distribution is covered by the same copyright terms
13
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14
+ *
15
+ * Copyright remains Eric Young's, and as such any Copyright notices in
16
+ * the code are not to be removed.
17
+ * If this package is used in a product, Eric Young should be given attribution
18
+ * as the author of the parts of the library used.
19
+ * This can be in the form of a textual message at program startup or
20
+ * in documentation (online or textual) provided with the package.
21
+ *
22
+ * Redistribution and use in source and binary forms, with or without
23
+ * modification, are permitted provided that the following conditions
24
+ * are met:
25
+ * 1. Redistributions of source code must retain the copyright
26
+ * notice, this list of conditions and the following disclaimer.
27
+ * 2. Redistributions in binary form must reproduce the above copyright
28
+ * notice, this list of conditions and the following disclaimer in the
29
+ * documentation and/or other materials provided with the distribution.
30
+ * 3. All advertising materials mentioning features or use of this software
31
+ * must display the following acknowledgement:
32
+ * "This product includes cryptographic software written by
33
+ * Eric Young (eay@cryptsoft.com)"
34
+ * The word 'cryptographic' can be left out if the rouines from the library
35
+ * being used are not cryptographic related :-).
36
+ * 4. If you include any Windows specific code (or a derivative thereof) from
37
+ * the apps directory (application code) you must include an acknowledgement:
38
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39
+ *
40
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50
+ * SUCH DAMAGE.
51
+ *
52
+ * The licence and distribution terms for any publically available version or
53
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
54
+ * copied and put under another distribution licence
55
+ * [including the GNU Public Licence.] */
56
+
57
+ #ifndef OPENSSL_HEADER_EVP_INTERNAL_H
58
+ #define OPENSSL_HEADER_EVP_INTERNAL_H
59
+
60
+ #include <openssl/base.h>
61
+
62
+ #if defined(__cplusplus)
63
+ extern "C" {
64
+ #endif
65
+
66
+
67
+ /* These values are flags for EVP_PKEY_ASN1_METHOD.flags. */
68
+
69
+ /* ASN1_PKEY_SIGPARAM_NULL controls whether the default behavior of
70
+ * EVP_DigestSignAlgorithm writes an explicit NULL parameter in the
71
+ * AlgorithmIdentifier. */
72
+ #define ASN1_PKEY_SIGPARAM_NULL 0x1
73
+
74
+ /* evp_digest_sign_algorithm_result_t is the return value of the
75
+ * digest_sign_algorithm function in EVP_PKEY_ASN1_METHOD. */
76
+ typedef enum {
77
+ /* EVP_DIGEST_SIGN_ALGORITHM_ERROR signals an error. */
78
+ EVP_DIGEST_SIGN_ALGORITHM_ERROR = 0,
79
+ /* EVP_DIGEST_SIGN_ALGORITHM_SUCCESS signals that the parameters were
80
+ * serialized in the AlgorithmIdentifier. */
81
+ EVP_DIGEST_SIGN_ALGORITHM_SUCCESS = 1,
82
+ /* EVP_DIGEST_SIGN_ALGORITHM_DEFAULT signals that the parameters are
83
+ * serialized using the default behavior. */
84
+ EVP_DIGEST_SIGN_ALGORITHM_DEFAULT = 2,
85
+ } evp_digest_sign_algorithm_result_t;
86
+
87
+ struct evp_pkey_asn1_method_st {
88
+ int pkey_id;
89
+ int pkey_base_id;
90
+ unsigned long pkey_flags;
91
+
92
+ const char *pem_str;
93
+
94
+ int (*pub_decode)(EVP_PKEY *pk, X509_PUBKEY *pub);
95
+ int (*pub_encode)(X509_PUBKEY *pub, const EVP_PKEY *pk);
96
+ int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
97
+ int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx);
98
+
99
+ int (*priv_decode)(EVP_PKEY *pk, PKCS8_PRIV_KEY_INFO *p8inf);
100
+ int (*priv_encode)(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk);
101
+ int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent,
102
+ ASN1_PCTX *pctx);
103
+
104
+ /* pkey_opaque returns 1 if the |pk| is opaque. Opaque keys are backed by
105
+ * custom implementations which do not expose key material and parameters.*/
106
+ int (*pkey_opaque)(const EVP_PKEY *pk);
107
+
108
+ /* pkey_supports_digest returns one if |pkey| supports digests of
109
+ * type |md|. This is intended for use with EVP_PKEYs backing custom
110
+ * implementations which can't sign all digests. If null, it is
111
+ * assumed that all digests are supported. */
112
+ int (*pkey_supports_digest)(const EVP_PKEY *pkey, const EVP_MD *md);
113
+
114
+ int (*pkey_size)(const EVP_PKEY *pk);
115
+ int (*pkey_bits)(const EVP_PKEY *pk);
116
+
117
+ int (*param_decode)(EVP_PKEY *pkey, const uint8_t **pder, int derlen);
118
+ int (*param_encode)(const EVP_PKEY *pkey, uint8_t **pder);
119
+ int (*param_missing)(const EVP_PKEY *pk);
120
+ int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from);
121
+ int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
122
+ int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent,
123
+ ASN1_PCTX *pctx);
124
+ int (*sig_print)(BIO *out, const X509_ALGOR *sigalg, const ASN1_STRING *sig,
125
+ int indent, ASN1_PCTX *pctx);
126
+
127
+
128
+ void (*pkey_free)(EVP_PKEY *pkey);
129
+
130
+ /* Legacy functions for old PEM */
131
+
132
+ int (*old_priv_decode)(EVP_PKEY *pkey, const uint8_t **pder,
133
+ int derlen);
134
+ int (*old_priv_encode)(const EVP_PKEY *pkey, uint8_t **pder);
135
+
136
+ /* Converting parameters to/from AlgorithmIdentifier (X509_ALGOR). */
137
+ int (*digest_verify_init_from_algorithm)(EVP_MD_CTX *ctx,
138
+ X509_ALGOR *algor,
139
+ EVP_PKEY *pkey);
140
+ evp_digest_sign_algorithm_result_t (*digest_sign_algorithm)(
141
+ EVP_MD_CTX *ctx,
142
+ X509_ALGOR *algor);
143
+
144
+ } /* EVP_PKEY_ASN1_METHOD */;
145
+
146
+
147
+ typedef int EVP_PKEY_gen_cb(EVP_PKEY_CTX *ctx);
148
+
149
+ #define EVP_PKEY_OP_UNDEFINED 0
150
+ #define EVP_PKEY_OP_PARAMGEN (1 << 1)
151
+ #define EVP_PKEY_OP_KEYGEN (1 << 2)
152
+ #define EVP_PKEY_OP_SIGN (1 << 3)
153
+ #define EVP_PKEY_OP_VERIFY (1 << 4)
154
+ #define EVP_PKEY_OP_VERIFYRECOVER (1 << 5)
155
+ #define EVP_PKEY_OP_ENCRYPT (1 << 6)
156
+ #define EVP_PKEY_OP_DECRYPT (1 << 7)
157
+ #define EVP_PKEY_OP_DERIVE (1 << 8)
158
+
159
+ #define EVP_PKEY_OP_TYPE_SIG \
160
+ (EVP_PKEY_OP_SIGN | EVP_PKEY_OP_VERIFY | EVP_PKEY_OP_VERIFYRECOVER)
161
+
162
+ #define EVP_PKEY_OP_TYPE_CRYPT (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT)
163
+
164
+ #define EVP_PKEY_OP_TYPE_NOGEN \
165
+ (EVP_PKEY_OP_SIG | EVP_PKEY_OP_CRYPT | EVP_PKEY_OP_DERIVE)
166
+
167
+ #define EVP_PKEY_OP_TYPE_GEN (EVP_PKEY_OP_PARAMGEN | EVP_PKEY_OP_KEYGEN)
168
+
169
+ /* EVP_PKEY_CTX_ctrl performs |cmd| on |ctx|. The |keytype| and |optype|
170
+ * arguments can be -1 to specify that any type and operation are acceptable,
171
+ * otherwise |keytype| must match the type of |ctx| and the bits of |optype|
172
+ * must intersect the operation flags set on |ctx|.
173
+ *
174
+ * The |p1| and |p2| arguments depend on the value of |cmd|.
175
+ *
176
+ * It returns one on success and zero on error. */
177
+ OPENSSL_EXPORT int EVP_PKEY_CTX_ctrl(EVP_PKEY_CTX *ctx, int keytype, int optype,
178
+ int cmd, int p1, void *p2);
179
+
180
+ #define EVP_PKEY_CTRL_MD 1
181
+ #define EVP_PKEY_CTRL_GET_MD 2
182
+
183
+ /* EVP_PKEY_CTRL_PEER_KEY is called with different values of |p1|:
184
+ * 0: Is called from |EVP_PKEY_derive_set_peer| and |p2| contains a peer key.
185
+ * If the return value is <= 0, the key is rejected.
186
+ * 1: Is called at the end of |EVP_PKEY_derive_set_peer| and |p2| contains a
187
+ * peer key. If the return value is <= 0, the key is rejected.
188
+ * 2: Is called with |p2| == NULL to test whether the peer's key was used.
189
+ * (EC)DH always return one in this case.
190
+ * 3: Is called with |p2| == NULL to set whether the peer's key was used.
191
+ * (EC)DH always return one in this case. This was only used for GOST. */
192
+ #define EVP_PKEY_CTRL_PEER_KEY 3
193
+
194
+ /* EVP_PKEY_ALG_CTRL is the base value from which key-type specific ctrl
195
+ * commands are numbered. */
196
+ #define EVP_PKEY_ALG_CTRL 0x1000
197
+
198
+ #define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1)
199
+ #define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 2)
200
+ #define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 3)
201
+ #define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 4)
202
+ #define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 5)
203
+ #define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 6)
204
+ #define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 7)
205
+ #define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 8)
206
+ #define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 9)
207
+ #define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 10)
208
+ #define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 11)
209
+ #define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12)
210
+
211
+ #define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1)
212
+
213
+ struct evp_pkey_ctx_st {
214
+ /* Method associated with this operation */
215
+ const EVP_PKEY_METHOD *pmeth;
216
+ /* Engine that implements this method or NULL if builtin */
217
+ ENGINE *engine;
218
+ /* Key: may be NULL */
219
+ EVP_PKEY *pkey;
220
+ /* Peer key for key agreement, may be NULL */
221
+ EVP_PKEY *peerkey;
222
+ /* operation contains one of the |EVP_PKEY_OP_*| values. */
223
+ int operation;
224
+ /* Algorithm specific data */
225
+ void *data;
226
+ /* Application specific data */
227
+ void *app_data;
228
+ } /* EVP_PKEY_CTX */;
229
+
230
+ struct evp_pkey_method_st {
231
+ int pkey_id;
232
+ int flags;
233
+
234
+ int (*init)(EVP_PKEY_CTX *ctx);
235
+ int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src);
236
+ void (*cleanup)(EVP_PKEY_CTX *ctx);
237
+
238
+ int (*paramgen_init)(EVP_PKEY_CTX *ctx);
239
+ int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey);
240
+
241
+ int (*keygen_init)(EVP_PKEY_CTX *ctx);
242
+ int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey);
243
+
244
+ int (*sign_init)(EVP_PKEY_CTX *ctx);
245
+ int (*sign)(EVP_PKEY_CTX *ctx, uint8_t *sig, size_t *siglen,
246
+ const uint8_t *tbs, size_t tbslen);
247
+
248
+ int (*verify_init)(EVP_PKEY_CTX *ctx);
249
+ int (*verify)(EVP_PKEY_CTX *ctx, const uint8_t *sig, size_t siglen,
250
+ const uint8_t *tbs, size_t tbslen);
251
+
252
+ int (*encrypt_init)(EVP_PKEY_CTX *ctx);
253
+ int (*encrypt)(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen,
254
+ const uint8_t *in, size_t inlen);
255
+
256
+ int (*decrypt_init)(EVP_PKEY_CTX *ctx);
257
+ int (*decrypt)(EVP_PKEY_CTX *ctx, uint8_t *out, size_t *outlen,
258
+ const uint8_t *in, size_t inlen);
259
+
260
+ int (*derive_init)(EVP_PKEY_CTX *ctx);
261
+ int (*derive)(EVP_PKEY_CTX *ctx, uint8_t *key, size_t *keylen);
262
+
263
+ int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2);
264
+ } /* EVP_PKEY_METHOD */;
265
+
266
+ extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meth;
267
+ extern const EVP_PKEY_ASN1_METHOD ec_asn1_meth;
268
+ extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meth;
269
+
270
+ extern const EVP_PKEY_METHOD rsa_pkey_meth;
271
+ extern const EVP_PKEY_METHOD ec_pkey_meth;
272
+
273
+
274
+ #if defined(__cplusplus)
275
+ } /* extern C */
276
+ #endif
277
+
278
+ #endif /* OPENSSL_HEADER_EVP_INTERNAL_H */
@@ -0,0 +1,588 @@
1
+ /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
2
+ * 2006.
3
+ */
4
+ /* ====================================================================
5
+ * Copyright (c) 2006 The OpenSSL Project. All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions
9
+ * are met:
10
+ *
11
+ * 1. Redistributions of source code must retain the above copyright
12
+ * notice, this list of conditions and the following disclaimer.
13
+ *
14
+ * 2. Redistributions in binary form must reproduce the above copyright
15
+ * notice, this list of conditions and the following disclaimer in
16
+ * the documentation and/or other materials provided with the
17
+ * distribution.
18
+ *
19
+ * 3. All advertising materials mentioning features or use of this
20
+ * software must display the following acknowledgment:
21
+ * "This product includes software developed by the OpenSSL Project
22
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
23
+ *
24
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
25
+ * endorse or promote products derived from this software without
26
+ * prior written permission. For written permission, please contact
27
+ * licensing@OpenSSL.org.
28
+ *
29
+ * 5. Products derived from this software may not be called "OpenSSL"
30
+ * nor may "OpenSSL" appear in their names without prior written
31
+ * permission of the OpenSSL Project.
32
+ *
33
+ * 6. Redistributions of any form whatsoever must retain the following
34
+ * acknowledgment:
35
+ * "This product includes software developed by the OpenSSL Project
36
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
37
+ *
38
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
39
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
40
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
41
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
42
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
44
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
45
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
46
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
47
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
49
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
50
+ * ====================================================================
51
+ *
52
+ * This product includes cryptographic software written by Eric Young
53
+ * (eay@cryptsoft.com). This product includes software written by Tim
54
+ * Hudson (tjh@cryptsoft.com). */
55
+
56
+ #include <openssl/evp.h>
57
+
58
+ #include <openssl/asn1.h>
59
+ #include <openssl/asn1t.h>
60
+ #include <openssl/digest.h>
61
+ #include <openssl/dsa.h>
62
+ #include <openssl/err.h>
63
+ #include <openssl/mem.h>
64
+ #include <openssl/obj.h>
65
+ #include <openssl/x509.h>
66
+
67
+ #include "../dsa/internal.h"
68
+ #include "internal.h"
69
+
70
+
71
+ static int dsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey) {
72
+ const uint8_t *p, *pm;
73
+ int pklen, pmlen;
74
+ int ptype;
75
+ void *pval;
76
+ ASN1_STRING *pstr;
77
+ X509_ALGOR *palg;
78
+ ASN1_INTEGER *public_key = NULL;
79
+
80
+ DSA *dsa = NULL;
81
+
82
+ if (!X509_PUBKEY_get0_param(NULL, &p, &pklen, &palg, pubkey)) {
83
+ return 0;
84
+ }
85
+ X509_ALGOR_get0(NULL, &ptype, &pval, palg);
86
+
87
+ if (ptype == V_ASN1_SEQUENCE) {
88
+ pstr = pval;
89
+ pm = pstr->data;
90
+ pmlen = pstr->length;
91
+
92
+ dsa = d2i_DSAparams(NULL, &pm, pmlen);
93
+ if (dsa == NULL) {
94
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
95
+ goto err;
96
+ }
97
+ } else if (ptype == V_ASN1_NULL || ptype == V_ASN1_UNDEF) {
98
+ dsa = DSA_new();
99
+ if (dsa == NULL) {
100
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
101
+ goto err;
102
+ }
103
+ } else {
104
+ OPENSSL_PUT_ERROR(EVP, EVP_R_PARAMETER_ENCODING_ERROR);
105
+ goto err;
106
+ }
107
+
108
+ public_key = d2i_ASN1_INTEGER(NULL, &p, pklen);
109
+ if (public_key == NULL) {
110
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
111
+ goto err;
112
+ }
113
+
114
+ dsa->pub_key = ASN1_INTEGER_to_BN(public_key, NULL);
115
+ if (dsa->pub_key == NULL) {
116
+ OPENSSL_PUT_ERROR(EVP, EVP_R_BN_DECODE_ERROR);
117
+ goto err;
118
+ }
119
+
120
+ ASN1_INTEGER_free(public_key);
121
+ EVP_PKEY_assign_DSA(pkey, dsa);
122
+ return 1;
123
+
124
+ err:
125
+ ASN1_INTEGER_free(public_key);
126
+ DSA_free(dsa);
127
+ return 0;
128
+ }
129
+
130
+ static int dsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) {
131
+ DSA *dsa;
132
+ ASN1_STRING *pval = NULL;
133
+ uint8_t *penc = NULL;
134
+ int penclen;
135
+
136
+ dsa = pkey->pkey.dsa;
137
+ dsa->write_params = 0;
138
+
139
+ int ptype;
140
+ if (dsa->p && dsa->q && dsa->g) {
141
+ pval = ASN1_STRING_new();
142
+ if (!pval) {
143
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
144
+ goto err;
145
+ }
146
+ pval->length = i2d_DSAparams(dsa, &pval->data);
147
+ if (pval->length <= 0) {
148
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
149
+ goto err;
150
+ }
151
+ ptype = V_ASN1_SEQUENCE;
152
+ } else {
153
+ ptype = V_ASN1_UNDEF;
154
+ }
155
+
156
+ penclen = i2d_DSAPublicKey(dsa, &penc);
157
+ if (penclen <= 0) {
158
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
159
+ goto err;
160
+ }
161
+
162
+ if (X509_PUBKEY_set0_param(pk, OBJ_nid2obj(EVP_PKEY_DSA), ptype, pval,
163
+ penc, penclen)) {
164
+ return 1;
165
+ }
166
+
167
+ err:
168
+ OPENSSL_free(penc);
169
+ ASN1_STRING_free(pval);
170
+
171
+ return 0;
172
+ }
173
+
174
+ static int dsa_priv_decode(EVP_PKEY *pkey, PKCS8_PRIV_KEY_INFO *p8) {
175
+ const uint8_t *p, *pm;
176
+ int pklen, pmlen;
177
+ int ptype;
178
+ void *pval;
179
+ ASN1_STRING *pstr;
180
+ X509_ALGOR *palg;
181
+ ASN1_INTEGER *privkey = NULL;
182
+ BN_CTX *ctx = NULL;
183
+
184
+ /* In PKCS#8 DSA: you just get a private key integer and parameters in the
185
+ * AlgorithmIdentifier the pubkey must be recalculated. */
186
+
187
+ STACK_OF(ASN1_TYPE) *ndsa = NULL;
188
+ DSA *dsa = NULL;
189
+
190
+ if (!PKCS8_pkey_get0(NULL, &p, &pklen, &palg, p8)) {
191
+ return 0;
192
+ }
193
+ X509_ALGOR_get0(NULL, &ptype, &pval, palg);
194
+
195
+ /* Check for broken DSA PKCS#8, UGH! */
196
+ if (*p == (V_ASN1_SEQUENCE | V_ASN1_CONSTRUCTED)) {
197
+ ASN1_TYPE *t1, *t2;
198
+ ndsa = d2i_ASN1_SEQUENCE_ANY(NULL, &p, pklen);
199
+ if (ndsa == NULL) {
200
+ goto decerr;
201
+ }
202
+ if (sk_ASN1_TYPE_num(ndsa) != 2) {
203
+ goto decerr;
204
+ }
205
+
206
+ /* Handle Two broken types:
207
+ * SEQUENCE {parameters, priv_key}
208
+ * SEQUENCE {pub_key, priv_key}. */
209
+
210
+ t1 = sk_ASN1_TYPE_value(ndsa, 0);
211
+ t2 = sk_ASN1_TYPE_value(ndsa, 1);
212
+ if (t1->type == V_ASN1_SEQUENCE) {
213
+ p8->broken = PKCS8_EMBEDDED_PARAM;
214
+ pval = t1->value.ptr;
215
+ } else if (ptype == V_ASN1_SEQUENCE) {
216
+ p8->broken = PKCS8_NS_DB;
217
+ } else {
218
+ goto decerr;
219
+ }
220
+
221
+ if (t2->type != V_ASN1_INTEGER) {
222
+ goto decerr;
223
+ }
224
+
225
+ privkey = t2->value.integer;
226
+ } else {
227
+ const uint8_t *q = p;
228
+ privkey = d2i_ASN1_INTEGER(NULL, &p, pklen);
229
+ if (privkey == NULL) {
230
+ goto decerr;
231
+ }
232
+ if (privkey->type == V_ASN1_NEG_INTEGER) {
233
+ p8->broken = PKCS8_NEG_PRIVKEY;
234
+ ASN1_INTEGER_free(privkey);
235
+ privkey = d2i_ASN1_UINTEGER(NULL, &q, pklen);
236
+ if (privkey == NULL) {
237
+ goto decerr;
238
+ }
239
+ }
240
+ if (ptype != V_ASN1_SEQUENCE) {
241
+ goto decerr;
242
+ }
243
+ }
244
+
245
+ pstr = pval;
246
+ pm = pstr->data;
247
+ pmlen = pstr->length;
248
+ dsa = d2i_DSAparams(NULL, &pm, pmlen);
249
+ if (dsa == NULL) {
250
+ goto decerr;
251
+ }
252
+ /* We have parameters. Now set private key */
253
+ dsa->priv_key = ASN1_INTEGER_to_BN(privkey, NULL);
254
+ if (dsa->priv_key == NULL) {
255
+ OPENSSL_PUT_ERROR(EVP, ERR_LIB_BN);
256
+ goto dsaerr;
257
+ }
258
+ /* Calculate public key. */
259
+ dsa->pub_key = BN_new();
260
+ if (dsa->pub_key == NULL) {
261
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
262
+ goto dsaerr;
263
+ }
264
+ ctx = BN_CTX_new();
265
+ if (ctx == NULL) {
266
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
267
+ goto dsaerr;
268
+ }
269
+
270
+ if (!BN_mod_exp(dsa->pub_key, dsa->g, dsa->priv_key, dsa->p, ctx)) {
271
+ OPENSSL_PUT_ERROR(EVP, ERR_LIB_BN);
272
+ goto dsaerr;
273
+ }
274
+
275
+ EVP_PKEY_assign_DSA(pkey, dsa);
276
+ BN_CTX_free(ctx);
277
+ sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
278
+ ASN1_INTEGER_free(privkey);
279
+
280
+ return 1;
281
+
282
+ decerr:
283
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
284
+
285
+ dsaerr:
286
+ BN_CTX_free(ctx);
287
+ ASN1_INTEGER_free(privkey);
288
+ sk_ASN1_TYPE_pop_free(ndsa, ASN1_TYPE_free);
289
+ DSA_free(dsa);
290
+ return 0;
291
+ }
292
+
293
+ static int dsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) {
294
+ ASN1_STRING *params = NULL;
295
+ ASN1_INTEGER *prkey = NULL;
296
+ uint8_t *dp = NULL;
297
+ int dplen;
298
+
299
+ if (!pkey->pkey.dsa || !pkey->pkey.dsa->priv_key) {
300
+ OPENSSL_PUT_ERROR(EVP, EVP_R_MISSING_PARAMETERS);
301
+ goto err;
302
+ }
303
+
304
+ params = ASN1_STRING_new();
305
+ if (!params) {
306
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
307
+ goto err;
308
+ }
309
+
310
+ params->length = i2d_DSAparams(pkey->pkey.dsa, &params->data);
311
+ if (params->length <= 0) {
312
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
313
+ goto err;
314
+ }
315
+ params->type = V_ASN1_SEQUENCE;
316
+
317
+ /* Get private key into integer. */
318
+ prkey = BN_to_ASN1_INTEGER(pkey->pkey.dsa->priv_key, NULL);
319
+
320
+ if (!prkey) {
321
+ OPENSSL_PUT_ERROR(EVP, ERR_LIB_BN);
322
+ goto err;
323
+ }
324
+
325
+ dplen = i2d_ASN1_INTEGER(prkey, &dp);
326
+
327
+ ASN1_INTEGER_free(prkey);
328
+ prkey = NULL;
329
+
330
+ if (!PKCS8_pkey_set0(p8, (ASN1_OBJECT *)OBJ_nid2obj(NID_dsa), 0,
331
+ V_ASN1_SEQUENCE, params, dp, dplen)) {
332
+ goto err;
333
+ }
334
+
335
+ return 1;
336
+
337
+ err:
338
+ OPENSSL_free(dp);
339
+ ASN1_STRING_free(params);
340
+ ASN1_INTEGER_free(prkey);
341
+ return 0;
342
+ }
343
+
344
+ static int int_dsa_size(const EVP_PKEY *pkey) {
345
+ return DSA_size(pkey->pkey.dsa);
346
+ }
347
+
348
+ static int dsa_bits(const EVP_PKEY *pkey) {
349
+ return BN_num_bits(pkey->pkey.dsa->p);
350
+ }
351
+
352
+ static int dsa_missing_parameters(const EVP_PKEY *pkey) {
353
+ DSA *dsa;
354
+ dsa = pkey->pkey.dsa;
355
+ if (dsa->p == NULL || dsa->q == NULL || dsa->g == NULL) {
356
+ return 1;
357
+ }
358
+ return 0;
359
+ }
360
+
361
+ static int dup_bn_into(BIGNUM **out, BIGNUM *src) {
362
+ BIGNUM *a;
363
+
364
+ a = BN_dup(src);
365
+ if (a == NULL) {
366
+ return 0;
367
+ }
368
+ BN_free(*out);
369
+ *out = a;
370
+
371
+ return 1;
372
+ }
373
+
374
+ static int dsa_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from) {
375
+ if (!dup_bn_into(&to->pkey.dsa->p, from->pkey.dsa->p) ||
376
+ !dup_bn_into(&to->pkey.dsa->q, from->pkey.dsa->q) ||
377
+ !dup_bn_into(&to->pkey.dsa->g, from->pkey.dsa->g)) {
378
+ return 0;
379
+ }
380
+
381
+ return 1;
382
+ }
383
+
384
+ static int dsa_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) {
385
+ return BN_cmp(a->pkey.dsa->p, b->pkey.dsa->p) == 0 &&
386
+ BN_cmp(a->pkey.dsa->q, b->pkey.dsa->q) == 0 &&
387
+ BN_cmp(a->pkey.dsa->g, b->pkey.dsa->g) == 0;
388
+ }
389
+
390
+ static int dsa_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b) {
391
+ return BN_cmp(b->pkey.dsa->pub_key, a->pkey.dsa->pub_key) == 0;
392
+ }
393
+
394
+ static void int_dsa_free(EVP_PKEY *pkey) { DSA_free(pkey->pkey.dsa); }
395
+
396
+ static void update_buflen(const BIGNUM *b, size_t *pbuflen) {
397
+ size_t i;
398
+
399
+ if (!b) {
400
+ return;
401
+ }
402
+ i = BN_num_bytes(b);
403
+ if (*pbuflen < i) {
404
+ *pbuflen = i;
405
+ }
406
+ }
407
+
408
+ static int do_dsa_print(BIO *bp, const DSA *x, int off, int ptype) {
409
+ uint8_t *m = NULL;
410
+ int ret = 0;
411
+ size_t buf_len = 0;
412
+ const char *ktype = NULL;
413
+
414
+ const BIGNUM *priv_key, *pub_key;
415
+
416
+ priv_key = NULL;
417
+ if (ptype == 2) {
418
+ priv_key = x->priv_key;
419
+ }
420
+
421
+ pub_key = NULL;
422
+ if (ptype > 0) {
423
+ pub_key = x->pub_key;
424
+ }
425
+
426
+ ktype = "DSA-Parameters";
427
+ if (ptype == 2) {
428
+ ktype = "Private-Key";
429
+ } else if (ptype == 1) {
430
+ ktype = "Public-Key";
431
+ }
432
+
433
+ update_buflen(x->p, &buf_len);
434
+ update_buflen(x->q, &buf_len);
435
+ update_buflen(x->g, &buf_len);
436
+ update_buflen(priv_key, &buf_len);
437
+ update_buflen(pub_key, &buf_len);
438
+
439
+ m = (uint8_t *)OPENSSL_malloc(buf_len + 10);
440
+ if (m == NULL) {
441
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
442
+ goto err;
443
+ }
444
+
445
+ if (priv_key) {
446
+ if (!BIO_indent(bp, off, 128) ||
447
+ BIO_printf(bp, "%s: (%d bit)\n", ktype, BN_num_bits(x->p)) <= 0) {
448
+ goto err;
449
+ }
450
+ }
451
+
452
+ if (!ASN1_bn_print(bp, "priv:", priv_key, m, off) ||
453
+ !ASN1_bn_print(bp, "pub: ", pub_key, m, off) ||
454
+ !ASN1_bn_print(bp, "P: ", x->p, m, off) ||
455
+ !ASN1_bn_print(bp, "Q: ", x->q, m, off) ||
456
+ !ASN1_bn_print(bp, "G: ", x->g, m, off)) {
457
+ goto err;
458
+ }
459
+ ret = 1;
460
+
461
+ err:
462
+ OPENSSL_free(m);
463
+ return ret;
464
+ }
465
+
466
+ static int dsa_param_decode(EVP_PKEY *pkey, const uint8_t **pder, int derlen) {
467
+ DSA *dsa;
468
+ dsa = d2i_DSAparams(NULL, pder, derlen);
469
+ if (dsa == NULL) {
470
+ OPENSSL_PUT_ERROR(EVP, ERR_R_DSA_LIB);
471
+ return 0;
472
+ }
473
+ EVP_PKEY_assign_DSA(pkey, dsa);
474
+ return 1;
475
+ }
476
+
477
+ static int dsa_param_encode(const EVP_PKEY *pkey, uint8_t **pder) {
478
+ return i2d_DSAparams(pkey->pkey.dsa, pder);
479
+ }
480
+
481
+ static int dsa_param_print(BIO *bp, const EVP_PKEY *pkey, int indent,
482
+ ASN1_PCTX *ctx) {
483
+ return do_dsa_print(bp, pkey->pkey.dsa, indent, 0);
484
+ }
485
+
486
+ static int dsa_pub_print(BIO *bp, const EVP_PKEY *pkey, int indent,
487
+ ASN1_PCTX *ctx) {
488
+ return do_dsa_print(bp, pkey->pkey.dsa, indent, 1);
489
+ }
490
+
491
+ static int dsa_priv_print(BIO *bp, const EVP_PKEY *pkey, int indent,
492
+ ASN1_PCTX *ctx) {
493
+ return do_dsa_print(bp, pkey->pkey.dsa, indent, 2);
494
+ }
495
+
496
+ static int old_dsa_priv_decode(EVP_PKEY *pkey, const uint8_t **pder,
497
+ int derlen) {
498
+ DSA *dsa;
499
+ dsa = d2i_DSAPrivateKey(NULL, pder, derlen);
500
+ if (dsa == NULL) {
501
+ OPENSSL_PUT_ERROR(EVP, ERR_R_DSA_LIB);
502
+ return 0;
503
+ }
504
+ EVP_PKEY_assign_DSA(pkey, dsa);
505
+ return 1;
506
+ }
507
+
508
+ static int old_dsa_priv_encode(const EVP_PKEY *pkey, uint8_t **pder) {
509
+ return i2d_DSAPrivateKey(pkey->pkey.dsa, pder);
510
+ }
511
+
512
+ static int dsa_sig_print(BIO *bp, const X509_ALGOR *sigalg,
513
+ const ASN1_STRING *sig, int indent, ASN1_PCTX *pctx) {
514
+ DSA_SIG *dsa_sig;
515
+ const uint8_t *p;
516
+
517
+ if (!sig) {
518
+ return BIO_puts(bp, "\n") > 0;
519
+ }
520
+
521
+ p = sig->data;
522
+ dsa_sig = d2i_DSA_SIG(NULL, &p, sig->length);
523
+ if (dsa_sig == NULL) {
524
+ return X509_signature_dump(bp, sig, indent);
525
+ }
526
+
527
+ int rv = 0;
528
+ size_t buf_len = 0;
529
+ uint8_t *m = NULL;
530
+
531
+ update_buflen(dsa_sig->r, &buf_len);
532
+ update_buflen(dsa_sig->s, &buf_len);
533
+ m = OPENSSL_malloc(buf_len + 10);
534
+ if (m == NULL) {
535
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
536
+ goto err;
537
+ }
538
+
539
+ if (BIO_write(bp, "\n", 1) != 1 ||
540
+ !ASN1_bn_print(bp, "r: ", dsa_sig->r, m, indent) ||
541
+ !ASN1_bn_print(bp, "s: ", dsa_sig->s, m, indent)) {
542
+ goto err;
543
+ }
544
+ rv = 1;
545
+
546
+ err:
547
+ OPENSSL_free(m);
548
+ DSA_SIG_free(dsa_sig);
549
+ return rv;
550
+ }
551
+
552
+ const EVP_PKEY_ASN1_METHOD dsa_asn1_meth = {
553
+ EVP_PKEY_DSA,
554
+ EVP_PKEY_DSA,
555
+ 0,
556
+
557
+ "DSA",
558
+
559
+ dsa_pub_decode,
560
+ dsa_pub_encode,
561
+ dsa_pub_cmp,
562
+ dsa_pub_print,
563
+
564
+ dsa_priv_decode,
565
+ dsa_priv_encode,
566
+ dsa_priv_print,
567
+
568
+ NULL /* pkey_opaque */,
569
+ NULL /* pkey_supports_digest */,
570
+
571
+ int_dsa_size,
572
+ dsa_bits,
573
+
574
+ dsa_param_decode,
575
+ dsa_param_encode,
576
+ dsa_missing_parameters,
577
+ dsa_copy_parameters,
578
+ dsa_cmp_parameters,
579
+ dsa_param_print,
580
+ dsa_sig_print,
581
+
582
+ int_dsa_free,
583
+ old_dsa_priv_decode,
584
+ old_dsa_priv_encode,
585
+
586
+ NULL /* digest_verify_init_from_algorithm */,
587
+ NULL /* digest_sign_algorithm */,
588
+ };