diff options
| author | nahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-03-06 21:49:54 +0000 |
|---|---|---|
| committer | nahi <nahi@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-03-06 21:49:54 +0000 |
| commit | bebc39d13580fe890a8f5e6a698b7d90e72e6eae (patch) | |
| tree | 5f5add145f085e34f251fb685191aa7e7000f941 | |
| parent | e0bfe3254bc21a0644f6eb6e8b4c4e445d64159d (diff) | |
* ext/openssl/ossl_x509name.c: added X509::Name#hash_old as a wrapper
for X509_NAME_hash_old in OpenSSL 1.0.0.
* test/openssl/test_x509name.rb (test_hash): make test pass with
OpenSSL 1.0.0.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@26840 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | ChangeLog | 8 | ||||
| -rw-r--r-- | ext/openssl/extconf.rb | 1 | ||||
| -rw-r--r-- | ext/openssl/ossl_x509name.c | 24 | ||||
| -rw-r--r-- | test/openssl/test_x509name.rb | 10 |
4 files changed, 41 insertions, 2 deletions
@@ -1,3 +1,11 @@ +Sun Mar 7 06:47:05 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org> + + * ext/openssl/ossl_x509name.c: added X509::Name#hash_old as a wrapper + for X509_NAME_hash_old in OpenSSL 1.0.0. + + * test/openssl/test_x509name.rb (test_hash): make test pass with + OpenSSL 1.0.0. + Sun Mar 7 06:45:58 2010 NAKAMURA, Hiroshi <nahi@ruby-lang.org> * test/openssl/test_x509*: make tests pass with OpenSSL 1.0.0b5. diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb index 6b83489642..464c00a4ce 100644 --- a/ext/openssl/extconf.rb +++ b/ext/openssl/extconf.rb @@ -91,6 +91,7 @@ have_func("X509_CRL_add0_revoked") have_func("X509_CRL_set_issuer_name") have_func("X509_CRL_set_version") have_func("X509_CRL_sort") +have_func("X509_NAME_hash_old") have_func("X509_STORE_get_ex_data") have_func("X509_STORE_set_ex_data") have_func("OBJ_NAME_do_all_sorted") diff --git a/ext/openssl/ossl_x509name.c b/ext/openssl/ossl_x509name.c index fd8e329a85..af7b7543c0 100644 --- a/ext/openssl/ossl_x509name.c +++ b/ext/openssl/ossl_x509name.c @@ -306,6 +306,27 @@ ossl_x509name_hash(VALUE self) return ULONG2NUM(hash); } +#ifdef HAVE_X509_NAME_HASH_OLD +/* + * call-seq: + * name.hash_old => integer + * + * hash_old returns MD5 based hash used in OpenSSL 0.9.X. + */ +static VALUE +ossl_x509name_hash_old(VALUE self) +{ + X509_NAME *name; + unsigned long hash; + + GetX509Name(self, name); + + hash = X509_NAME_hash_old(name); + + return ULONG2NUM(hash); +} +#endif + /* * call-seq: * name.to_der => string @@ -351,6 +372,9 @@ Init_ossl_x509name() rb_define_alias(cX509Name, "<=>", "cmp"); rb_define_method(cX509Name, "eql?", ossl_x509name_eql, 1); rb_define_method(cX509Name, "hash", ossl_x509name_hash, 0); +#ifdef HAVE_X509_NAME_HASH_OLD + rb_define_method(cX509Name, "hash_old", ossl_x509name_hash_old, 0); +#endif rb_define_method(cX509Name, "to_der", ossl_x509name_to_der, 0); utf8str = INT2NUM(V_ASN1_UTF8STRING); diff --git a/test/openssl/test_x509name.rb b/test/openssl/test_x509name.rb index 8e13878b56..434aa18940 100644 --- a/test/openssl/test_x509name.rb +++ b/test/openssl/test_x509name.rb @@ -264,18 +264,24 @@ class OpenSSL::TestX509Name < Test::Unit::TestCase assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[4][2]) end + def name_hash(name) + # OpenSSL 1.0.0 uses SHA1 for canonical encoding (not just a der) of + # X509Name for X509_NAME_hash. + name.respond_to?(:hash_old) ? name.hash_old : name.hash + end + def test_hash dn = "/DC=org/DC=ruby-lang/CN=www.ruby-lang.org" name = OpenSSL::X509::Name.parse(dn) d = Digest::MD5.digest(name.to_der) expected = (d[0] & 0xff) | (d[1] & 0xff) << 8 | (d[2] & 0xff) << 16 | (d[3] & 0xff) << 24 - assert_equal(expected, name.hash) + assert_equal(expected, name_hash(name)) # dn = "/DC=org/DC=ruby-lang/CN=baz.ruby-lang.org" name = OpenSSL::X509::Name.parse(dn) d = Digest::MD5.digest(name.to_der) expected = (d[0] & 0xff) | (d[1] & 0xff) << 8 | (d[2] & 0xff) << 16 | (d[3] & 0xff) << 24 - assert_equal(expected, name.hash) + assert_equal(expected, name_hash(name)) end end |
