grpc 1.24.0 → 1.25.0.pre1

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

Potentially problematic release.


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

Files changed (504) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  113. data/src/core/lib/iomgr/executor.cc +4 -2
  114. data/src/core/lib/iomgr/executor.h +3 -0
  115. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  116. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  117. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  118. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  119. data/src/core/lib/iomgr/resource_quota.h +13 -9
  120. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  121. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  123. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  124. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  125. data/src/core/lib/iomgr/tcp_server.h +1 -4
  126. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  127. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  128. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  129. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  130. data/src/core/lib/iomgr/udp_server.cc +3 -2
  131. data/src/core/lib/iomgr/udp_server.h +6 -12
  132. data/src/core/lib/json/json.h +1 -1
  133. data/src/core/lib/json/json_string.cc +2 -2
  134. data/src/core/lib/profiling/basic_timers.cc +2 -2
  135. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  137. data/src/core/lib/security/credentials/credentials.h +4 -20
  138. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  140. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  141. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  142. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  143. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  144. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  145. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  146. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  147. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  148. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  149. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  150. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  152. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  153. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  154. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  155. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  156. data/src/core/lib/slice/slice.cc +2 -10
  157. data/src/core/lib/slice/slice_hash_table.h +4 -6
  158. data/src/core/lib/slice/slice_intern.cc +42 -39
  159. data/src/core/lib/slice/slice_internal.h +3 -3
  160. data/src/core/lib/slice/slice_utils.h +21 -4
  161. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  162. data/src/core/lib/surface/call.cc +3 -3
  163. data/src/core/lib/surface/channel.cc +7 -0
  164. data/src/core/lib/surface/completion_queue.cc +12 -11
  165. data/src/core/lib/surface/completion_queue.h +4 -2
  166. data/src/core/lib/surface/init.cc +1 -0
  167. data/src/core/lib/surface/lame_client.cc +33 -18
  168. data/src/core/lib/surface/server.cc +77 -76
  169. data/src/core/lib/surface/version.cc +1 -1
  170. data/src/core/lib/transport/byte_stream.h +3 -7
  171. data/src/core/lib/transport/connectivity_state.cc +112 -98
  172. data/src/core/lib/transport/connectivity_state.h +100 -50
  173. data/src/core/lib/transport/static_metadata.cc +276 -288
  174. data/src/core/lib/transport/static_metadata.h +73 -76
  175. data/src/core/lib/transport/status_conversion.cc +1 -1
  176. data/src/core/lib/transport/status_metadata.cc +1 -1
  177. data/src/core/lib/transport/transport.cc +2 -2
  178. data/src/core/lib/transport/transport.h +12 -4
  179. data/src/core/lib/transport/transport_op_string.cc +14 -11
  180. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  181. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  183. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  184. data/src/core/tsi/fake_transport_security.cc +7 -5
  185. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  186. data/src/core/tsi/local_transport_security.cc +8 -6
  187. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  188. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  189. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  191. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  192. data/src/core/tsi/ssl_transport_security.cc +12 -12
  193. data/src/core/tsi/ssl_transport_security.h +2 -2
  194. data/src/core/tsi/transport_security_grpc.cc +7 -0
  195. data/src/core/tsi/transport_security_grpc.h +6 -0
  196. data/src/ruby/ext/grpc/extconf.rb +1 -0
  197. data/src/ruby/ext/grpc/rb_call.c +1 -1
  198. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  199. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  200. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  201. data/src/ruby/lib/grpc/version.rb +1 -1
  202. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  203. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  204. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  205. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  206. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  207. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  208. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  209. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  210. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  211. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  212. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  213. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  214. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  215. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  216. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  217. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  218. data/third_party/boringssl/crypto/bio/file.c +5 -2
  219. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  220. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  221. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  222. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  223. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  224. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  225. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  226. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  227. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  228. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  229. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  230. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  233. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  234. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  235. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  236. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  237. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  238. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  239. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  240. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  241. data/third_party/boringssl/crypto/crypto.c +39 -22
  242. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  243. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  244. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  245. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  246. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  247. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  248. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  249. data/third_party/boringssl/crypto/err/err.c +2 -0
  250. data/third_party/boringssl/crypto/err/internal.h +2 -2
  251. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  252. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  253. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  254. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  255. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  256. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  257. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  258. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  259. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  260. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  261. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  262. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  264. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  265. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  266. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  267. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  268. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  269. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  270. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  271. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  273. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  275. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  276. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  278. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  279. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  281. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  282. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  283. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  284. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  286. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  287. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  291. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  292. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  293. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  294. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  297. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  298. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  299. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  300. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  304. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  307. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  308. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  309. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  310. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  311. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  312. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  313. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  314. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  315. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  316. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  318. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  319. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  320. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  321. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  322. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  324. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  325. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  326. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  329. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  330. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  331. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  334. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  335. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  336. data/third_party/boringssl/crypto/internal.h +95 -20
  337. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  338. data/third_party/boringssl/crypto/mem.c +39 -2
  339. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  340. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  341. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  342. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  343. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  344. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  345. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  347. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  348. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  349. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  351. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  352. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  353. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  354. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  355. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  356. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  357. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  358. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  359. data/third_party/boringssl/crypto/thread_none.c +2 -2
  360. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  361. data/third_party/boringssl/crypto/thread_win.c +38 -19
  362. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  363. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  364. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  365. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  366. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  367. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  368. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  369. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  370. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  372. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  373. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  374. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  375. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  376. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  377. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  378. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  379. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  380. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  381. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  382. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  383. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  384. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  387. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  389. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  390. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  391. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  392. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  393. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  395. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  396. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  397. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  398. data/third_party/boringssl/include/openssl/aead.h +45 -19
  399. data/third_party/boringssl/include/openssl/aes.h +32 -7
  400. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  401. data/third_party/boringssl/include/openssl/base.h +120 -6
  402. data/third_party/boringssl/include/openssl/base64.h +4 -1
  403. data/third_party/boringssl/include/openssl/bio.h +112 -81
  404. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  405. data/third_party/boringssl/include/openssl/bn.h +55 -29
  406. data/third_party/boringssl/include/openssl/buf.h +2 -2
  407. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  408. data/third_party/boringssl/include/openssl/cast.h +2 -2
  409. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  410. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  411. data/third_party/boringssl/include/openssl/conf.h +3 -6
  412. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  413. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  414. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  415. data/third_party/boringssl/include/openssl/dh.h +3 -2
  416. data/third_party/boringssl/include/openssl/digest.h +21 -7
  417. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  418. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  419. data/third_party/boringssl/include/openssl/ec.h +25 -21
  420. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  421. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  422. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  423. data/third_party/boringssl/include/openssl/engine.h +4 -4
  424. data/third_party/boringssl/include/openssl/err.h +3 -0
  425. data/third_party/boringssl/include/openssl/evp.h +199 -42
  426. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  427. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  428. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  429. data/third_party/boringssl/include/openssl/md4.h +6 -4
  430. data/third_party/boringssl/include/openssl/md5.h +6 -4
  431. data/third_party/boringssl/include/openssl/mem.h +6 -2
  432. data/third_party/boringssl/include/openssl/nid.h +3 -0
  433. data/third_party/boringssl/include/openssl/obj.h +3 -0
  434. data/third_party/boringssl/include/openssl/pem.h +102 -64
  435. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  436. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  437. data/third_party/boringssl/include/openssl/pool.h +13 -2
  438. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  439. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  440. data/third_party/boringssl/include/openssl/sha.h +40 -28
  441. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  442. data/third_party/boringssl/include/openssl/span.h +17 -9
  443. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  444. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  445. data/third_party/boringssl/include/openssl/stack.h +134 -77
  446. data/third_party/boringssl/include/openssl/thread.h +1 -1
  447. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  448. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  449. data/third_party/boringssl/include/openssl/x509.h +28 -3
  450. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  451. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  452. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  453. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  454. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  455. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  456. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  457. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  458. data/third_party/boringssl/ssl/handoff.cc +295 -91
  459. data/third_party/boringssl/ssl/handshake.cc +133 -72
  460. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  461. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  462. data/third_party/boringssl/ssl/internal.h +1413 -928
  463. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  464. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  465. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  466. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  467. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  468. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  469. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  470. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  471. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  472. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  473. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  474. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  475. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  476. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  477. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  478. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  479. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  480. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  481. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  482. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  483. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  484. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  485. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  486. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  487. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  488. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  489. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  490. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  491. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  492. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  493. data/third_party/upb/upb/port_def.inc +1 -1
  494. data/third_party/upb/upb/table.c +2 -1
  495. metadata +71 -43
  496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  497. data/src/core/lib/gpr/mpscq.cc +0 -117
  498. data/src/core/lib/gpr/mpscq.h +0 -88
  499. data/src/core/lib/gprpp/abstract.h +0 -47
  500. data/src/core/lib/gprpp/pair.h +0 -38
  501. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  502. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  503. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  504. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -105,7 +105,7 @@ OPENSSL_EXPORT void HMAC_CTX_free(HMAC_CTX *ctx);
105
105
  // function and |key| as the key. For a non-initial call, |md| may be NULL, in
106
106
  // which case the previous hash function will be used. If the hash function has
107
107
  // not changed and |key| is NULL, |ctx| reuses the previous key. It returns one
108
- // on success or zero otherwise.
108
+ // on success or zero on allocation failure.
109
109
  //
110
110
  // WARNING: NULL and empty keys are ambiguous on non-initial calls. Passing NULL
111
111
  // |key| but repeating the previous |md| reuses the previous key rather than the
@@ -122,7 +122,7 @@ OPENSSL_EXPORT int HMAC_Update(HMAC_CTX *ctx, const uint8_t *data,
122
122
  // |out| and the sets |*out_len| to the length of the result. On entry, |out|
123
123
  // must contain at least |HMAC_size| bytes of space. An output size of
124
124
  // |EVP_MAX_MD_SIZE| will always be large enough. It returns one on success or
125
- // zero on error.
125
+ // zero on allocation failure.
126
126
  OPENSSL_EXPORT int HMAC_Final(HMAC_CTX *ctx, uint8_t *out,
127
127
  unsigned int *out_len);
128
128
 
@@ -169,14 +169,14 @@ struct hmac_ctx_st {
169
169
  #if !defined(BORINGSSL_NO_CXX)
170
170
  extern "C++" {
171
171
 
172
- namespace bssl {
172
+ BSSL_NAMESPACE_BEGIN
173
173
 
174
174
  BORINGSSL_MAKE_DELETER(HMAC_CTX, HMAC_CTX_free)
175
175
 
176
176
  using ScopedHMAC_CTX =
177
177
  internal::StackAllocated<HMAC_CTX, void, HMAC_CTX_init, HMAC_CTX_cleanup>;
178
178
 
179
- } // namespace bssl
179
+ BSSL_NAMESPACE_END
180
180
 
181
181
  } // extern C++
182
182
  #endif
@@ -0,0 +1,100 @@
1
+ /* Copyright (c) 2018, Google Inc.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #ifndef OPENSSL_HEADER_HRSS_H
16
+ #define OPENSSL_HEADER_HRSS_H
17
+
18
+ #include <openssl/base.h>
19
+
20
+ #if defined(__cplusplus)
21
+ extern "C" {
22
+ #endif
23
+
24
+ // HRSS
25
+ //
26
+ // HRSS is a structured-lattice-based post-quantum key encapsulation mechanism.
27
+ // The best exposition is https://eprint.iacr.org/2017/667.pdf although this
28
+ // implementation uses a different KEM construction based on
29
+ // https://eprint.iacr.org/2017/1005.pdf.
30
+
31
+ struct HRSS_private_key {
32
+ uint8_t opaque[1808];
33
+ };
34
+
35
+ struct HRSS_public_key {
36
+ uint8_t opaque[1424];
37
+ };
38
+
39
+ // HRSS_SAMPLE_BYTES is the number of bytes of entropy needed to generate a
40
+ // short vector. There are 701 coefficients, but the final one is always set to
41
+ // zero when sampling. Otherwise, we need one byte of input per coefficient.
42
+ #define HRSS_SAMPLE_BYTES (701 - 1)
43
+ // HRSS_GENERATE_KEY_BYTES is the number of bytes of entropy needed to generate
44
+ // an HRSS key pair.
45
+ #define HRSS_GENERATE_KEY_BYTES (HRSS_SAMPLE_BYTES + HRSS_SAMPLE_BYTES + 32)
46
+ // HRSS_ENCAP_BYTES is the number of bytes of entropy needed to encapsulate a
47
+ // session key.
48
+ #define HRSS_ENCAP_BYTES (HRSS_SAMPLE_BYTES + HRSS_SAMPLE_BYTES)
49
+ // HRSS_PUBLIC_KEY_BYTES is the number of bytes in a public key.
50
+ #define HRSS_PUBLIC_KEY_BYTES 1138
51
+ // HRSS_CIPHERTEXT_BYTES is the number of bytes in a ciphertext.
52
+ #define HRSS_CIPHERTEXT_BYTES 1138
53
+ // HRSS_KEY_BYTES is the number of bytes in a shared key.
54
+ #define HRSS_KEY_BYTES 32
55
+ // HRSS_POLY3_BYTES is the number of bytes needed to serialise a mod 3
56
+ // polynomial.
57
+ #define HRSS_POLY3_BYTES 140
58
+ #define HRSS_PRIVATE_KEY_BYTES \
59
+ (HRSS_POLY3_BYTES * 2 + HRSS_PUBLIC_KEY_BYTES + 2 + 32)
60
+
61
+ // HRSS_generate_key is a deterministic function that outputs a public and
62
+ // private key based on the given entropy.
63
+ OPENSSL_EXPORT void HRSS_generate_key(
64
+ struct HRSS_public_key *out_pub, struct HRSS_private_key *out_priv,
65
+ const uint8_t input[HRSS_GENERATE_KEY_BYTES]);
66
+
67
+ // HRSS_encap is a deterministic function the generates and encrypts a random
68
+ // session key from the given entropy, writing those values to |out_shared_key|
69
+ // and |out_ciphertext|, respectively.
70
+ OPENSSL_EXPORT void HRSS_encap(uint8_t out_ciphertext[HRSS_CIPHERTEXT_BYTES],
71
+ uint8_t out_shared_key[HRSS_KEY_BYTES],
72
+ const struct HRSS_public_key *in_pub,
73
+ const uint8_t in[HRSS_ENCAP_BYTES]);
74
+
75
+ // HRSS_decap decrypts a session key from |ciphertext_len| bytes of
76
+ // |ciphertext|. If the ciphertext is valid, the decrypted key is written to
77
+ // |out_shared_key|. Otherwise the HMAC of |ciphertext| under a secret key (kept
78
+ // in |in_priv|) is written. If the ciphertext is the wrong length then it will
79
+ // leak which was done via side-channels. Otherwise it should perform either
80
+ // action in constant-time.
81
+ OPENSSL_EXPORT void HRSS_decap(uint8_t out_shared_key[HRSS_KEY_BYTES],
82
+ const struct HRSS_private_key *in_priv,
83
+ const uint8_t *ciphertext,
84
+ size_t ciphertext_len);
85
+
86
+ // HRSS_marshal_public_key serialises |in_pub| to |out|.
87
+ OPENSSL_EXPORT void HRSS_marshal_public_key(
88
+ uint8_t out[HRSS_PUBLIC_KEY_BYTES], const struct HRSS_public_key *in_pub);
89
+
90
+ // HRSS_parse_public_key sets |*out| to the public-key encoded in |in|. It
91
+ // returns true on success and zero on error.
92
+ OPENSSL_EXPORT int HRSS_parse_public_key(
93
+ struct HRSS_public_key *out, const uint8_t in[HRSS_PUBLIC_KEY_BYTES]);
94
+
95
+
96
+ #if defined(__cplusplus)
97
+ } // extern C
98
+ #endif
99
+
100
+ #endif // OPENSSL_HEADER_HRSS_H
@@ -77,7 +77,7 @@ extern "C" {
77
77
  // int bar;
78
78
  // };
79
79
  //
80
- // DEFINE_LHASH_OF(struct foo);
80
+ // DEFINE_LHASH_OF(struct foo)
81
81
  //
82
82
  // Although note that the hash table will contain /pointers/ to |foo|.
83
83
  //
@@ -87,23 +87,8 @@ extern "C" {
87
87
 
88
88
  #define LHASH_OF(type) struct lhash_st_##type
89
89
 
90
- #define DEFINE_LHASH_OF(type) LHASH_OF(type) { int dummy; }
91
-
92
90
  #define DECLARE_LHASH_OF(type) LHASH_OF(type);
93
91
 
94
- // The make_macros.sh script in this directory parses the following lines and
95
- // generates the lhash_macros.h file that contains macros for the following
96
- // types of stacks:
97
- //
98
- // LHASH_OF:ASN1_OBJECT
99
- // LHASH_OF:CONF_VALUE
100
- // LHASH_OF:CRYPTO_BUFFER
101
- // LHASH_OF:SSL_SESSION
102
-
103
- #define IN_LHASH_H
104
- #include <openssl/lhash_macros.h>
105
- #undef IN_LHASH_H
106
-
107
92
 
108
93
  // lhash_item_st is an element of a hash chain. It points to the opaque data
109
94
  // for this element and to the next item in the chain. The linked-list is NULL
@@ -119,11 +104,22 @@ typedef struct lhash_item_st {
119
104
  // equal, to zero depending on whether |*a| is equal, or not equal to |*b|,
120
105
  // respectively. Note the difference between this and |stack_cmp_func| in that
121
106
  // this takes pointers to the objects directly.
107
+ //
108
+ // This function's actual type signature is int (*)(const T*, const T*). The
109
+ // low-level |lh_*| functions will be passed a type-specific wrapper to call it
110
+ // correctly.
122
111
  typedef int (*lhash_cmp_func)(const void *a, const void *b);
112
+ typedef int (*lhash_cmp_func_helper)(lhash_cmp_func func, const void *a,
113
+ const void *b);
123
114
 
124
115
  // lhash_hash_func is a function that maps an object to a uniformly distributed
125
116
  // uint32_t.
117
+ //
118
+ // This function's actual type signature is uint32_t (*)(const T*). The
119
+ // low-level |lh_*| functions will be passed a type-specific wrapper to call it
120
+ // correctly.
126
121
  typedef uint32_t (*lhash_hash_func)(const void *a);
122
+ typedef uint32_t (*lhash_hash_func_helper)(lhash_hash_func func, const void *a);
127
123
 
128
124
  typedef struct lhash_st _LHASH;
129
125
 
@@ -139,22 +135,33 @@ OPENSSL_EXPORT size_t lh_num_items(const _LHASH *lh);
139
135
 
140
136
  // lh_retrieve finds an element equal to |data| in the hash table and returns
141
137
  // it. If no such element exists, it returns NULL.
142
- OPENSSL_EXPORT void *lh_retrieve(const _LHASH *lh, const void *data);
138
+ OPENSSL_EXPORT void *lh_retrieve(const _LHASH *lh, const void *data,
139
+ lhash_hash_func_helper call_hash_func,
140
+ lhash_cmp_func_helper call_cmp_func);
141
+
142
+ // lh_retrieve_key finds an element matching |key|, given the specified hash and
143
+ // comparison function. This differs from |lh_retrieve| in that the key may be a
144
+ // different type than the values stored in |lh|. |key_hash| and |cmp_key| must
145
+ // be compatible with the functions passed into |lh_new|.
146
+ OPENSSL_EXPORT void *lh_retrieve_key(const _LHASH *lh, const void *key,
147
+ uint32_t key_hash,
148
+ int (*cmp_key)(const void *key,
149
+ const void *value));
143
150
 
144
151
  // lh_insert inserts |data| into the hash table. If an existing element is
145
152
  // equal to |data| (with respect to the comparison function) then |*old_data|
146
153
  // will be set to that value and it will be replaced. Otherwise, or in the
147
154
  // event of an error, |*old_data| will be set to NULL. It returns one on
148
155
  // success or zero in the case of an allocation error.
149
- OPENSSL_EXPORT int lh_insert(_LHASH *lh, void **old_data, void *data);
156
+ OPENSSL_EXPORT int lh_insert(_LHASH *lh, void **old_data, void *data,
157
+ lhash_hash_func_helper call_hash_func,
158
+ lhash_cmp_func_helper call_cmp_func);
150
159
 
151
160
  // lh_delete removes an element equal to |data| from the hash table and returns
152
161
  // it. If no such element is found, it returns NULL.
153
- OPENSSL_EXPORT void *lh_delete(_LHASH *lh, const void *data);
154
-
155
- // lh_doall calls |func| on each element of the hash table.
156
- // TODO(fork): rename this
157
- OPENSSL_EXPORT void lh_doall(_LHASH *lh, void (*func)(void *));
162
+ OPENSSL_EXPORT void *lh_delete(_LHASH *lh, const void *data,
163
+ lhash_hash_func_helper call_hash_func,
164
+ lhash_cmp_func_helper call_cmp_func);
158
165
 
159
166
  // lh_doall_arg calls |func| on each element of the hash table and also passes
160
167
  // |arg| as the second argument.
@@ -166,6 +173,107 @@ OPENSSL_EXPORT void lh_doall_arg(_LHASH *lh, void (*func)(void *, void *),
166
173
  // strings.
167
174
  OPENSSL_EXPORT uint32_t lh_strhash(const char *c);
168
175
 
176
+ #define DEFINE_LHASH_OF(type) \
177
+ DECLARE_LHASH_OF(type) \
178
+ \
179
+ typedef int (*lhash_##type##_cmp_func)(const type *, const type *); \
180
+ typedef uint32_t (*lhash_##type##_hash_func)(const type *); \
181
+ \
182
+ OPENSSL_INLINE int lh_##type##_call_cmp_func(lhash_cmp_func func, \
183
+ const void *a, const void *b) { \
184
+ return ((lhash_##type##_cmp_func)func)((const type *)a, (const type *)b); \
185
+ } \
186
+ \
187
+ OPENSSL_INLINE uint32_t lh_##type##_call_hash_func(lhash_hash_func func, \
188
+ const void *a) { \
189
+ return ((lhash_##type##_hash_func)func)((const type *)a); \
190
+ } \
191
+ \
192
+ OPENSSL_INLINE LHASH_OF(type) * \
193
+ lh_##type##_new(lhash_##type##_hash_func hash, \
194
+ lhash_##type##_cmp_func comp) { \
195
+ return (LHASH_OF(type) *)lh_new((lhash_hash_func)hash, \
196
+ (lhash_cmp_func)comp); \
197
+ } \
198
+ \
199
+ OPENSSL_INLINE void lh_##type##_free(LHASH_OF(type) *lh) { \
200
+ lh_free((_LHASH *)lh); \
201
+ } \
202
+ \
203
+ OPENSSL_INLINE size_t lh_##type##_num_items(const LHASH_OF(type) *lh) { \
204
+ return lh_num_items((const _LHASH *)lh); \
205
+ } \
206
+ \
207
+ OPENSSL_INLINE type *lh_##type##_retrieve(const LHASH_OF(type) *lh, \
208
+ const type *data) { \
209
+ return (type *)lh_retrieve((const _LHASH *)lh, data, \
210
+ lh_##type##_call_hash_func, \
211
+ lh_##type##_call_cmp_func); \
212
+ } \
213
+ \
214
+ typedef struct { \
215
+ int (*cmp_key)(const void *key, const type *value); \
216
+ const void *key; \
217
+ } LHASH_CMP_KEY_##type; \
218
+ \
219
+ OPENSSL_INLINE int lh_##type##_call_cmp_key(const void *key, \
220
+ const void *value) { \
221
+ const LHASH_CMP_KEY_##type *cb = (const LHASH_CMP_KEY_##type *)key; \
222
+ return cb->cmp_key(cb->key, (const type *)value); \
223
+ } \
224
+ \
225
+ OPENSSL_INLINE type *lh_##type##_retrieve_key( \
226
+ const LHASH_OF(type) *lh, const void *key, uint32_t key_hash, \
227
+ int (*cmp_key)(const void *key, const type *value)) { \
228
+ LHASH_CMP_KEY_##type cb = {cmp_key, key}; \
229
+ return (type *)lh_retrieve_key((const _LHASH *)lh, &cb, key_hash, \
230
+ lh_##type##_call_cmp_key); \
231
+ } \
232
+ \
233
+ OPENSSL_INLINE int lh_##type##_insert(LHASH_OF(type) *lh, type **old_data, \
234
+ type *data) { \
235
+ void *old_data_void = NULL; \
236
+ int ret = \
237
+ lh_insert((_LHASH *)lh, &old_data_void, data, \
238
+ lh_##type##_call_hash_func, lh_##type##_call_cmp_func); \
239
+ *old_data = (type *)old_data_void; \
240
+ return ret; \
241
+ } \
242
+ \
243
+ OPENSSL_INLINE type *lh_##type##_delete(LHASH_OF(type) *lh, \
244
+ const type *data) { \
245
+ return (type *)lh_delete((_LHASH *)lh, data, lh_##type##_call_hash_func, \
246
+ lh_##type##_call_cmp_func); \
247
+ } \
248
+ \
249
+ typedef struct { \
250
+ void (*doall)(type *); \
251
+ void (*doall_arg)(type *, void *); \
252
+ void *arg; \
253
+ } LHASH_DOALL_##type; \
254
+ \
255
+ OPENSSL_INLINE void lh_##type##_call_doall(void *value, void *arg) { \
256
+ const LHASH_DOALL_##type *cb = (const LHASH_DOALL_##type *)arg; \
257
+ cb->doall((type *)value); \
258
+ } \
259
+ \
260
+ OPENSSL_INLINE void lh_##type##_call_doall_arg(void *value, void *arg) { \
261
+ const LHASH_DOALL_##type *cb = (const LHASH_DOALL_##type *)arg; \
262
+ cb->doall_arg((type *)value, cb->arg); \
263
+ } \
264
+ \
265
+ OPENSSL_INLINE void lh_##type##_doall(LHASH_OF(type) *lh, \
266
+ void (*func)(type *)) { \
267
+ LHASH_DOALL_##type cb = {func, NULL, NULL}; \
268
+ lh_doall_arg((_LHASH *)lh, lh_##type##_call_doall, &cb); \
269
+ } \
270
+ \
271
+ OPENSSL_INLINE void lh_##type##_doall_arg( \
272
+ LHASH_OF(type) *lh, void (*func)(type *, void *), void *arg) { \
273
+ LHASH_DOALL_##type cb = {NULL, func, arg}; \
274
+ lh_doall_arg((_LHASH *)lh, lh_##type##_call_doall_arg, &cb); \
275
+ }
276
+
169
277
 
170
278
  #if defined(__cplusplus)
171
279
  } // extern C
@@ -79,17 +79,19 @@ OPENSSL_EXPORT int MD4_Init(MD4_CTX *md4);
79
79
  OPENSSL_EXPORT int MD4_Update(MD4_CTX *md4, const void *data, size_t len);
80
80
 
81
81
  // MD4_Final adds the final padding to |md4| and writes the resulting digest to
82
- // |md|, which must have at least |MD4_DIGEST_LENGTH| bytes of space. It
82
+ // |out|, which must have at least |MD4_DIGEST_LENGTH| bytes of space. It
83
83
  // returns one.
84
- OPENSSL_EXPORT int MD4_Final(uint8_t *md, MD4_CTX *md4);
84
+ OPENSSL_EXPORT int MD4_Final(uint8_t out[MD4_DIGEST_LENGTH], MD4_CTX *md4);
85
85
 
86
86
  // MD4 writes the digest of |len| bytes from |data| to |out| and returns |out|.
87
87
  // There must be at least |MD4_DIGEST_LENGTH| bytes of space in |out|.
88
- OPENSSL_EXPORT uint8_t *MD4(const uint8_t *data, size_t len, uint8_t *out);
88
+ OPENSSL_EXPORT uint8_t *MD4(const uint8_t *data, size_t len,
89
+ uint8_t out[MD4_DIGEST_LENGTH]);
89
90
 
90
91
  // MD4_Transform is a low-level function that performs a single, MD4 block
91
92
  // transformation using the state from |md4| and 64 bytes from |block|.
92
- OPENSSL_EXPORT void MD4_Transform(MD4_CTX *md4, const uint8_t *block);
93
+ OPENSSL_EXPORT void MD4_Transform(MD4_CTX *md4,
94
+ const uint8_t block[MD4_CBLOCK]);
93
95
 
94
96
  struct md4_state_st {
95
97
  uint32_t h[4];
@@ -80,17 +80,19 @@ OPENSSL_EXPORT int MD5_Init(MD5_CTX *md5);
80
80
  OPENSSL_EXPORT int MD5_Update(MD5_CTX *md5, const void *data, size_t len);
81
81
 
82
82
  // MD5_Final adds the final padding to |md5| and writes the resulting digest to
83
- // |md|, which must have at least |MD5_DIGEST_LENGTH| bytes of space. It
83
+ // |out|, which must have at least |MD5_DIGEST_LENGTH| bytes of space. It
84
84
  // returns one.
85
- OPENSSL_EXPORT int MD5_Final(uint8_t *md, MD5_CTX *md5);
85
+ OPENSSL_EXPORT int MD5_Final(uint8_t out[MD5_DIGEST_LENGTH], MD5_CTX *md5);
86
86
 
87
87
  // MD5 writes the digest of |len| bytes from |data| to |out| and returns |out|.
88
88
  // There must be at least |MD5_DIGEST_LENGTH| bytes of space in |out|.
89
- OPENSSL_EXPORT uint8_t *MD5(const uint8_t *data, size_t len, uint8_t *out);
89
+ OPENSSL_EXPORT uint8_t *MD5(const uint8_t *data, size_t len,
90
+ uint8_t out[MD5_DIGEST_LENGTH]);
90
91
 
91
92
  // MD5_Transform is a low-level function that performs a single, MD5 block
92
93
  // transformation using the state from |md5| and 64 bytes from |block|.
93
- OPENSSL_EXPORT void MD5_Transform(MD5_CTX *md5, const uint8_t *block);
94
+ OPENSSL_EXPORT void MD5_Transform(MD5_CTX *md5,
95
+ const uint8_t block[MD5_CBLOCK]);
94
96
 
95
97
  struct md5_state_st {
96
98
  uint32_t h[4];
@@ -136,18 +136,22 @@ OPENSSL_EXPORT int BIO_vsnprintf(char *buf, size_t n, const char *format,
136
136
  #define CRYPTO_realloc OPENSSL_realloc
137
137
  #define CRYPTO_free OPENSSL_free
138
138
 
139
+ // OPENSSL_clear_free calls |OPENSSL_free|. BoringSSL automatically clears all
140
+ // allocations on free, but we define |OPENSSL_clear_free| for compatibility.
141
+ OPENSSL_EXPORT void OPENSSL_clear_free(void *ptr, size_t len);
142
+
139
143
 
140
144
  #if defined(__cplusplus)
141
145
  } // extern C
142
146
 
143
147
  extern "C++" {
144
148
 
145
- namespace bssl {
149
+ BSSL_NAMESPACE_BEGIN
146
150
 
147
151
  BORINGSSL_MAKE_DELETER(char, OPENSSL_free)
148
152
  BORINGSSL_MAKE_DELETER(uint8_t, OPENSSL_free)
149
153
 
150
- } // namespace bssl
154
+ BSSL_NAMESPACE_END
151
155
 
152
156
  } // extern C++
153
157
 
@@ -4234,6 +4234,9 @@ extern "C" {
4234
4234
  #define LN_auth_any "auth-any"
4235
4235
  #define NID_auth_any 958
4236
4236
 
4237
+ #define SN_CECPQ2 "CECPQ2"
4238
+ #define NID_CECPQ2 959
4239
+
4237
4240
 
4238
4241
  #if defined(__cplusplus)
4239
4242
  } /* extern C */
@@ -222,6 +222,9 @@ OPENSSL_EXPORT void OBJ_NAME_do_all(int type, void (*callback)(const OBJ_NAME *,
222
222
  void *arg),
223
223
  void *arg);
224
224
 
225
+ // OBJ_cleanup does nothing.
226
+ OPENSSL_EXPORT void OBJ_cleanup(void);
227
+
225
228
 
226
229
  #if defined(__cplusplus)
227
230
  } // extern C
@@ -63,6 +63,7 @@
63
63
  #include <openssl/digest.h>
64
64
  #include <openssl/evp.h>
65
65
  #include <openssl/stack.h>
66
+ #include <openssl/pkcs7.h>
66
67
  #include <openssl/x509.h>
67
68
 
68
69
  /* For compatibility with open-iscsi, which assumes that it can get
@@ -122,73 +123,109 @@ extern "C" {
122
123
 
123
124
  #else
124
125
 
125
- #define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \
126
- OPENSSL_EXPORT type *PEM_read_##name(FILE *fp, type **x, pem_password_cb *cb, void *u)\
127
- { \
128
- return (type *)PEM_ASN1_read((d2i_of_void *)d2i_##asn1, str,fp,(void **)x,cb,u); \
129
- }
130
-
131
- #define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \
132
- OPENSSL_EXPORT int PEM_write_##name(FILE *fp, type *x) \
133
- { \
134
- return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,NULL,NULL,0,NULL,NULL); \
135
- }
136
-
137
- #define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \
138
- OPENSSL_EXPORT int PEM_write_##name(FILE *fp, const type *x) \
139
- { \
140
- return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,(void *)x,NULL,NULL,0,NULL,NULL); \
141
- }
142
-
143
- #define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \
144
- OPENSSL_EXPORT int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \
145
- unsigned char *kstr, int klen, pem_password_cb *cb, \
146
- void *u) \
147
- { \
148
- return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \
149
- }
150
-
151
- #define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \
152
- OPENSSL_EXPORT int PEM_write_##name(FILE *fp, type *x, const EVP_CIPHER *enc, \
153
- unsigned char *kstr, int klen, pem_password_cb *cb, \
154
- void *u) \
155
- { \
156
- return PEM_ASN1_write((i2d_of_void *)i2d_##asn1,str,fp,x,enc,kstr,klen,cb,u); \
157
- }
126
+ #define IMPLEMENT_PEM_read_fp(name, type, str, asn1) \
127
+ static void *pem_read_##name##_d2i(void **x, const unsigned char **inp, \
128
+ long len) { \
129
+ return d2i_##asn1((type **)x, inp, len); \
130
+ } \
131
+ OPENSSL_EXPORT type *PEM_read_##name(FILE *fp, type **x, \
132
+ pem_password_cb *cb, void *u) { \
133
+ return (type *)PEM_ASN1_read(pem_read_##name##_d2i, str, fp, (void **)x, \
134
+ cb, u); \
135
+ }
136
+
137
+ #define IMPLEMENT_PEM_write_fp(name, type, str, asn1) \
138
+ static int pem_write_##name##_i2d(const void *x, unsigned char **outp) { \
139
+ return i2d_##asn1((type *)x, outp); \
140
+ } \
141
+ OPENSSL_EXPORT int PEM_write_##name(FILE *fp, type *x) { \
142
+ return PEM_ASN1_write(pem_write_##name##_i2d, str, fp, x, NULL, NULL, 0, \
143
+ NULL, NULL); \
144
+ }
145
+
146
+ #define IMPLEMENT_PEM_write_fp_const(name, type, str, asn1) \
147
+ static int pem_write_##name##_i2d(const void *x, unsigned char **outp) { \
148
+ return i2d_##asn1((const type *)x, outp); \
149
+ } \
150
+ OPENSSL_EXPORT int PEM_write_##name(FILE *fp, const type *x) { \
151
+ return PEM_ASN1_write(pem_write_##name##_i2d, str, fp, (void *)x, NULL, \
152
+ NULL, 0, NULL, NULL); \
153
+ }
154
+
155
+ #define IMPLEMENT_PEM_write_cb_fp(name, type, str, asn1) \
156
+ static int pem_write_##name##_i2d(const void *x, unsigned char **outp) { \
157
+ return i2d_##asn1((type *)x, outp); \
158
+ } \
159
+ OPENSSL_EXPORT int PEM_write_##name( \
160
+ FILE *fp, type *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, \
161
+ pem_password_cb *cb, void *u) { \
162
+ return PEM_ASN1_write(pem_write_##name##_i2d, str, fp, x, enc, kstr, klen, \
163
+ cb, u); \
164
+ }
165
+
166
+ #define IMPLEMENT_PEM_write_cb_fp_const(name, type, str, asn1) \
167
+ static int pem_write_##name##_i2d(const void *x, unsigned char **outp) { \
168
+ return i2d_##asn1((const type *)x, outp); \
169
+ } \
170
+ OPENSSL_EXPORT int PEM_write_##name( \
171
+ FILE *fp, type *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, \
172
+ pem_password_cb *cb, void *u) { \
173
+ return PEM_ASN1_write(pem_write_##name##_i2d, str, fp, x, enc, kstr, klen, \
174
+ cb, u); \
175
+ }
158
176
 
159
177
  #endif
160
178
 
161
- #define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \
162
- OPENSSL_EXPORT type *PEM_read_bio_##name(BIO *bp, type **x, pem_password_cb *cb, void *u)\
163
- { \
164
- return (type *)PEM_ASN1_read_bio((d2i_of_void *)d2i_##asn1, str,bp,(void **)x,cb,u); \
165
- }
166
-
167
- #define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \
168
- OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, type *x) \
169
- { \
170
- return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,NULL,NULL,0,NULL,NULL); \
171
- }
172
-
173
- #define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \
174
- OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, const type *x) \
175
- { \
176
- return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,NULL,NULL,0,NULL,NULL); \
177
- }
178
-
179
- #define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \
180
- OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
181
- unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \
182
- { \
183
- return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,x,enc,kstr,klen,cb,u); \
184
- }
185
-
186
- #define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \
187
- OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, type *x, const EVP_CIPHER *enc, \
188
- unsigned char *kstr, int klen, pem_password_cb *cb, void *u) \
189
- { \
190
- return PEM_ASN1_write_bio((i2d_of_void *)i2d_##asn1,str,bp,(void *)x,enc,kstr,klen,cb,u); \
191
- }
179
+ #define IMPLEMENT_PEM_read_bio(name, type, str, asn1) \
180
+ static void *pem_read_bio_##name##_d2i(void **x, const unsigned char **inp, \
181
+ long len) { \
182
+ return d2i_##asn1((type **)x, inp, len); \
183
+ } \
184
+ OPENSSL_EXPORT type *PEM_read_bio_##name(BIO *bp, type **x, \
185
+ pem_password_cb *cb, void *u) { \
186
+ return (type *)PEM_ASN1_read_bio(pem_read_bio_##name##_d2i, str, bp, \
187
+ (void **)x, cb, u); \
188
+ }
189
+
190
+ #define IMPLEMENT_PEM_write_bio(name, type, str, asn1) \
191
+ static int pem_write_bio_##name##_i2d(const void *x, unsigned char **outp) { \
192
+ return i2d_##asn1((type *)x, outp); \
193
+ } \
194
+ OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, type *x) { \
195
+ return PEM_ASN1_write_bio(pem_write_bio_##name##_i2d, str, bp, x, NULL, \
196
+ NULL, 0, NULL, NULL); \
197
+ }
198
+
199
+ #define IMPLEMENT_PEM_write_bio_const(name, type, str, asn1) \
200
+ static int pem_write_bio_##name##_i2d(const void *x, unsigned char **outp) { \
201
+ return i2d_##asn1((const type *)x, outp); \
202
+ } \
203
+ OPENSSL_EXPORT int PEM_write_bio_##name(BIO *bp, const type *x) { \
204
+ return PEM_ASN1_write_bio(pem_write_bio_##name##_i2d, str, bp, (void *)x, \
205
+ NULL, NULL, 0, NULL, NULL); \
206
+ }
207
+
208
+ #define IMPLEMENT_PEM_write_cb_bio(name, type, str, asn1) \
209
+ static int pem_write_bio_##name##_i2d(const void *x, unsigned char **outp) { \
210
+ return i2d_##asn1((type *)x, outp); \
211
+ } \
212
+ OPENSSL_EXPORT int PEM_write_bio_##name( \
213
+ BIO *bp, type *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, \
214
+ pem_password_cb *cb, void *u) { \
215
+ return PEM_ASN1_write_bio(pem_write_bio_##name##_i2d, str, bp, x, enc, \
216
+ kstr, klen, cb, u); \
217
+ }
218
+
219
+ #define IMPLEMENT_PEM_write_cb_bio_const(name, type, str, asn1) \
220
+ static int pem_write_bio_##name##_i2d(const void *x, unsigned char **outp) { \
221
+ return i2d_##asn1((const type *)x, outp); \
222
+ } \
223
+ OPENSSL_EXPORT int PEM_write_bio_##name( \
224
+ BIO *bp, type *x, const EVP_CIPHER *enc, unsigned char *kstr, int klen, \
225
+ pem_password_cb *cb, void *u) { \
226
+ return PEM_ASN1_write_bio(pem_write_bio_##name##_i2d, str, bp, (void *)x, \
227
+ enc, kstr, klen, cb, u); \
228
+ }
192
229
 
193
230
  #define IMPLEMENT_PEM_write(name, type, str, asn1) \
194
231
  IMPLEMENT_PEM_write_bio(name, type, str, asn1) \
@@ -329,6 +366,7 @@ DECLARE_PEM_write(X509_REQ_NEW, X509_REQ)
329
366
 
330
367
  DECLARE_PEM_rw(X509_CRL, X509_CRL)
331
368
 
369
+ DECLARE_PEM_rw(PKCS7, PKCS7)
332
370
  DECLARE_PEM_rw(PKCS8, X509_SIG)
333
371
 
334
372
  DECLARE_PEM_rw(PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO)