int ssl_print_curves(BIO *out, SSL *s)
	{
	int i, ncurves, *curves, nid;
	const char *cname;
	ncurves = SSL_get1_curves(s, NULL);
	if (ncurves <= 0)
		return 1;
	curves = OPENSSL_malloc(ncurves * sizeof(int));
	SSL_get1_curves(s, curves);

	BIO_puts(out, "Supported Elliptic Curves: ");
	for (i = 0; i < ncurves; i++)
		{
		if (i)
			BIO_puts(out, ":");
		nid = curves[i];
		/* If unrecognised print out hex version */
		if (nid & TLSEXT_nid_unknown)
			BIO_printf(out, "0x%04X", nid & 0xFFFF);
		else
			{
			/* Use NIST name for curve if it exists */
			cname = EC_curve_nid2nist(nid);
			if (!cname)
				cname = OBJ_nid2sn(nid);
			BIO_printf(out, "%s", cname);
			}
		}
	BIO_puts(out, "\nShared Elliptic curves: ");
	OPENSSL_free(curves);
	ncurves = SSL_get_shared_curve(s, -1);
	for (i = 0; i < ncurves; i++)
		{
		if (i)
			BIO_puts(out, ":");
		nid = SSL_get_shared_curve(s, i);
		cname = EC_curve_nid2nist(nid);
		if (!cname)
			cname = OBJ_nid2sn(nid);
		BIO_printf(out, "%s", cname);
		}
	if (ncurves == 0)
		BIO_puts(out, "NONE");
	BIO_puts(out, "\n");
	return 1;
	}
int ssl_print_curves(BIO *out, SSL *s)
	{
	int i, ncurves, *curves, nid;
	const char *cname;
	ncurves = SSL_get1_curves(s, NULL);
	if (ncurves <= 0)
		return 1;
	curves = OPENSSL_malloc(ncurves * sizeof(int));
	SSL_get1_curves(s, curves);

	BIO_puts(out, "Supported Elliptic Curves: ");
	for (i = 0; i < ncurves; i++)
		{
		if (i)
			BIO_puts(out, ":");
		nid = curves[i];
		 
		if (nid & TLSEXT_nid_unknown)
			BIO_printf(out, "0x%04X", nid & 0xFFFF);
		else
			{
			 
			cname = EC_curve_nid2nist(nid);
			if (!cname)
				cname = OBJ_nid2sn(nid);
			BIO_printf(out, "%s", cname);
			}
		}
	BIO_puts(out, "\nShared Elliptic curves: ");
	OPENSSL_free(curves);
	ncurves = SSL_get_shared_curve(s, -1);
	for (i = 0; i < ncurves; i++)
		{
		if (i)
			BIO_puts(out, ":");
		nid = SSL_get_shared_curve(s, i);
		cname = EC_curve_nid2nist(nid);
		if (!cname)
			cname = OBJ_nid2sn(nid);
		BIO_printf(out, "%s", cname);
		}
	if (ncurves == 0)
		BIO_puts(out, "NONE");
	BIO_puts(out, "\n");
	return 1;
	}