BN_init(&ret->cofactor);
ret->nid = 0;
+ ret->asn1_flag = OPENSSL_EC_EXPLICIT | OPENSSL_EC_COMPRESSED;
+
+ ret->seed = NULL;
+ ret->seed_len = 0;
if (!meth->group_init(ret))
{
BN_free(&group->order);
BN_free(&group->cofactor);
+ if (group->seed)
+ OPENSSL_free(group->seed);
+
OPENSSL_free(group);
}
BN_clear_free(&group->order);
BN_clear_free(&group->cofactor);
+ if (group->seed)
+ {
+ memset(group->seed, 0, group->seed_len);
+ OPENSSL_free(group->seed);
+ }
+
memset(group, 0, sizeof *group);
OPENSSL_free(group);
}
if (!BN_copy(&dest->cofactor, &src->cofactor)) return 0;
dest->nid = src->nid;
+ dest->asn1_flag = src->asn1_flag;
+
+ if (src->seed)
+ {
+ if (dest->seed)
+ OPENSSL_free(dest->seed);
+ dest->seed = OPENSSL_malloc(src->seed_len);
+ if (dest->seed == NULL)
+ return 0;
+ if (!memcpy(dest->seed, src->seed, src->seed_len))
+ return 0;
+ dest->seed_len = src->seed_len;
+ }
+ else
+ {
+ if (dest->seed)
+ OPENSSL_free(dest->seed);
+ dest->seed = NULL;
+ dest->seed_len = 0;
+ }
+
return dest->meth->group_copy(dest, src);
}
}
+int EC_METHOD_get_field_type(const EC_METHOD *meth)
+ {
+ return meth->field_type;
+ }
+
+
int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor)
{
if (generator == NULL)
}
+void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag)
+ {
+ group->asn1_flag = flag;
+ }
+
+
+int EC_GROUP_get_asn1_flag(const EC_GROUP *group)
+ {
+ return group->asn1_flag;
+ }
+
+
int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx)
{
if (group->meth->group_set_curve_GFp == 0)