Skip to content

Commit

Permalink
pkey: simplify ossl_pkey_new()
Browse files Browse the repository at this point in the history
ossl_{rsa,dsa,dh,ec}_new() called from this function are not used
anywhere else. Inline them into pkey_new0() and reduce code
duplication.
  • Loading branch information
rhenium committed May 13, 2020
1 parent 41587f6 commit 94aeab2
Show file tree
Hide file tree
Showing 6 changed files with 9 additions and 100 deletions.
22 changes: 9 additions & 13 deletions ext/openssl/ossl_pkey.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,34 +95,30 @@ const rb_data_type_t ossl_evp_pkey_type = {
static VALUE
pkey_new0(EVP_PKEY *pkey)
{
VALUE obj;
VALUE klass, obj;
int type;

if (!pkey || (type = EVP_PKEY_base_id(pkey)) == EVP_PKEY_NONE)
ossl_raise(rb_eRuntimeError, "pkey is empty");

switch (type) {
#if !defined(OPENSSL_NO_RSA)
case EVP_PKEY_RSA:
return ossl_rsa_new(pkey);
case EVP_PKEY_RSA: klass = cRSA; break;
#endif
#if !defined(OPENSSL_NO_DSA)
case EVP_PKEY_DSA:
return ossl_dsa_new(pkey);
case EVP_PKEY_DSA: klass = cDSA; break;
#endif
#if !defined(OPENSSL_NO_DH)
case EVP_PKEY_DH:
return ossl_dh_new(pkey);
case EVP_PKEY_DH: klass = cDH; break;
#endif
#if !defined(OPENSSL_NO_EC)
case EVP_PKEY_EC:
return ossl_ec_new(pkey);
case EVP_PKEY_EC: klass = cEC; break;
#endif
default:
obj = NewPKey(cPKey);
SetPKey(obj, pkey);
return obj;
default: klass = cPKey; break;
}
obj = NewPKey(klass);
SetPKey(obj, pkey);
return obj;
}

VALUE
Expand Down
3 changes: 0 additions & 3 deletions ext/openssl/ossl_pkey.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ void Init_ossl_pkey(void);
extern VALUE cRSA;
extern VALUE eRSAError;

VALUE ossl_rsa_new(EVP_PKEY *);
void Init_ossl_rsa(void);

/*
Expand All @@ -65,7 +64,6 @@ void Init_ossl_rsa(void);
extern VALUE cDSA;
extern VALUE eDSAError;

VALUE ossl_dsa_new(EVP_PKEY *);
void Init_ossl_dsa(void);

/*
Expand All @@ -74,7 +72,6 @@ void Init_ossl_dsa(void);
extern VALUE cDH;
extern VALUE eDHError;

VALUE ossl_dh_new(EVP_PKEY *);
void Init_ossl_dh(void);

/*
Expand Down
21 changes: 0 additions & 21 deletions ext/openssl/ossl_pkey_dh.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,27 +54,6 @@ dh_instance(VALUE klass, DH *dh)
return obj;
}

VALUE
ossl_dh_new(EVP_PKEY *pkey)
{
VALUE obj;

if (!pkey) {
obj = dh_instance(cDH, DH_new());
} else {
obj = NewPKey(cDH);
if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DH) {
ossl_raise(rb_eTypeError, "Not a DH key!");
}
SetPKey(obj, pkey);
}
if (obj == Qfalse) {
ossl_raise(eDHError, NULL);
}

return obj;
}

/*
* Private
*/
Expand Down
21 changes: 0 additions & 21 deletions ext/openssl/ossl_pkey_dsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,27 +68,6 @@ dsa_instance(VALUE klass, DSA *dsa)
return obj;
}

VALUE
ossl_dsa_new(EVP_PKEY *pkey)
{
VALUE obj;

if (!pkey) {
obj = dsa_instance(cDSA, DSA_new());
} else {
obj = NewPKey(cDSA);
if (EVP_PKEY_base_id(pkey) != EVP_PKEY_DSA) {
ossl_raise(rb_eTypeError, "Not a DSA key!");
}
SetPKey(obj, pkey);
}
if (obj == Qfalse) {
ossl_raise(eDSAError, NULL);
}

return obj;
}

/*
* Private
*/
Expand Down
20 changes: 0 additions & 20 deletions ext/openssl/ossl_pkey_ec.c
Original file line number Diff line number Diff line change
Expand Up @@ -84,26 +84,6 @@ static VALUE ec_instance(VALUE klass, EC_KEY *ec)
return obj;
}

VALUE ossl_ec_new(EVP_PKEY *pkey)
{
VALUE obj;

if (!pkey) {
obj = ec_instance(cEC, EC_KEY_new());
} else {
obj = NewPKey(cEC);
if (EVP_PKEY_base_id(pkey) != EVP_PKEY_EC) {
ossl_raise(rb_eTypeError, "Not a EC key!");
}
SetPKey(obj, pkey);
}
if (obj == Qfalse) {
ossl_raise(eECError, NULL);
}

return obj;
}

/*
* Creates a new EC_KEY on the EC group obj. arg can be an EC::Group or a String
* representing an OID.
Expand Down
22 changes: 0 additions & 22 deletions ext/openssl/ossl_pkey_rsa.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,28 +69,6 @@ rsa_instance(VALUE klass, RSA *rsa)
return obj;
}

VALUE
ossl_rsa_new(EVP_PKEY *pkey)
{
VALUE obj;

if (!pkey) {
obj = rsa_instance(cRSA, RSA_new());
}
else {
obj = NewPKey(cRSA);
if (EVP_PKEY_base_id(pkey) != EVP_PKEY_RSA) {
ossl_raise(rb_eTypeError, "Not a RSA key!");
}
SetPKey(obj, pkey);
}
if (obj == Qfalse) {
ossl_raise(eRSAError, NULL);
}

return obj;
}

/*
* Private
*/
Expand Down

0 comments on commit 94aeab2

Please sign in to comment.