[前][次][番号順一覧][スレッド一覧]

ruby-changes:61239

From: Bart <ko1@a...>
Date: Wed, 13 May 2020 15:48:21 +0900 (JST)
Subject: [ruby-changes:61239] 3f8665fe0e (master): [ruby/openssl] Add Marshal support to PKey objects

https://git.ruby-lang.org/ruby.git/commit/?id=3f8665fe0e

From 3f8665fe0ed5331aa723ddecbf6ad3728931c08d Mon Sep 17 00:00:00 2001
From: Bart de Water <bartdewater@g...>
Date: Sun, 19 Apr 2020 17:00:01 -0400
Subject: [ruby/openssl] Add Marshal support to PKey objects

https://github.com/ruby/openssl/commit/c4374ff041

diff --git a/ext/openssl/History.md b/ext/openssl/History.md
index 929d919..9e42944 100644
--- a/ext/openssl/History.md
+++ b/ext/openssl/History.md
@@ -24,8 +24,9 @@ Notable changes https://github.com/ruby/ruby/blob/trunk/ext/openssl/History.md#L24
 * Add `OpenSSL::SSL::SSLSocket.open` for opening a `TCPSocket` and
   returning an `OpenSSL::SSL::SSLSocket` for it.
   [[GitHub #225]](https://github.com/ruby/openssl/issues/225)
-* Support marshalling of `OpenSSL::X509` objects.
+* Support marshalling of `OpenSSL::X509` and `OpenSSL::PKey` objects.
   [[GitHub #281]](https://github.com/ruby/openssl/pull/281)
+  [[GitHub #363]](https://github.com/ruby/openssl/pull/363)
 * Add `OpenSSL.secure_compare` for timing safe string comparison for
   strings of possibly unequal length.
   [[GitHub #280]](https://github.com/ruby/openssl/pull/280)
diff --git a/ext/openssl/lib/openssl/marshal.rb b/ext/openssl/lib/openssl/marshal.rb
new file mode 100644
index 0000000..af56471
--- /dev/null
+++ b/ext/openssl/lib/openssl/marshal.rb
@@ -0,0 +1,30 @@ https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/marshal.rb#L1
+# frozen_string_literal: true
+#--
+# = Ruby-space definitions to add DER (de)serialization to classes
+#
+# = Info
+# 'OpenSSL for Ruby 2' project
+# Copyright (C) 2002  Michal Rokos <m.rokos@s...>
+# All rights reserved.
+#
+# = Licence
+# This program is licensed under the same licence as Ruby.
+# (See the file 'LICENCE'.)
+#++
+module OpenSSL
+  module Marshal
+    def self.included(base)
+      base.extend(ClassMethods)
+    end
+
+    module ClassMethods
+      def _load(string)
+        new(string)
+      end
+    end
+
+    def _dump(_level)
+      to_der
+    end
+  end
+end
diff --git a/ext/openssl/lib/openssl/pkey.rb b/ext/openssl/lib/openssl/pkey.rb
index ecb112f..9cc3276 100644
--- a/ext/openssl/lib/openssl/pkey.rb
+++ b/ext/openssl/lib/openssl/pkey.rb
@@ -4,8 +4,21 @@ https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/pkey.rb#L4
 # Copyright (C) 2017 Ruby/OpenSSL Project Authors
 #++
 
+require_relative 'marshal'
+
 module OpenSSL::PKey
+  class DH
+    include OpenSSL::Marshal
+  end
+
+  class DSA
+    include OpenSSL::Marshal
+  end
+
   if defined?(EC)
+  class EC
+    include OpenSSL::Marshal
+  end
   class EC::Point
     # :call-seq:
     #    point.to_bn([conversion_form]) -> OpenSSL::BN
@@ -22,4 +35,8 @@ module OpenSSL::PKey https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/pkey.rb#L35
     end
   end
   end
+
+  class RSA
+    include OpenSSL::Marshal
+  end
 end
diff --git a/ext/openssl/lib/openssl/x509.rb b/ext/openssl/lib/openssl/x509.rb
index 1d2a5aa..6771b90 100644
--- a/ext/openssl/lib/openssl/x509.rb
+++ b/ext/openssl/lib/openssl/x509.rb
@@ -12,24 +12,10 @@ https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/x509.rb#L12
 # (See the file 'LICENCE'.)
 #++
 
+require_relative 'marshal'
+
 module OpenSSL
   module X509
-    module Marshal
-      def self.included(base)
-        base.extend(ClassMethods)
-      end
-
-      module ClassMethods
-        def _load(string)
-          new(string)
-        end
-      end
-
-      def _dump(_level)
-        to_der
-      end
-    end
-
     class ExtensionFactory
       def create_extension(*arg)
         if arg.size > 1
@@ -57,7 +43,7 @@ module OpenSSL https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/x509.rb#L43
     end
 
     class Extension
-      include Marshal
+      include OpenSSL::Marshal
 
       def ==(other)
         return false unless Extension === other
@@ -216,7 +202,7 @@ module OpenSSL https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/x509.rb#L202
     end
 
     class Name
-      include Marshal
+      include OpenSSL::Marshal
 
       module RFC2253DN
         Special = ',=+<>#;'
@@ -321,7 +307,7 @@ module OpenSSL https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/x509.rb#L307
     end
 
     class Attribute
-      include Marshal
+      include OpenSSL::Marshal
 
       def ==(other)
         return false unless Attribute === other
@@ -336,7 +322,7 @@ module OpenSSL https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/x509.rb#L322
     end
 
     class Certificate
-      include Marshal
+      include OpenSSL::Marshal
       include Extension::SubjectKeyIdentifier
       include Extension::AuthorityKeyIdentifier
       include Extension::CRLDistributionPoints
@@ -355,7 +341,7 @@ module OpenSSL https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/x509.rb#L341
     end
 
     class CRL
-      include Marshal
+      include OpenSSL::Marshal
       include Extension::AuthorityKeyIdentifier
 
       def ==(other)
@@ -372,7 +358,7 @@ module OpenSSL https://github.com/ruby/ruby/blob/trunk/ext/openssl/lib/openssl/x509.rb#L358
     end
 
     class Request
-      include Marshal
+      include OpenSSL::Marshal
 
       def ==(other)
         return false unless Request === other
diff --git a/test/openssl/test_pkey_dh.rb b/test/openssl/test_pkey_dh.rb
index 6397e76..fd2c7a6 100644
--- a/test/openssl/test_pkey_dh.rb
+++ b/test/openssl/test_pkey_dh.rb
@@ -74,6 +74,13 @@ class OpenSSL::TestPKeyDH < OpenSSL::PKeyTestCase https://github.com/ruby/ruby/blob/trunk/test/openssl/test_pkey_dh.rb#L74
     assert_equal dh2.g, dh.g
   end
 
+  def test_marshal
+    dh = Fixtures.pkey("dh1024")
+    deserialized = Marshal.load(Marshal.dump(dh))
+
+    assert_equal dh.to_der, deserialized.to_der
+  end
+
   private
 
   def assert_equal_params(dh1, dh2)
diff --git a/test/openssl/test_pkey_dsa.rb b/test/openssl/test_pkey_dsa.rb
index 2c839b7..9c9da89 100644
--- a/test/openssl/test_pkey_dsa.rb
+++ b/test/openssl/test_pkey_dsa.rb
@@ -191,6 +191,13 @@ fWLOqqkzFeRrYMDzUpl36XktY6Yq8EJYlW9pCMmBVNy/dQ== https://github.com/ruby/ruby/blob/trunk/test/openssl/test_pkey_dsa.rb#L191
     assert_not_equal key.params, key2.params
   end
 
+  def test_marshal
+    key = Fixtures.pkey("dsa1024")
+    deserialized = Marshal.load(Marshal.dump(key))
+
+    assert_equal key.to_der, deserialized.to_der
+  end
+
   private
   def assert_same_dsa(expected, key)
     check_component(expected, key, [:p, :q, :g, :pub_key, :priv_key])
diff --git a/test/openssl/test_pkey_ec.rb b/test/openssl/test_pkey_ec.rb
index 6b83ed7..a0e6a23 100644
--- a/test/openssl/test_pkey_ec.rb
+++ b/test/openssl/test_pkey_ec.rb
@@ -52,6 +52,13 @@ class OpenSSL::TestEC < OpenSSL::PKeyTestCase https://github.com/ruby/ruby/blob/trunk/test/openssl/test_pkey_ec.rb#L52
     assert_equal(true, ec.private?)
   end
 
+  def test_marshal
+    key = Fixtures.pkey("p256")
+    deserialized = Marshal.load(Marshal.dump(key))
+
+    assert_equal key.to_der, deserialized.to_der
+  end
+
   def test_check_key
     key = OpenSSL::PKey::EC.new("prime256v1").generate_key!
     assert_equal(true, key.check_key)
diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb
index a9587aa..36a2a97 100644
--- a/test/openssl/test_pkey_rsa.rb
+++ b/test/openssl/test_pkey_rsa.rb
@@ -443,6 +443,13 @@ class OpenSSL::TestPKeyRSA < OpenSSL::PKeyTestCase https://github.com/ruby/ruby/blob/trunk/test/openssl/test_pkey_rsa.rb#L443
     assert_not_equal key.params, key2.params
   end
 
+  def test_marshal
+    key = Fixtures.pkey("rsa2048")
+    deserialized = Marshal.load(Marshal.dump(key))
+
+    assert_equal key.to_der, deserialized.to_der
+  end
+
   private
   def assert_same_rsa(expected, key)
     check_component(expected, key, [:n, :e, :d, :p, :q, :dmp1, :dmq1, :iqmp])
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]