DECLARE_ASN1_ENCODE_FUNCTIONS_const(ECDSAPrivateKey, ecdsaPublicKey)
} ASN1_SEQUENCE_END_name(ECDSAPrivateKey, ecdsa_pub_internal)ASN1_CHOICE(ECDSAPublicKey) = {	ASN1_SIMPLE(ECDSAPrivateKey, pub_key, ASN1_OCTET_STRING),	ASN1_EX_COMBINE(0, 0, ecdsa_pub_internal)} ASN1_CHOICE_END_selector(ECDSAPrivateKey, ECDSAPublicKey, write_params)IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(ECDSAPrivateKey, ECDSAPublicKey, ecdsaPublicKey)X9_62_FIELDID 	*ECDSA_get_X9_62_FIELDID(const ECDSA *ecdsa, X9_62_FIELDID *field){	/* TODO : characteristic two */	int	ok=0, reason=ERR_R_ASN1_LIB;	X9_62_FIELDID *ret=NULL;	BIGNUM  *tmp=NULL;		if (!ecdsa || !ecdsa->group)		OPENSSL_ECDSA_ABORT(ECDSA_R_MISSING_PARAMETERS)	if (field == NULL)	{		if ((ret = X9_62_FIELDID_new()) == NULL) return NULL;	}	else	{			ret = field;		if (ret->fieldType != NULL)	ASN1_OBJECT_free(ret->fieldType);		if (ret->parameters != NULL)	ASN1_TYPE_free(ret->parameters);	}	if ((tmp = BN_new()) == NULL) 		OPENSSL_ECDSA_ABORT(ERR_R_BN_LIB)	if ((ret->fieldType = OBJ_nid2obj(NID_X9_62_prime_field)) == NULL)		OPENSSL_ECDSA_ABORT(ERR_R_OBJ_LIB)	if ((ret->parameters = ASN1_TYPE_new()) == NULL) goto err;	ret->parameters->type = V_ASN1_INTEGER;	if (!EC_GROUP_get_curve_GFp(ecdsa->group, tmp, NULL, NULL, NULL))		OPENSSL_ECDSA_ABORT(ERR_R_EC_LIB)	if ((ret->parameters->value.integer = BN_to_ASN1_INTEGER(tmp, NULL)) == NULL) goto err;	ok = 1;err :	if (!ok)	{		if (ret && !field) X9_62_FIELDID_free(ret);		ret = NULL;		ECDSAerr(ECDSA_F_ECDSA_GET_X9_62_FIELDID, reason);	}	if (tmp) BN_free(tmp);	return(ret);}