mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
openssl: add OpenSSL::PKey::EC#private? and #public?
* ext/openssl/ossl_pkey_ec.c: rename PKey::EC#private_key? and #public_key? to #private? and #public? for consistency with other PKey types. Old names remain as alias. [ruby-core:45541] [Bug #6567] * test/openssl/test_pkey_ec.rb (test_check_key): check private? and public? works correctly. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55098 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9239916f5c
commit
7c971e61f0
3 changed files with 38 additions and 13 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
Sat May 21 14:25:38 2016 Kazuki Yamaguchi <k@rhe.jp>
|
||||||
|
|
||||||
|
* ext/openssl/ossl_pkey_ec.c: rename PKey::EC#private_key? and
|
||||||
|
#public_key? to #private? and #public? for consistency with other
|
||||||
|
PKey types. Old names remain as alias. [ruby-core:45541] [Bug #6567]
|
||||||
|
|
||||||
|
* test/openssl/test_pkey_ec.rb (test_check_key): check private? and
|
||||||
|
public? works correctly.
|
||||||
|
|
||||||
Sat May 21 12:40:36 2016 Kazuki Yamaguchi <k@rhe.jp>
|
Sat May 21 12:40:36 2016 Kazuki Yamaguchi <k@rhe.jp>
|
||||||
|
|
||||||
* ext/openssl/lib/openssl/buffering.rb (read_nonblock, readpartial):
|
* ext/openssl/lib/openssl/buffering.rb (read_nonblock, readpartial):
|
||||||
|
|
|
@ -438,32 +438,34 @@ static VALUE ossl_ec_key_set_public_key(VALUE self, VALUE public_key)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* key.public_key? => true or false
|
* key.public? => true or false
|
||||||
*
|
*
|
||||||
* Both public_key? and private_key? may return false at the same time unlike other PKey classes.
|
* Returns whether this EC instance has a public key. The public key
|
||||||
|
* (EC::Point) can be retrieved with EC#public_key.
|
||||||
*/
|
*/
|
||||||
static VALUE ossl_ec_key_is_public_key(VALUE self)
|
static VALUE ossl_ec_key_is_public(VALUE self)
|
||||||
{
|
{
|
||||||
EC_KEY *ec;
|
EC_KEY *ec;
|
||||||
|
|
||||||
Require_EC_KEY(self, ec);
|
Require_EC_KEY(self, ec);
|
||||||
|
|
||||||
return (EC_KEY_get0_public_key(ec) ? Qtrue : Qfalse);
|
return EC_KEY_get0_public_key(ec) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* key.private_key? => true or false
|
* key.private? => true or false
|
||||||
*
|
*
|
||||||
* Both public_key? and private_key? may return false at the same time unlike other PKey classes.
|
* Returns whether this EC instance has a private key. The private key (BN) can
|
||||||
|
* be retrieved with EC#private_key.
|
||||||
*/
|
*/
|
||||||
static VALUE ossl_ec_key_is_private_key(VALUE self)
|
static VALUE ossl_ec_key_is_private(VALUE self)
|
||||||
{
|
{
|
||||||
EC_KEY *ec;
|
EC_KEY *ec;
|
||||||
|
|
||||||
Require_EC_KEY(self, ec);
|
Require_EC_KEY(self, ec);
|
||||||
|
|
||||||
return (EC_KEY_get0_private_key(ec) ? Qtrue : Qfalse);
|
return EC_KEY_get0_private_key(ec) ? Qtrue : Qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE ossl_ec_key_to_string(VALUE self, VALUE ciph, VALUE pass, int format)
|
static VALUE ossl_ec_key_to_string(VALUE self, VALUE ciph, VALUE pass, int format)
|
||||||
|
@ -1619,8 +1621,10 @@ void Init_ossl_ec(void)
|
||||||
rb_define_method(cEC, "private_key=", ossl_ec_key_set_private_key, 1);
|
rb_define_method(cEC, "private_key=", ossl_ec_key_set_private_key, 1);
|
||||||
rb_define_method(cEC, "public_key", ossl_ec_key_get_public_key, 0);
|
rb_define_method(cEC, "public_key", ossl_ec_key_get_public_key, 0);
|
||||||
rb_define_method(cEC, "public_key=", ossl_ec_key_set_public_key, 1);
|
rb_define_method(cEC, "public_key=", ossl_ec_key_set_public_key, 1);
|
||||||
rb_define_method(cEC, "private_key?", ossl_ec_key_is_private_key, 0);
|
rb_define_method(cEC, "private?", ossl_ec_key_is_private, 0);
|
||||||
rb_define_method(cEC, "public_key?", ossl_ec_key_is_public_key, 0);
|
rb_define_method(cEC, "public?", ossl_ec_key_is_public, 0);
|
||||||
|
rb_define_alias(cEC, "private_key?", "private?");
|
||||||
|
rb_define_alias(cEC, "public_key?", "public?");
|
||||||
/* rb_define_method(cEC, "", ossl_ec_key_get_, 0);
|
/* rb_define_method(cEC, "", ossl_ec_key_get_, 0);
|
||||||
rb_define_method(cEC, "=", ossl_ec_key_set_ 1);
|
rb_define_method(cEC, "=", ossl_ec_key_set_ 1);
|
||||||
set/get enc_flags
|
set/get enc_flags
|
||||||
|
|
|
@ -40,9 +40,21 @@ class OpenSSL::TestEC < OpenSSL::TestCase
|
||||||
|
|
||||||
def test_check_key
|
def test_check_key
|
||||||
for key in @keys
|
for key in @keys
|
||||||
assert_equal(key.check_key, true)
|
assert_equal(true, key.check_key)
|
||||||
assert_equal(key.private_key?, true)
|
assert_equal(true, key.private?)
|
||||||
assert_equal(key.public_key?, true)
|
assert_equal(true, key.public?)
|
||||||
|
key2 = OpenSSL::PKey::EC.new(key.group)
|
||||||
|
assert_equal(false, key2.private?)
|
||||||
|
assert_equal(false, key2.public?)
|
||||||
|
key2.public_key = key.public_key
|
||||||
|
assert_equal(false, key2.private?)
|
||||||
|
assert_equal(true, key2.public?)
|
||||||
|
key2.private_key = key.private_key
|
||||||
|
assert_equal(true, key2.private?)
|
||||||
|
assert_equal(true, key2.public?)
|
||||||
|
assert_equal(true, key2.check_key)
|
||||||
|
key2.private_key += 1
|
||||||
|
assert_raise(OpenSSL::PKey::ECError) { key2.check_key }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue