⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ecparam.c

📁 mediastreamer2是开源的网络传输媒体流的库
💻 C
📖 第 1 页 / 共 2 页
字号:
		for (n = 0; n < crv_len; n++)			{			const char *comment;			const char *sname;			comment = curves[n].comment;			sname   = OBJ_nid2sn(curves[n].nid);			if (comment == NULL)				comment = "CURVE DESCRIPTION NOT AVAILABLE";			if (sname == NULL)				sname = "";			BIO_printf(out, "  %-10s: ", sname);			BIO_printf(out, "%s\n", comment);			} 		OPENSSL_free(curves);		ret = 0;		goto end;		}	if (curve_name != NULL)		{		int nid;		/* workaround for the SECG curve names secp192r1		 * and secp256r1 (which are the same as the curves		 * prime192v1 and prime256v1 defined in X9.62)		 */		if (!strcmp(curve_name, "secp192r1"))			{			BIO_printf(bio_err, "using curve name prime192v1 "				"instead of secp192r1\n");			nid = NID_X9_62_prime192v1;			}		else if (!strcmp(curve_name, "secp256r1"))			{			BIO_printf(bio_err, "using curve name prime256v1 "				"instead of secp256r1\n");			nid = NID_X9_62_prime256v1;			}		else			nid = OBJ_sn2nid(curve_name);			if (nid == 0)			{			BIO_printf(bio_err, "unknown curve name (%s)\n", 				curve_name);			goto end;			}		group = EC_GROUP_new_by_curve_name(nid);		if (group == NULL)			{			BIO_printf(bio_err, "unable to create curve (%s)\n", 				curve_name);			goto end;			}		EC_GROUP_set_asn1_flag(group, asn1_flag);		EC_GROUP_set_point_conversion_form(group, form);		}	else if (informat == FORMAT_ASN1)		{		group = d2i_ECPKParameters_bio(in, NULL);		}	else if (informat == FORMAT_PEM)		{		group = PEM_read_bio_ECPKParameters(in,NULL,NULL,NULL);		}	else		{		BIO_printf(bio_err, "bad input format specified\n");		goto end;		}	if (group == NULL)		{		BIO_printf(bio_err, 			"unable to load elliptic curve parameters\n");		ERR_print_errors(bio_err);		goto end;		}	if (new_form)		EC_GROUP_set_point_conversion_form(group, form);	if (new_asn1_flag)		EC_GROUP_set_asn1_flag(group, asn1_flag);	if (no_seed)		{		EC_GROUP_set_seed(group, NULL, 0);		}	if (text)		{		if (!ECPKParameters_print(out, group, 0))			goto end;		}	if (check)		{		if (group == NULL)			BIO_printf(bio_err, "no elliptic curve parameters\n");		BIO_printf(bio_err, "checking elliptic curve parameters: ");		if (!EC_GROUP_check(group, NULL))			{			BIO_printf(bio_err, "failed\n");			ERR_print_errors(bio_err);			}		else			BIO_printf(bio_err, "ok\n");					}	if (C)		{		size_t	buf_len = 0, tmp_len = 0;		const EC_POINT *point;		int	is_prime, len = 0;		const EC_METHOD *meth = EC_GROUP_method_of(group);		if ((ec_p = BN_new()) == NULL || (ec_a = BN_new()) == NULL ||		    (ec_b = BN_new()) == NULL || (ec_gen = BN_new()) == NULL ||		    (ec_order = BN_new()) == NULL || 		    (ec_cofactor = BN_new()) == NULL )			{			perror("OPENSSL_malloc");			goto end;			}		is_prime = (EC_METHOD_get_field_type(meth) == 			NID_X9_62_prime_field);		if (is_prime)			{			if (!EC_GROUP_get_curve_GFp(group, ec_p, ec_a,				ec_b, NULL))				goto end;			}		else			{			/* TODO */			goto end;			}		if ((point = EC_GROUP_get0_generator(group)) == NULL)			goto end;		if (!EC_POINT_point2bn(group, point, 			EC_GROUP_get_point_conversion_form(group), ec_gen, 			NULL))			goto end;		if (!EC_GROUP_get_order(group, ec_order, NULL))			goto end;		if (!EC_GROUP_get_cofactor(group, ec_cofactor, NULL))			goto end;		if (!ec_p || !ec_a || !ec_b || !ec_gen || 			!ec_order || !ec_cofactor)			goto end;		len = BN_num_bits(ec_order);		if ((tmp_len = (size_t)BN_num_bytes(ec_p)) > buf_len)			buf_len = tmp_len;		if ((tmp_len = (size_t)BN_num_bytes(ec_a)) > buf_len)			buf_len = tmp_len;		if ((tmp_len = (size_t)BN_num_bytes(ec_b)) > buf_len)			buf_len = tmp_len;		if ((tmp_len = (size_t)BN_num_bytes(ec_gen)) > buf_len)			buf_len = tmp_len;		if ((tmp_len = (size_t)BN_num_bytes(ec_order)) > buf_len)			buf_len = tmp_len;		if ((tmp_len = (size_t)BN_num_bytes(ec_cofactor)) > buf_len)			buf_len = tmp_len;		buffer = (unsigned char *)OPENSSL_malloc(buf_len);		if (buffer == NULL)			{			perror("OPENSSL_malloc");			goto end;			}		ecparam_print_var(out, ec_p, "ec_p", len, buffer);		ecparam_print_var(out, ec_a, "ec_a", len, buffer);		ecparam_print_var(out, ec_b, "ec_b", len, buffer);		ecparam_print_var(out, ec_gen, "ec_gen", len, buffer);		ecparam_print_var(out, ec_order, "ec_order", len, buffer);		ecparam_print_var(out, ec_cofactor, "ec_cofactor", len, 			buffer);		BIO_printf(out, "\n\n");		BIO_printf(out, "EC_GROUP *get_ec_group_%d(void)\n\t{\n", len);		BIO_printf(out, "\tint ok=0;\n");		BIO_printf(out, "\tEC_GROUP *group = NULL;\n");		BIO_printf(out, "\tEC_POINT *point = NULL;\n");		BIO_printf(out, "\tBIGNUM   *tmp_1 = NULL, *tmp_2 = NULL, "				"*tmp_3 = NULL;\n\n");		BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_p_%d, "				"sizeof(ec_p_%d), NULL)) == NULL)\n\t\t"				"goto err;\n", len, len);		BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_a_%d, "				"sizeof(ec_a_%d), NULL)) == NULL)\n\t\t"				"goto err;\n", len, len);		BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_b_%d, "				"sizeof(ec_b_%d), NULL)) == NULL)\n\t\t"				"goto err;\n", len, len);		if (is_prime)			{			BIO_printf(out, "\tif ((group = EC_GROUP_new_curve_"				"GFp(tmp_1, tmp_2, tmp_3, NULL)) == NULL)"				"\n\t\tgoto err;\n\n");			}		else			{			/* TODO */			goto end;			}		BIO_printf(out, "\t/* build generator */\n");		BIO_printf(out, "\tif ((tmp_1 = BN_bin2bn(ec_gen_%d, "				"sizeof(ec_gen_%d), tmp_1)) == NULL)"				"\n\t\tgoto err;\n", len, len);		BIO_printf(out, "\tpoint = EC_POINT_bn2point(group, tmp_1, "				"NULL, NULL);\n");		BIO_printf(out, "\tif (point == NULL)\n\t\tgoto err;\n");		BIO_printf(out, "\tif ((tmp_2 = BN_bin2bn(ec_order_%d, "				"sizeof(ec_order_%d), tmp_2)) == NULL)"				"\n\t\tgoto err;\n", len, len);		BIO_printf(out, "\tif ((tmp_3 = BN_bin2bn(ec_cofactor_%d, "				"sizeof(ec_cofactor_%d), tmp_3)) == NULL)"				"\n\t\tgoto err;\n", len, len);		BIO_printf(out, "\tif (!EC_GROUP_set_generator(group, point,"				" tmp_2, tmp_3))\n\t\tgoto err;\n");		BIO_printf(out, "\n\tok=1;\n");		BIO_printf(out, "err:\n");		BIO_printf(out, "\tif (tmp_1)\n\t\tBN_free(tmp_1);\n");		BIO_printf(out, "\tif (tmp_2)\n\t\tBN_free(tmp_2);\n");		BIO_printf(out, "\tif (tmp_3)\n\t\tBN_free(tmp_3);\n");		BIO_printf(out, "\tif (point)\n\t\tEC_POINT_free(point);\n");		BIO_printf(out, "\tif (!ok)\n");		BIO_printf(out, "\t\t{\n");		BIO_printf(out, "\t\tEC_GROUP_free(group);\n");		BIO_printf(out, "\t\tgroup = NULL;\n");		BIO_printf(out, "\t\t}\n");		BIO_printf(out, "\treturn(group);\n\t}\n");	}	if (!noout)		{		if (outformat == FORMAT_ASN1)			i = i2d_ECPKParameters_bio(out, group);		else if (outformat == FORMAT_PEM)			i = PEM_write_bio_ECPKParameters(out, group);		else				{			BIO_printf(bio_err,"bad output format specified for"				" outfile\n");			goto end;			}		if (!i)			{			BIO_printf(bio_err, "unable to write elliptic "				"curve parameters\n");			ERR_print_errors(bio_err);			goto end;			}		}		if (need_rand)		{		app_RAND_load_file(NULL, bio_err, (inrand != NULL));		if (inrand != NULL)			BIO_printf(bio_err,"%ld semi-random bytes loaded\n",				app_RAND_load_files(inrand));		}	if (genkey)		{		EC_KEY *eckey = EC_KEY_new();		if (eckey == NULL)			goto end;		assert(need_rand);		if (EC_KEY_set_group(eckey, group) == 0)			goto end;				if (!EC_KEY_generate_key(eckey))			{			EC_KEY_free(eckey);			goto end;			}		if (outformat == FORMAT_ASN1)			i = i2d_ECPrivateKey_bio(out, eckey);		else if (outformat == FORMAT_PEM)			i = PEM_write_bio_ECPrivateKey(out, eckey, NULL,				NULL, 0, NULL, NULL);		else				{			BIO_printf(bio_err, "bad output format specified "				"for outfile\n");			EC_KEY_free(eckey);			goto end;			}		EC_KEY_free(eckey);		}	if (need_rand)		app_RAND_write_file(NULL, bio_err);	ret=0;end:	if (ec_p)		BN_free(ec_p);	if (ec_a)		BN_free(ec_a);	if (ec_b)		BN_free(ec_b);	if (ec_gen)		BN_free(ec_gen);	if (ec_order)		BN_free(ec_order);	if (ec_cofactor)		BN_free(ec_cofactor);	if (buffer)		OPENSSL_free(buffer);	if (in != NULL)		BIO_free(in);	if (out != NULL)		BIO_free_all(out);	if (group != NULL)		EC_GROUP_free(group);	apps_shutdown();	OPENSSL_EXIT(ret);}static int ecparam_print_var(BIO *out, BIGNUM *in, const char *var,	int len, unsigned char *buffer)	{	BIO_printf(out, "static unsigned char %s_%d[] = {", var, len);	if (BN_is_zero(in))		BIO_printf(out, "\n\t0x00");	else 		{		int i, l;		l = BN_bn2bin(in, buffer);		for (i=0; i<l-1; i++)			{			if ((i%12) == 0) 				BIO_printf(out, "\n\t");			BIO_printf(out, "0x%02X,", buffer[i]);			}		if ((i%12) == 0) 			BIO_printf(out, "\n\t");		BIO_printf(out, "0x%02X", buffer[i]);		}	BIO_printf(out, "\n\t};\n\n");	return 1;	}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -