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
@@ -28,51 +28,107 @@ static void ed25519_free(EVP_PKEY *pkey) {
28
28
  pkey->pkey.ptr = NULL;
29
29
  }
30
30
 
31
- static int set_pubkey(EVP_PKEY *pkey, const uint8_t pubkey[32]) {
31
+ static int ed25519_set_priv_raw(EVP_PKEY *pkey, const uint8_t *in, size_t len) {
32
+ if (len != 32) {
33
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
34
+ return 0;
35
+ }
36
+
32
37
  ED25519_KEY *key = OPENSSL_malloc(sizeof(ED25519_KEY));
33
38
  if (key == NULL) {
34
39
  OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
35
40
  return 0;
36
41
  }
37
- key->has_private = 0;
38
- OPENSSL_memcpy(key->key.pub.value, pubkey, 32);
42
+
43
+ // The RFC 8032 encoding stores only the 32-byte seed, so we must recover the
44
+ // full representation which we use from it.
45
+ uint8_t pubkey_unused[32];
46
+ ED25519_keypair_from_seed(pubkey_unused, key->key.priv, in);
47
+ key->has_private = 1;
39
48
 
40
49
  ed25519_free(pkey);
41
50
  pkey->pkey.ptr = key;
42
51
  return 1;
43
52
  }
44
53
 
45
- static int set_privkey(EVP_PKEY *pkey, const uint8_t privkey[64]) {
54
+ static int ed25519_set_pub_raw(EVP_PKEY *pkey, const uint8_t *in, size_t len) {
55
+ if (len != 32) {
56
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
57
+ return 0;
58
+ }
59
+
46
60
  ED25519_KEY *key = OPENSSL_malloc(sizeof(ED25519_KEY));
47
61
  if (key == NULL) {
48
62
  OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
49
63
  return 0;
50
64
  }
51
- key->has_private = 1;
52
- OPENSSL_memcpy(key->key.priv, privkey, 64);
65
+
66
+ OPENSSL_memcpy(key->key.pub.value, in, 32);
67
+ key->has_private = 0;
53
68
 
54
69
  ed25519_free(pkey);
55
70
  pkey->pkey.ptr = key;
56
71
  return 1;
57
72
  }
58
73
 
74
+ static int ed25519_get_priv_raw(const EVP_PKEY *pkey, uint8_t *out,
75
+ size_t *out_len) {
76
+ const ED25519_KEY *key = pkey->pkey.ptr;
77
+ if (!key->has_private) {
78
+ OPENSSL_PUT_ERROR(EVP, EVP_R_NOT_A_PRIVATE_KEY);
79
+ return 0;
80
+ }
81
+
82
+ if (out == NULL) {
83
+ *out_len = 32;
84
+ return 1;
85
+ }
86
+
87
+ if (*out_len < 32) {
88
+ OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
89
+ return 0;
90
+ }
91
+
92
+ // The raw private key format is the first 32 bytes of the private key.
93
+ OPENSSL_memcpy(out, key->key.priv, 32);
94
+ *out_len = 32;
95
+ return 1;
96
+ }
97
+
98
+ static int ed25519_get_pub_raw(const EVP_PKEY *pkey, uint8_t *out,
99
+ size_t *out_len) {
100
+ const ED25519_KEY *key = pkey->pkey.ptr;
101
+ if (out == NULL) {
102
+ *out_len = 32;
103
+ return 1;
104
+ }
105
+
106
+ if (*out_len < 32) {
107
+ OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
108
+ return 0;
109
+ }
110
+
111
+ OPENSSL_memcpy(out, key->key.pub.value, 32);
112
+ *out_len = 32;
113
+ return 1;
114
+ }
115
+
59
116
  static int ed25519_pub_decode(EVP_PKEY *out, CBS *params, CBS *key) {
60
- // See draft-ietf-curdle-pkix-04, section 4.
117
+ // See RFC 8410, section 4.
61
118
 
62
119
  // The parameters must be omitted. Public keys have length 32.
63
- if (CBS_len(params) != 0 ||
64
- CBS_len(key) != 32) {
120
+ if (CBS_len(params) != 0) {
65
121
  OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
66
122
  return 0;
67
123
  }
68
124
 
69
- return set_pubkey(out, CBS_data(key));
125
+ return ed25519_set_pub_raw(out, CBS_data(key), CBS_len(key));
70
126
  }
71
127
 
72
128
  static int ed25519_pub_encode(CBB *out, const EVP_PKEY *pkey) {
73
129
  const ED25519_KEY *key = pkey->pkey.ptr;
74
130
 
75
- // See draft-ietf-curdle-pkix-04, section 4.
131
+ // See RFC 8410, section 4.
76
132
  CBB spki, algorithm, oid, key_bitstring;
77
133
  if (!CBB_add_asn1(out, &spki, CBS_ASN1_SEQUENCE) ||
78
134
  !CBB_add_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) ||
@@ -96,24 +152,19 @@ static int ed25519_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b) {
96
152
  }
97
153
 
98
154
  static int ed25519_priv_decode(EVP_PKEY *out, CBS *params, CBS *key) {
99
- // See draft-ietf-curdle-pkix-04, section 7.
155
+ // See RFC 8410, section 7.
100
156
 
101
157
  // Parameters must be empty. The key is a 32-byte value wrapped in an extra
102
158
  // OCTET STRING layer.
103
159
  CBS inner;
104
160
  if (CBS_len(params) != 0 ||
105
161
  !CBS_get_asn1(key, &inner, CBS_ASN1_OCTETSTRING) ||
106
- CBS_len(key) != 0 ||
107
- CBS_len(&inner) != 32) {
162
+ CBS_len(key) != 0) {
108
163
  OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
109
164
  return 0;
110
165
  }
111
166
 
112
- // The PKCS#8 encoding stores only the 32-byte seed, so we must recover the
113
- // full representation which we use from it.
114
- uint8_t pubkey[32], privkey[64];
115
- ED25519_keypair_from_seed(pubkey, privkey, CBS_data(&inner));
116
- return set_privkey(out, privkey);
167
+ return ed25519_set_priv_raw(out, CBS_data(&inner), CBS_len(&inner));
117
168
  }
118
169
 
119
170
  static int ed25519_priv_encode(CBB *out, const EVP_PKEY *pkey) {
@@ -123,7 +174,7 @@ static int ed25519_priv_encode(CBB *out, const EVP_PKEY *pkey) {
123
174
  return 0;
124
175
  }
125
176
 
126
- // See draft-ietf-curdle-pkix-04, section 7.
177
+ // See RFC 8410, section 7.
127
178
  CBB pkcs8, algorithm, oid, private_key, inner;
128
179
  if (!CBB_add_asn1(out, &pkcs8, CBS_ASN1_SEQUENCE) ||
129
180
  !CBB_add_asn1_uint64(&pkcs8, 0 /* version */) ||
@@ -145,7 +196,7 @@ static int ed25519_priv_encode(CBB *out, const EVP_PKEY *pkey) {
145
196
 
146
197
  static int ed25519_size(const EVP_PKEY *pkey) { return 64; }
147
198
 
148
- static int ed25519_bits(const EVP_PKEY *pkey) { return 256; }
199
+ static int ed25519_bits(const EVP_PKEY *pkey) { return 253; }
149
200
 
150
201
  const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth = {
151
202
  EVP_PKEY_ED25519,
@@ -156,6 +207,10 @@ const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth = {
156
207
  ed25519_pub_cmp,
157
208
  ed25519_priv_decode,
158
209
  ed25519_priv_encode,
210
+ ed25519_set_priv_raw,
211
+ ed25519_set_pub_raw,
212
+ ed25519_get_priv_raw,
213
+ ed25519_get_pub_raw,
159
214
  NULL /* pkey_opaque */,
160
215
  ed25519_size,
161
216
  ed25519_bits,
@@ -164,27 +219,3 @@ const EVP_PKEY_ASN1_METHOD ed25519_asn1_meth = {
164
219
  NULL /* param_cmp */,
165
220
  ed25519_free,
166
221
  };
167
-
168
- EVP_PKEY *EVP_PKEY_new_ed25519_public(const uint8_t public_key[32]) {
169
- EVP_PKEY *ret = EVP_PKEY_new();
170
- if (ret == NULL ||
171
- !EVP_PKEY_set_type(ret, EVP_PKEY_ED25519) ||
172
- !set_pubkey(ret, public_key)) {
173
- EVP_PKEY_free(ret);
174
- return NULL;
175
- }
176
-
177
- return ret;
178
- }
179
-
180
- EVP_PKEY *EVP_PKEY_new_ed25519_private(const uint8_t private_key[64]) {
181
- EVP_PKEY *ret = EVP_PKEY_new();
182
- if (ret == NULL ||
183
- !EVP_PKEY_set_type(ret, EVP_PKEY_ED25519) ||
184
- !set_privkey(ret, private_key)) {
185
- EVP_PKEY_free(ret);
186
- return NULL;
187
- }
188
-
189
- return ret;
190
- }
@@ -132,6 +132,7 @@ static int pkey_rsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) {
132
132
  dctx->pad_mode = sctx->pad_mode;
133
133
  dctx->md = sctx->md;
134
134
  dctx->mgf1md = sctx->mgf1md;
135
+ dctx->saltlen = sctx->saltlen;
135
136
  if (sctx->oaep_label) {
136
137
  OPENSSL_free(dctx->oaep_label);
137
138
  dctx->oaep_label = BUF_memdup(sctx->oaep_label, sctx->oaep_labellen);
@@ -553,7 +554,8 @@ const EVP_PKEY_METHOD rsa_pkey_meth = {
553
554
  pkey_rsa_verify_recover,
554
555
  pkey_rsa_encrypt,
555
556
  pkey_rsa_decrypt,
556
- 0 /* derive */,
557
+ NULL /* derive */,
558
+ NULL /* paramgen */,
557
559
  pkey_rsa_ctrl,
558
560
  };
559
561
 
@@ -178,6 +178,11 @@ const EVP_PKEY_ASN1_METHOD rsa_asn1_meth = {
178
178
  rsa_priv_decode,
179
179
  rsa_priv_encode,
180
180
 
181
+ NULL /* set_priv_raw */,
182
+ NULL /* set_pub_raw */,
183
+ NULL /* get_priv_raw */,
184
+ NULL /* get_pub_raw */,
185
+
181
186
  rsa_opaque,
182
187
 
183
188
  int_rsa_size,
@@ -0,0 +1,110 @@
1
+ /* Copyright (c) 2019, 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
+ #include <openssl/evp.h>
16
+
17
+ #include <openssl/curve25519.h>
18
+ #include <openssl/err.h>
19
+ #include <openssl/mem.h>
20
+
21
+ #include "internal.h"
22
+
23
+
24
+ // X25519 has no parameters to copy.
25
+ static int pkey_x25519_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src) { return 1; }
26
+
27
+ static int pkey_x25519_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) {
28
+ X25519_KEY *key = OPENSSL_malloc(sizeof(X25519_KEY));
29
+ if (key == NULL) {
30
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
31
+ return 0;
32
+ }
33
+
34
+ if (!EVP_PKEY_set_type(pkey, EVP_PKEY_X25519)) {
35
+ OPENSSL_free(key);
36
+ return 0;
37
+ }
38
+
39
+ X25519_keypair(key->pub, key->priv);
40
+ key->has_private = 1;
41
+
42
+ OPENSSL_free(pkey->pkey.ptr);
43
+ pkey->pkey.ptr = key;
44
+ return 1;
45
+ }
46
+
47
+ static int pkey_x25519_derive(EVP_PKEY_CTX *ctx, uint8_t *out,
48
+ size_t *out_len) {
49
+ if (ctx->pkey == NULL || ctx->peerkey == NULL) {
50
+ OPENSSL_PUT_ERROR(EVP, EVP_R_KEYS_NOT_SET);
51
+ return 0;
52
+ }
53
+
54
+ const X25519_KEY *our_key = ctx->pkey->pkey.ptr;
55
+ const X25519_KEY *peer_key = ctx->peerkey->pkey.ptr;
56
+ if (our_key == NULL || peer_key == NULL) {
57
+ OPENSSL_PUT_ERROR(EVP, EVP_R_KEYS_NOT_SET);
58
+ return 0;
59
+ }
60
+
61
+ if (!our_key->has_private) {
62
+ OPENSSL_PUT_ERROR(EVP, EVP_R_NOT_A_PRIVATE_KEY);
63
+ return 0;
64
+ }
65
+
66
+ if (out != NULL) {
67
+ if (*out_len < 32) {
68
+ OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
69
+ return 0;
70
+ }
71
+ if (!X25519(out, our_key->priv, peer_key->pub)) {
72
+ OPENSSL_PUT_ERROR(EVP, EVP_R_INVALID_PEER_KEY);
73
+ return 0;
74
+ }
75
+ }
76
+
77
+ *out_len = 32;
78
+ return 1;
79
+ }
80
+
81
+ static int pkey_x25519_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) {
82
+ switch (type) {
83
+ case EVP_PKEY_CTRL_PEER_KEY:
84
+ // |EVP_PKEY_derive_set_peer| requires the key implement this command,
85
+ // even if it is a no-op.
86
+ return 1;
87
+
88
+ default:
89
+ OPENSSL_PUT_ERROR(EVP, EVP_R_COMMAND_NOT_SUPPORTED);
90
+ return 0;
91
+ }
92
+ }
93
+
94
+ const EVP_PKEY_METHOD x25519_pkey_meth = {
95
+ EVP_PKEY_X25519,
96
+ NULL /* init */,
97
+ pkey_x25519_copy,
98
+ NULL /* cleanup */,
99
+ pkey_x25519_keygen,
100
+ NULL /* sign */,
101
+ NULL /* sign_message */,
102
+ NULL /* verify */,
103
+ NULL /* verify_message */,
104
+ NULL /* verify_recover */,
105
+ NULL /* encrypt */,
106
+ NULL /* decrypt */,
107
+ pkey_x25519_derive,
108
+ NULL /* paramgen */,
109
+ pkey_x25519_ctrl,
110
+ };
@@ -0,0 +1,249 @@
1
+ /* Copyright (c) 2019, 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
+ #include <openssl/evp.h>
16
+
17
+ #include <openssl/buf.h>
18
+ #include <openssl/bytestring.h>
19
+ #include <openssl/curve25519.h>
20
+ #include <openssl/err.h>
21
+ #include <openssl/mem.h>
22
+
23
+ #include "internal.h"
24
+ #include "../internal.h"
25
+
26
+
27
+ static void x25519_free(EVP_PKEY *pkey) {
28
+ OPENSSL_free(pkey->pkey.ptr);
29
+ pkey->pkey.ptr = NULL;
30
+ }
31
+
32
+ static int x25519_set_priv_raw(EVP_PKEY *pkey, const uint8_t *in, size_t len) {
33
+ if (len != 32) {
34
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
35
+ return 0;
36
+ }
37
+
38
+ X25519_KEY *key = OPENSSL_malloc(sizeof(X25519_KEY));
39
+ if (key == NULL) {
40
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
41
+ return 0;
42
+ }
43
+
44
+ OPENSSL_memcpy(key->priv, in, 32);
45
+ X25519_public_from_private(key->pub, key->priv);
46
+ key->has_private = 1;
47
+
48
+ x25519_free(pkey);
49
+ pkey->pkey.ptr = key;
50
+ return 1;
51
+ }
52
+
53
+ static int x25519_set_pub_raw(EVP_PKEY *pkey, const uint8_t *in, size_t len) {
54
+ if (len != 32) {
55
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
56
+ return 0;
57
+ }
58
+
59
+ X25519_KEY *key = OPENSSL_malloc(sizeof(X25519_KEY));
60
+ if (key == NULL) {
61
+ OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
62
+ return 0;
63
+ }
64
+
65
+ OPENSSL_memcpy(key->pub, in, 32);
66
+ key->has_private = 0;
67
+
68
+ x25519_free(pkey);
69
+ pkey->pkey.ptr = key;
70
+ return 1;
71
+ }
72
+
73
+ static int x25519_get_priv_raw(const EVP_PKEY *pkey, uint8_t *out,
74
+ size_t *out_len) {
75
+ const X25519_KEY *key = pkey->pkey.ptr;
76
+ if (!key->has_private) {
77
+ OPENSSL_PUT_ERROR(EVP, EVP_R_NOT_A_PRIVATE_KEY);
78
+ return 0;
79
+ }
80
+
81
+ if (out == NULL) {
82
+ *out_len = 32;
83
+ return 1;
84
+ }
85
+
86
+ if (*out_len < 32) {
87
+ OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
88
+ return 0;
89
+ }
90
+
91
+ OPENSSL_memcpy(out, key->priv, 32);
92
+ *out_len = 32;
93
+ return 1;
94
+ }
95
+
96
+ static int x25519_get_pub_raw(const EVP_PKEY *pkey, uint8_t *out,
97
+ size_t *out_len) {
98
+ const X25519_KEY *key = pkey->pkey.ptr;
99
+ if (out == NULL) {
100
+ *out_len = 32;
101
+ return 1;
102
+ }
103
+
104
+ if (*out_len < 32) {
105
+ OPENSSL_PUT_ERROR(EVP, EVP_R_BUFFER_TOO_SMALL);
106
+ return 0;
107
+ }
108
+
109
+ OPENSSL_memcpy(out, key->pub, 32);
110
+ *out_len = 32;
111
+ return 1;
112
+ }
113
+
114
+ static int x25519_pub_decode(EVP_PKEY *out, CBS *params, CBS *key) {
115
+ // See RFC 8410, section 4.
116
+
117
+ // The parameters must be omitted. Public keys have length 32.
118
+ if (CBS_len(params) != 0) {
119
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
120
+ return 0;
121
+ }
122
+
123
+ return x25519_set_pub_raw(out, CBS_data(key), CBS_len(key));
124
+ }
125
+
126
+ static int x25519_pub_encode(CBB *out, const EVP_PKEY *pkey) {
127
+ const X25519_KEY *key = pkey->pkey.ptr;
128
+
129
+ // See RFC 8410, section 4.
130
+ CBB spki, algorithm, oid, key_bitstring;
131
+ if (!CBB_add_asn1(out, &spki, CBS_ASN1_SEQUENCE) ||
132
+ !CBB_add_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) ||
133
+ !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
134
+ !CBB_add_bytes(&oid, x25519_asn1_meth.oid, x25519_asn1_meth.oid_len) ||
135
+ !CBB_add_asn1(&spki, &key_bitstring, CBS_ASN1_BITSTRING) ||
136
+ !CBB_add_u8(&key_bitstring, 0 /* padding */) ||
137
+ !CBB_add_bytes(&key_bitstring, key->pub, 32) ||
138
+ !CBB_flush(out)) {
139
+ OPENSSL_PUT_ERROR(EVP, EVP_R_ENCODE_ERROR);
140
+ return 0;
141
+ }
142
+
143
+ return 1;
144
+ }
145
+
146
+ static int x25519_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b) {
147
+ const X25519_KEY *a_key = a->pkey.ptr;
148
+ const X25519_KEY *b_key = b->pkey.ptr;
149
+ return OPENSSL_memcmp(a_key->pub, b_key->pub, 32) == 0;
150
+ }
151
+
152
+ static int x25519_priv_decode(EVP_PKEY *out, CBS *params, CBS *key) {
153
+ // See RFC 8410, section 7.
154
+
155
+ // Parameters must be empty. The key is a 32-byte value wrapped in an extra
156
+ // OCTET STRING layer.
157
+ CBS inner;
158
+ if (CBS_len(params) != 0 ||
159
+ !CBS_get_asn1(key, &inner, CBS_ASN1_OCTETSTRING) ||
160
+ CBS_len(key) != 0) {
161
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
162
+ return 0;
163
+ }
164
+
165
+ return x25519_set_priv_raw(out, CBS_data(&inner), CBS_len(&inner));
166
+ }
167
+
168
+ static int x25519_priv_encode(CBB *out, const EVP_PKEY *pkey) {
169
+ X25519_KEY *key = pkey->pkey.ptr;
170
+ if (!key->has_private) {
171
+ OPENSSL_PUT_ERROR(EVP, EVP_R_NOT_A_PRIVATE_KEY);
172
+ return 0;
173
+ }
174
+
175
+ // See RFC 8410, section 7.
176
+ CBB pkcs8, algorithm, oid, private_key, inner;
177
+ if (!CBB_add_asn1(out, &pkcs8, CBS_ASN1_SEQUENCE) ||
178
+ !CBB_add_asn1_uint64(&pkcs8, 0 /* version */) ||
179
+ !CBB_add_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) ||
180
+ !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
181
+ !CBB_add_bytes(&oid, x25519_asn1_meth.oid, x25519_asn1_meth.oid_len) ||
182
+ !CBB_add_asn1(&pkcs8, &private_key, CBS_ASN1_OCTETSTRING) ||
183
+ !CBB_add_asn1(&private_key, &inner, CBS_ASN1_OCTETSTRING) ||
184
+ // The PKCS#8 encoding stores only the 32-byte seed which is the first 32
185
+ // bytes of the private key.
186
+ !CBB_add_bytes(&inner, key->priv, 32) ||
187
+ !CBB_flush(out)) {
188
+ OPENSSL_PUT_ERROR(EVP, EVP_R_ENCODE_ERROR);
189
+ return 0;
190
+ }
191
+
192
+ return 1;
193
+ }
194
+
195
+ static int x25519_size(const EVP_PKEY *pkey) { return 32; }
196
+
197
+ static int x25519_bits(const EVP_PKEY *pkey) { return 253; }
198
+
199
+ const EVP_PKEY_ASN1_METHOD x25519_asn1_meth = {
200
+ EVP_PKEY_X25519,
201
+ {0x2b, 0x65, 0x6e},
202
+ 3,
203
+ x25519_pub_decode,
204
+ x25519_pub_encode,
205
+ x25519_pub_cmp,
206
+ x25519_priv_decode,
207
+ x25519_priv_encode,
208
+ x25519_set_priv_raw,
209
+ x25519_set_pub_raw,
210
+ x25519_get_priv_raw,
211
+ x25519_get_pub_raw,
212
+ NULL /* pkey_opaque */,
213
+ x25519_size,
214
+ x25519_bits,
215
+ NULL /* param_missing */,
216
+ NULL /* param_copy */,
217
+ NULL /* param_cmp */,
218
+ x25519_free,
219
+ };
220
+
221
+ int EVP_PKEY_set1_tls_encodedpoint(EVP_PKEY *pkey, const uint8_t *in,
222
+ size_t len) {
223
+ // TODO(davidben): In OpenSSL, this function also works for |EVP_PKEY_EC|
224
+ // keys. Add support if it ever comes up.
225
+ if (pkey->type != EVP_PKEY_X25519) {
226
+ OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
227
+ return 0;
228
+ }
229
+
230
+ return x25519_set_pub_raw(pkey, in, len);
231
+ }
232
+
233
+ size_t EVP_PKEY_get1_tls_encodedpoint(const EVP_PKEY *pkey, uint8_t **out_ptr) {
234
+ // TODO(davidben): In OpenSSL, this function also works for |EVP_PKEY_EC|
235
+ // keys. Add support if it ever comes up.
236
+ if (pkey->type != EVP_PKEY_X25519) {
237
+ OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
238
+ return 0;
239
+ }
240
+
241
+ const X25519_KEY *key = pkey->pkey.ptr;
242
+ if (key == NULL) {
243
+ OPENSSL_PUT_ERROR(EVP, EVP_R_NO_KEY_SET);
244
+ return 0;
245
+ }
246
+
247
+ *out_ptr = BUF_memdup(key->pub, 32);
248
+ return *out_ptr == NULL ? 0 : 32;
249
+ }