Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

fallback_scsv.patch 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. diff --git a/ext/openssl/deprecation.rb b/ext/openssl/deprecation.rb
  2. index d773536..f4a6c4b 100644
  3. --- a/ext/openssl/deprecation.rb
  4. +++ b/ext/openssl/deprecation.rb
  5. @@ -19,4 +19,9 @@ def self.check_func(func, header)
  6. have_func(func, header, deprecated_warning_flag) and
  7. have_header(header, nil, deprecated_warning_flag)
  8. end
  9. +
  10. + def self.check_func_or_macro(func, header)
  11. + check_func(func, header) or
  12. + have_macro(func, header) && $defs.push("-DHAVE_#{func.upcase}")
  13. + end
  14. end
  15. diff --git a/ext/openssl/lib/openssl/ssl.rb b/ext/openssl/lib/openssl/ssl.rb
  16. index 9893757..bcb167e 100644
  17. --- a/ext/openssl/lib/openssl/ssl.rb
  18. +++ b/ext/openssl/lib/openssl/ssl.rb
  19. @@ -105,11 +105,12 @@ class SSLContext
  20. # SSLContext.new("SSLv23_client") => ctx
  21. #
  22. # You can get a list of valid methods with OpenSSL::SSL::SSLContext::METHODS
  23. - def initialize(version = nil)
  24. + def initialize(version = nil, fallback_scsv: false)
  25. INIT_VARS.each { |v| instance_variable_set v, nil }
  26. self.options = self.options | OpenSSL::SSL::OP_ALL
  27. return unless version
  28. self.ssl_version = version
  29. + self.enable_fallback_scsv if fallback_scsv
  30. end
  31. ##
  32. diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c
  33. index cc17a0c..9f7ee0b 100644
  34. --- a/ext/openssl/ossl_ssl.c
  35. +++ b/ext/openssl/ossl_ssl.c
  36. @@ -978,6 +978,31 @@ ossl_sslctx_set_ciphers(VALUE self, VALUE v)
  37. return v;
  38. }
  39. +/*
  40. + * call-seq:
  41. + * ctx.enable_fallback_scsv() => nil
  42. + *
  43. + * Activate TLS_FALLBACK_SCSV for this context.
  44. + * See RFC 7507.
  45. + */
  46. +static VALUE
  47. +ossl_sslctx_enable_fallback_scsv(VALUE self)
  48. +{
  49. + SSL_CTX *ctx;
  50. +
  51. + GetSSLCTX(self, ctx);
  52. + if(!ctx){
  53. + rb_warning("SSL_CTX is not initialized.");
  54. + return Qnil;
  55. + }
  56. +
  57. + long modes = SSL_CTX_get_mode(ctx);
  58. + modes |= SSL_MODE_SEND_FALLBACK_SCSV;
  59. + SSL_CTX_set_mode(ctx, modes);
  60. +
  61. + return Qnil;
  62. +}
  63. +
  64. #if !defined(OPENSSL_NO_EC)
  65. /*
  66. * call-seq:
  67. @@ -2330,6 +2355,7 @@ Init_ossl_ssl(void)
  68. rb_define_method(cSSLContext, "ciphers", ossl_sslctx_get_ciphers, 0);
  69. rb_define_method(cSSLContext, "ciphers=", ossl_sslctx_set_ciphers, 1);
  70. rb_define_method(cSSLContext, "ecdh_curves=", ossl_sslctx_set_ecdh_curves, 1);
  71. + rb_define_method(cSSLContext, "enable_fallback_scsv", ossl_sslctx_enable_fallback_scsv, 0);
  72. rb_define_method(cSSLContext, "setup", ossl_sslctx_setup, 0);