mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Sat May 14 05:08:32 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
* 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 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31556 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
10219ff621
commit
e16d6108c0
5 changed files with 22 additions and 90 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
Sat May 14 05:08:32 2011 Martin Bosslet <Martin.Bosslet@googlemail.com>
|
||||||
|
|
||||||
|
* 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@segment7.net>
|
Sat May 14 05:02:58 2011 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
* lib/uri.rb: Add toplevel documentation. Patch by Vincent Batts.
|
* lib/uri.rb: Add toplevel documentation. Patch by Vincent Batts.
|
||||||
|
|
|
@ -239,8 +239,6 @@ Init_ossl_digest()
|
||||||
mOSSL = rb_define_module("OpenSSL"); /* let rdoc know about mOSSL */
|
mOSSL = rb_define_module("OpenSSL"); /* let rdoc know about mOSSL */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Allows you to compute cryptographic hashes of arbitrary data.
|
|
||||||
*/
|
|
||||||
cDigest = rb_define_class_under(mOSSL, "Digest", rb_path2class("Digest::Class"));
|
cDigest = rb_define_class_under(mOSSL, "Digest", rb_path2class("Digest::Class"));
|
||||||
eDigestError = rb_define_class_under(cDigest, "DigestError", eOSSLError);
|
eDigestError = rb_define_class_under(cDigest, "DigestError", eOSSLError);
|
||||||
|
|
||||||
|
|
|
@ -18,9 +18,6 @@ VALUE cPKey;
|
||||||
VALUE ePKeyError;
|
VALUE ePKeyError;
|
||||||
ID id_private_q;
|
ID id_private_q;
|
||||||
|
|
||||||
#define reset_bio(b) (void)BIO_reset((b)); \
|
|
||||||
(void)ERR_get_error();
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* callback for generating keys
|
* callback for generating keys
|
||||||
*/
|
*/
|
||||||
|
@ -68,50 +65,23 @@ ossl_pkey_new(EVP_PKEY *pkey)
|
||||||
return Qnil; /* not reached */
|
return Qnil; /* not reached */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
VALUE
|
||||||
* call-seq:
|
ossl_pkey_new_from_file(VALUE filename)
|
||||||
* 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)
|
|
||||||
{
|
{
|
||||||
|
FILE *fp;
|
||||||
EVP_PKEY *pkey;
|
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"))) {
|
||||||
bio = ossl_obj2bio(data);
|
ossl_raise(ePKeyError, "%s", strerror(errno));
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BIO_free(bio);
|
pkey = PEM_read_PrivateKey(fp, NULL, ossl_pem_passwd_cb, NULL);
|
||||||
if (!pkey)
|
fclose(fp);
|
||||||
ossl_raise(rb_eArgError, "Could not parse PKey");
|
if (!pkey) {
|
||||||
|
ossl_raise(ePKeyError, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
return ossl_pkey_new(pkey);
|
return ossl_pkey_new(pkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -251,8 +221,6 @@ Init_ossl_pkey()
|
||||||
|
|
||||||
cPKey = rb_define_class_under(mPKey, "PKey", rb_cObject);
|
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_alloc_func(cPKey, ossl_pkey_alloc);
|
||||||
rb_define_method(cPKey, "initialize", ossl_pkey_initialize, 0);
|
rb_define_method(cPKey, "initialize", ossl_pkey_initialize, 0);
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ extern ID id_private_q;
|
||||||
void ossl_generate_cb(int, int, void *);
|
void ossl_generate_cb(int, int, void *);
|
||||||
|
|
||||||
VALUE ossl_pkey_new(EVP_PKEY *);
|
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 *GetPKeyPtr(VALUE);
|
||||||
EVP_PKEY *DupPKeyPtr(VALUE);
|
EVP_PKEY *DupPKeyPtr(VALUE);
|
||||||
EVP_PKEY *GetPrivPKeyPtr(VALUE);
|
EVP_PKEY *GetPrivPKeyPtr(VALUE);
|
||||||
|
|
|
@ -46,48 +46,6 @@ class OpenSSL::TestPKeyRSA < Test::Unit::TestCase
|
||||||
OpenSSL::PKey::RSA.new pem
|
OpenSSL::PKey::RSA.new pem
|
||||||
assert_equal([], OpenSSL.errors)
|
assert_equal([], OpenSSL.errors)
|
||||||
end
|
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
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue