res = MP_NO; goto CLEANUP; }   if (ECPoint_validate(group, &gx, &gy) != 0) { printf("  Error: validate point on base point failed.\n"); res = MP_NO; goto CLEANUP; } MP_CHECKOK(mp_add_d(&gy, 1, &ry)); if (ECPoint_validate(group, &gx, &ry) == 0) { printf("  Error: validate point on invalid point failed.\n");
ectest_curve_GFp(ECGroup *group, int ectestPrint, int ectestTime,				 int generic){	mp_int one, order_1, gx, gy, rx, ry, n;	int size;	mp_err res;	char s[1000];	/* initialize values */	MP_CHECKOK(mp_init(&one));	MP_CHECKOK(mp_init(&order_1));	MP_CHECKOK(mp_init(&gx));	MP_CHECKOK(mp_init(&gy));	MP_CHECKOK(mp_init(&rx));	MP_CHECKOK(mp_init(&ry));	MP_CHECKOK(mp_init(&n));	MP_CHECKOK(mp_set_int(&one, 1));	MP_CHECKOK(mp_sub(&group->order, &one, &order_1));	/* encode base point */	if (group->meth->field_dec) {		MP_CHECKOK(group->meth->field_dec(&group->genx, &gx, group->meth));		MP_CHECKOK(group->meth->field_dec(&group->geny, &gy, group->meth));	} else {		MP_CHECKOK(mp_copy(&group->genx, &gx));		MP_CHECKOK(mp_copy(&group->geny, &gy));	}	if (ectestPrint) {		/* output base point */		printf("  base point P:\n");		MP_CHECKOK(mp_toradix(&gx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&gy, s, 16));		printf("    %s\n", s);		if (group->meth->field_enc) {			printf("  base point P (encoded):\n");			MP_CHECKOK(mp_toradix(&group->genx, s, 16));			printf("    %s\n", s);			MP_CHECKOK(mp_toradix(&group->geny, s, 16));			printf("    %s\n", s);		}	}#ifdef ECL_ENABLE_GFP_PT_MUL_AFF	/* multiply base point by order - 1 and check for negative of base	 * point */	MP_CHECKOK(ec_GFp_pt_mul_aff			   (&order_1, &group->genx, &group->geny, &rx, &ry, group));	if (ectestPrint) {		printf("  (order-1)*P (affine):\n");		MP_CHECKOK(mp_toradix(&rx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&ry, s, 16));		printf("    %s\n", s);	}	MP_CHECKOK(group->meth->field_neg(&ry, &ry, group->meth));	if ((mp_cmp(&rx, &group->genx) != 0)		|| (mp_cmp(&ry, &group->geny) != 0)) {		printf("  Error: invalid result (expected (- base point)).\n");		res = MP_NO;		goto CLEANUP;	}#endif#ifdef ECL_ENABLE_GFP_PT_MUL_AFF	/* multiply base point by order - 1 and check for negative of base	 * point */	MP_CHECKOK(ec_GFp_pt_mul_jac			   (&order_1, &group->genx, &group->geny, &rx, &ry, group));	if (ectestPrint) {		printf("  (order-1)*P (jacobian):\n");		MP_CHECKOK(mp_toradix(&rx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&ry, s, 16));		printf("    %s\n", s);	}	MP_CHECKOK(group->meth->field_neg(&ry, &ry, group->meth));	if ((mp_cmp(&rx, &group->genx) != 0)		|| (mp_cmp(&ry, &group->geny) != 0)) {		printf("  Error: invalid result (expected (- base point)).\n");		res = MP_NO;		goto CLEANUP;	}#endif	/* multiply base point by order - 1 and check for negative of base	 * point */	MP_CHECKOK(ECPoint_mul(group, &order_1, NULL, NULL, &rx, &ry));	if (ectestPrint) {		printf("  (order-1)*P (ECPoint_mul):\n");		MP_CHECKOK(mp_toradix(&rx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&ry, s, 16));		printf("    %s\n", s);	}	MP_CHECKOK(mp_submod(&group->meth->irr, &ry, &group->meth->irr, &ry));	if ((mp_cmp(&rx, &gx) != 0) || (mp_cmp(&ry, &gy) != 0)) {		printf("  Error: invalid result (expected (- base point)).\n");		res = MP_NO;		goto CLEANUP;	}	/* multiply base point by order - 1 and check for negative of base	 * point */	MP_CHECKOK(ECPoint_mul(group, &order_1, &gx, &gy, &rx, &ry));	if (ectestPrint) {		printf("  (order-1)*P (ECPoint_mul):\n");		MP_CHECKOK(mp_toradix(&rx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&ry, s, 16));		printf("    %s\n", s);	}	MP_CHECKOK(mp_submod(&group->meth->irr, &ry, &group->meth->irr, &ry));	if ((mp_cmp(&rx, &gx) != 0) || (mp_cmp(&ry, &gy) != 0)) {		printf("  Error: invalid result (expected (- base point)).\n");		res = MP_NO;		goto CLEANUP;	}#ifdef ECL_ENABLE_GFP_PT_MUL_AFF	/* multiply base point by order and check for point at infinity */	MP_CHECKOK(ec_GFp_pt_mul_aff			   (&group->order, &group->genx, &group->geny, &rx, &ry,				group));	if (ectestPrint) {		printf("  (order)*P (affine):\n");		MP_CHECKOK(mp_toradix(&rx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&ry, s, 16));		printf("    %s\n", s);	}	if (ec_GFp_pt_is_inf_aff(&rx, &ry) != MP_YES) {		printf("  Error: invalid result (expected point at infinity).\n");		res = MP_NO;		goto CLEANUP;	}#endif#ifdef ECL_ENABLE_GFP_PT_MUL_JAC	/* multiply base point by order and check for point at infinity */	MP_CHECKOK(ec_GFp_pt_mul_jac			   (&group->order, &group->genx, &group->geny, &rx, &ry,				group));	if (ectestPrint) {		printf("  (order)*P (jacobian):\n");		MP_CHECKOK(mp_toradix(&rx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&ry, s, 16));		printf("    %s\n", s);	}	if (ec_GFp_pt_is_inf_aff(&rx, &ry) != MP_YES) {		printf("  Error: invalid result (expected point at infinity).\n");		res = MP_NO;		goto CLEANUP;	}#endif	/* multiply base point by order and check for point at infinity */	MP_CHECKOK(ECPoint_mul(group, &group->order, NULL, NULL, &rx, &ry));	if (ectestPrint) {		printf("  (order)*P (ECPoint_mul):\n");		MP_CHECKOK(mp_toradix(&rx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&ry, s, 16));		printf("    %s\n", s);	}	if (ec_GFp_pt_is_inf_aff(&rx, &ry) != MP_YES) {		printf("  Error: invalid result (expected point at infinity).\n");		res = MP_NO;		goto CLEANUP;	}	/* multiply base point by order and check for point at infinity */	MP_CHECKOK(ECPoint_mul(group, &group->order, &gx, &gy, &rx, &ry));	if (ectestPrint) {		printf("  (order)*P (ECPoint_mul):\n");		MP_CHECKOK(mp_toradix(&rx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&ry, s, 16));		printf("    %s\n", s);	}	if (ec_GFp_pt_is_inf_aff(&rx, &ry) != MP_YES) {		printf("  Error: invalid result (expected point at infinity).\n");		res = MP_NO;		goto CLEANUP;	}	/* check that (order-1)P + (order-1)P + P == (order-1)P */	MP_CHECKOK(ECPoints_mul			   (group, &order_1, &order_1, &gx, &gy, &rx, &ry));	MP_CHECKOK(ECPoints_mul(group, &one, &one, &rx, &ry, &rx, &ry));	if (ectestPrint) {		printf			("  (order-1)*P + (order-1)*P + P == (order-1)*P (ECPoints_mul):\n");		MP_CHECKOK(mp_toradix(&rx, s, 16));		printf("    %s\n", s);		MP_CHECKOK(mp_toradix(&ry, s, 16));		printf("    %s\n", s);	}	MP_CHECKOK(mp_submod(&group->meth->irr, &ry, &group->meth->irr, &ry));	if ((mp_cmp(&rx, &gx) != 0) || (mp_cmp(&ry, &gy) != 0)) {		printf("  Error: invalid result (expected (- base point)).\n");		res = MP_NO;		goto CLEANUP;	}	if (ectestTime) {		/* compute random scalar */		size = mpl_significant_bits(&group->meth->irr);		if (size < MP_OKAY) {			goto CLEANUP;		}		MP_CHECKOK(mpp_random_size(&n, (size + ECL_BITS - 1) / ECL_BITS));		MP_CHECKOK(group->meth->field_mod(&n, &n, group->meth));		/* timed test */		if (generic) {#ifdef ECL_ENABLE_GFP_PT_MUL_AFF			M_TimeOperation(MP_CHECKOK							(ec_GFp_pt_mul_aff							 (&n, &group->genx, &group->geny, &rx, &ry,							  group)), 100);#endif			M_TimeOperation(MP_CHECKOK							(ECPoint_mul(group, &n, NULL, NULL, &rx, &ry)),							100);			M_TimeOperation(MP_CHECKOK							(ECPoints_mul							 (group, &n, &n, &gx, &gy, &rx, &ry)), 100);		} else {			M_TimeOperation(MP_CHECKOK							(ECPoint_mul(group, &n, NULL, NULL, &rx, &ry)),							100);			M_TimeOperation(MP_CHECKOK							(ECPoint_mul(group, &n, &gx, &gy, &rx, &ry)),							100);			M_TimeOperation(MP_CHECKOK							(ECPoints_mul							 (group, &n, &n, &gx, &gy, &rx, &ry)), 100);		}	}  CLEANUP:	mp_clear(&one);	mp_clear(&order_1);	mp_clear(&gx);	mp_clear(&gy);	mp_clear(&rx);	mp_clear(&ry);	mp_clear(&n);	if (res != MP_OKAY) {		printf("  Error: exiting with error value %i\n", res);	}	return res;}