ruby-changes:19516
From: emboss <ko1@a...>
Date: Sat, 14 May 2011 05:25:47 +0900 (JST)
Subject: [ruby-changes:19516] emboss:r31556 (trunk): * ext/openssl/ossl_digest.c
emboss 2011-05-14 05:10:27 +0900 (Sat, 14 May 2011) New Revision: 31556 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31556 Log: * ext/openssl/ossl_digest.c * ext/openssl/ossl_pkey.c * ext/openssl/ossl_pkey.h * test/openssl/pkey/test_pkey_rsa.rb Reverted premature commit. Sorry for the noise! Previous revision: 31555 Modified files: trunk/ChangeLog trunk/ext/openssl/ossl_digest.c trunk/ext/openssl/ossl_pkey.c trunk/ext/openssl/ossl_pkey.h trunk/test/openssl/test_pkey_rsa.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 31555) +++ ChangeLog (revision 31556) @@ -1,3 +1,11 @@ +Sat May 14 05:08:32 2011 Martin Bosslet <Martin.Bosslet@g...> + + * ext/openssl/ossl_digest.c + * ext/openssl/ossl_pkey.c + * ext/openssl/ossl_pkey.h + * test/openssl/pkey/test_pkey_rsa.rb + Reverted premature commit. Sorry for the noise! + Sat May 14 05:02:58 2011 Eric Hodel <drbrain@s...> * lib/uri.rb: Add toplevel documentation. Patch by Vincent Batts. Index: ext/openssl/ossl_digest.c =================================================================== --- ext/openssl/ossl_digest.c (revision 31555) +++ ext/openssl/ossl_digest.c (revision 31556) @@ -239,8 +239,6 @@ mOSSL = rb_define_module("OpenSSL"); /* let rdoc know about mOSSL */ #endif - /* Allows you to compute cryptographic hashes of arbitrary data. - */ cDigest = rb_define_class_under(mOSSL, "Digest", rb_path2class("Digest::Class")); eDigestError = rb_define_class_under(cDigest, "DigestError", eOSSLError); Index: ext/openssl/ossl_pkey.c =================================================================== --- ext/openssl/ossl_pkey.c (revision 31555) +++ ext/openssl/ossl_pkey.c (revision 31556) @@ -18,9 +18,6 @@ VALUE ePKeyError; ID id_private_q; -#define reset_bio(b) (void)BIO_reset((b)); \ - (void)ERR_get_error(); - /* * callback for generating keys */ @@ -68,50 +65,23 @@ return Qnil; /* not reached */ } -/* - * call-seq: - * OpenSSL::PKey.read(string [, pwd ] ) -> PKey - * OpenSSL::PKey.read(file [, pwd ]) -> PKey - * - * === Parameters - * * +string+ is a DER- or PEM-encoded string containing an arbitrary private - * or public key. - * * +file+ is an instance of +File+ containing a DER- or PEM-encoded - * arbitrary private or public key. - * * +pwd+ is an optional password in case +string+ or +file+ is an encrypted - * PEM resource. - */ -VALUE -ossl_pkey_new_from_data(int argc, VALUE *argv, VALUE self) +VALUE +ossl_pkey_new_from_file(VALUE filename) { + FILE *fp; EVP_PKEY *pkey; - BIO *bio; - VALUE data, pass; - char *passwd = NULL; - rb_scan_args(argc, argv, "11", &data, &pass); + SafeStringValue(filename); + if (!(fp = fopen(RSTRING_PTR(filename), "r"))) { + ossl_raise(ePKeyError, "%s", strerror(errno)); + } - bio = ossl_obj2bio(data); - if (!(pkey = d2i_PrivateKey_bio(bio, NULL))) { - reset_bio(bio); - if (!NIL_P(pass)) { - passwd = StringValuePtr(pass); - } - if (!(pkey = PEM_read_bio_PrivateKey(bio, NULL, ossl_pem_passwd_cb, passwd))) { - reset_bio(bio); - if (!(pkey = d2i_PUBKEY_bio(bio, NULL))) { - reset_bio(bio); - if (!NIL_P(pass)) { - passwd = StringValuePtr(pass); - } - pkey = PEM_read_bio_PUBKEY(bio, NULL, ossl_pem_passwd_cb, passwd); - } - } + pkey = PEM_read_PrivateKey(fp, NULL, ossl_pem_passwd_cb, NULL); + fclose(fp); + if (!pkey) { + ossl_raise(ePKeyError, NULL); } - - BIO_free(bio); - if (!pkey) - ossl_raise(rb_eArgError, "Could not parse PKey"); + return ossl_pkey_new(pkey); } @@ -251,8 +221,6 @@ cPKey = rb_define_class_under(mPKey, "PKey", rb_cObject); - rb_define_module_function(mPKey, "read", ossl_pkey_new_from_data, -1); - rb_define_alloc_func(cPKey, ossl_pkey_alloc); rb_define_method(cPKey, "initialize", ossl_pkey_initialize, 0); Index: ext/openssl/ossl_pkey.h =================================================================== --- ext/openssl/ossl_pkey.h (revision 31555) +++ ext/openssl/ossl_pkey.h (revision 31556) @@ -41,7 +41,7 @@ void ossl_generate_cb(int, int, void *); VALUE ossl_pkey_new(EVP_PKEY *); -VALUE ossl_pkey_new_from_data(int, VALUE *, VALUE); +VALUE ossl_pkey_new_from_file(VALUE); EVP_PKEY *GetPKeyPtr(VALUE); EVP_PKEY *DupPKeyPtr(VALUE); EVP_PKEY *GetPrivPKeyPtr(VALUE); Index: test/openssl/test_pkey_rsa.rb =================================================================== --- test/openssl/test_pkey_rsa.rb (revision 31555) +++ test/openssl/test_pkey_rsa.rb (revision 31556) @@ -46,48 +46,6 @@ OpenSSL::PKey::RSA.new pem assert_equal([], OpenSSL.errors) end - - def test_read_private_key_der - der = OpenSSL::TestUtils::TEST_KEY_RSA1024.to_der - key = OpenSSL::PKey.read(der) - assert(key.private?) - assert_equal(der, key.to_der) - end - - def test_read_private_key_pem - pem = OpenSSL::TestUtils::TEST_KEY_RSA1024.to_pem - key = OpenSSL::PKey.read(pem) - assert(key.private?) - assert_equal(pem, key.to_pem) - end - - def test_read_public_key_der - der = OpenSSL::TestUtils::TEST_KEY_RSA1024.public_key.to_der - key = OpenSSL::PKey.read(der) - assert(!key.private?) - assert_equal(der, key.to_der) - end - - def test_read_public_key_pem - pem = OpenSSL::TestUtils::TEST_KEY_RSA1024.public_key.to_pem - key = OpenSSL::PKey.read(pem) - assert(!key.private?) - assert_equal(pem, key.to_pem) - end - - def test_read_private_key_pem_pw - pem = OpenSSL::TestUtils::TEST_KEY_RSA1024.to_pem(OpenSSL::Cipher.new('AES-128-CBC'), 'secret') - #callback form for password - key = OpenSSL::PKey.read(pem) do - 'secret' - end - assert(key.private?) - # pass password directly - key = OpenSSL::PKey.read(pem, 'secret') - assert(key.private?) - #omit pem equality check, will be different due to cipher iv - end - end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/