EC_KEY *EC_KEY_new_by_curve_name_NID_secp256k1(void) { static EC_GROUP *group = NULL; EC_KEY *ret = NULL; if (group == NULL) { #ifdef HAVE_NID_secp256k1 group = EC_GROUP_new_by_curve_name(NID_secp256k1); #else group = ec_group_new_from_data(&EC_SECG_PRIME_256K1.h); #endif if (group == NULL) { return NULL; } } ret = EC_KEY_new(); if (ret == NULL) { return NULL; } EC_KEY_set_group(ret, group); return ret; }
EC_GROUP *EC_GROUP_new_by_curve_name(int nid) { size_t i; EC_GROUP *ret = NULL; if (nid <= 0) return NULL; for (i=0; i<curve_list_length; i++) if (curve_list[i].nid == nid) { ret = ec_group_new_from_data(curve_list[i]); break; } if (ret == NULL) { ECerr(EC_F_EC_GROUP_NEW_BY_CURVE_NAME, EC_R_UNKNOWN_GROUP); return NULL; } EC_GROUP_set_curve_name(ret, nid); return ret; }
EC_GROUP *EC_GROUP_new_by_curve_name(int nid) { const struct built_in_curves *const curves = OPENSSL_built_in_curves(); EC_GROUP *ret = NULL; for (size_t i = 0; i < OPENSSL_NUM_BUILT_IN_CURVES; i++) { const struct built_in_curve *curve = &curves->curves[i]; if (curve->nid == nid) { ret = ec_group_new_from_data(i); break; } } if (ret == NULL) { OPENSSL_PUT_ERROR(EC, EC_R_UNKNOWN_GROUP); return NULL; } ret->curve_name = nid; return ret; }
EC_GROUP *EC_GROUP_new_by_curve_name(int nid) { unsigned i; const struct built_in_curve *curve; EC_GROUP *ret = NULL; for (i = 0; OPENSSL_built_in_curves[i].nid != NID_undef; i++) { curve = &OPENSSL_built_in_curves[i]; if (curve->nid == nid) { ret = ec_group_new_from_data(curve); break; } } if (ret == NULL) { OPENSSL_PUT_ERROR(EC, EC_R_UNKNOWN_GROUP); return NULL; } ret->curve_name = nid; return ret; }