VALUE ossl_ec_new(EVP_PKEY *pkey) { VALUE obj; if (!pkey) { obj = ec_instance(cEC, EC_KEY_new()); } else { if (EVP_PKEY_type(pkey->type) != EVP_PKEY_EC) { ossl_raise(rb_eTypeError, "Not a EC key!"); } WrapPKey(cEC, obj, pkey); } if (obj == Qfalse) { ossl_raise(eECError, NULL); } return obj; }
/* * call-seq: * EC.generate(ec_group) -> ec * EC.generate(string) -> ec * * Creates a new EC instance with a new random private and public key. */ static VALUE ossl_ec_key_s_generate(VALUE klass, VALUE arg) { EC_KEY *ec; VALUE obj; ec = ec_key_new_from_group(arg); obj = ec_instance(klass, ec); if (obj == Qfalse) { EC_KEY_free(ec); ossl_raise(eECError, NULL); } if (!EC_KEY_generate_key(ec)) ossl_raise(eECError, "EC_KEY_generate_key"); 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; }