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

📄 ssl.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
📖 第 1 页 / 共 2 页
字号:
		RAND_seed ((unsigned char *)&r, sizeof (r));	}#endif	return(ctx);}#if 0static void_SSL_add_random_keypair(SSL_CTX *ctx, int bits){	RSA *rsa;	rsa = RSA_generate_key(bits, RSA_F4, NULL, NULL);	if (!SSL_CTX_set_tmp_rsa(ctx, rsa))		__SSL_critical_error("SSL_CTX_set_tmp_rsa");	RSA_free(rsa);	/* force use of this key for key exchange */	SSL_CTX_set_options(ctx, SSL_OP_EPHEMERAL_RSA);}#endif#if 0static char *_SSL_add_keypair (SSL_CTX *ctx, char *privkey, char *cert){	if (SSL_CTX_use_PrivateKey_file (ctx, privkey, SSL_FILETYPE_PEM) <= 0)	{		__SSL_fill_err_buf ("SSL_CTX_use_PrivateKey_file");		return (err_buf);	}	if (SSL_CTX_use_certificate_file (ctx, cert, SSL_FILETYPE_PEM) <= 0)	{		__SSL_fill_err_buf ("SSL_CTX_use_certificate_file");		return (err_buf);	}	if (!SSL_CTX_check_private_key (ctx))	{		__SSL_fill_err_buf			("Private key does not match the certificate public key\n");		return (err_buf);	}	return (NULL);}#endifstatic struct tm tmtm;static struct tm *ASN1_GENERALIZEDTIME_snprintf (ASN1_GENERALIZEDTIME * tm){	char *v;	int gmt = 0;	int i;	int y = 0, M = 0, d = 0, h = 0, m = 0, s = 0;	i = tm->length;	v = (char *) tm->data;	if (i < 12)		return (NULL);	if (v[i - 1] == 'Z')		gmt = 1;	for (i = 0; i < 12; i++)		if ((v[i] > '9') || (v[i] < '0'))			return (NULL);	y =		(v[0] - '0') * 1000 + (v[1] - '0') * 100 + (v[2] - '0') * 10 + (v[3] -																							 '0');	M = (v[4] - '0') * 10 + (v[5] - '0');	if ((M > 12) || (M < 1))		return (NULL);	d = (v[6] - '0') * 10 + (v[7] - '0');	h = (v[8] - '0') * 10 + (v[9] - '0');	m = (v[10] - '0') * 10 + (v[11] - '0');	if ((v[12] >= '0') && (v[12] <= '9') && (v[13] >= '0') && (v[13] <= '9'))		s = (v[12] - '0') * 10 + (v[13] - '0');	tmtm.tm_sec = s;	tmtm.tm_min = m;	tmtm.tm_hour = h;	tmtm.tm_mday = d;	tmtm.tm_mon = M - 1;	tmtm.tm_year = y;	/* snprintf (buf, buf_len, "%s %2d %02d:%02d:%02d %d%s", mon[M - 1], d, h, m, s, y, (gmt) ? " GMT" : ""); */	return (&tmtm);}static struct tm *ASN1_UTCTIME_snprintf (ASN1_UTCTIME * tm){	char *v;	int gmt = 0;	int i;	int y = 0, M = 0, d = 0, h = 0, m = 0, s = 0;	i = tm->length;	v = (char *) tm->data;	if (i < 10)		return (NULL);	if (v[i - 1] == 'Z')		gmt = 1;	for (i = 0; i < 10; i++)		if ((v[i] > '9') || (v[i] < '0'))			return (NULL);	y = (v[0] - '0') * 10 + (v[1] - '0');	if (y < 50)		y += 100;	M = (v[2] - '0') * 10 + (v[3] - '0');	if ((M > 12) || (M < 1))		return (NULL);	d = (v[4] - '0') * 10 + (v[5] - '0');	h = (v[6] - '0') * 10 + (v[7] - '0');	m = (v[8] - '0') * 10 + (v[9] - '0');	if ((v[10] >= '0') && (v[10] <= '9') && (v[11] >= '0') && (v[11] <= '9'))		s = (v[10] - '0') * 10 + (v[11] - '0');	tmtm.tm_sec = s;	tmtm.tm_min = m;	tmtm.tm_hour = h;	tmtm.tm_mday = d;	tmtm.tm_mon = M - 1;	tmtm.tm_year = y;	/* snprintf (buf, buf_len, "%s %2d %02d:%02d:%02d %d%s", mon[M - 1], d, h, m, s, y + 1900, (gmt) ? " GMT" : ""); */	return (&tmtm);}static voidASN1_TIME_snprintf (char *buf, int buf_len, ASN1_TIME * tm){	struct tm *tmtm;	switch (tm->type)	{	    case V_ASN1_UTCTIME:		tmtm = ASN1_UTCTIME_snprintf (tm);		break;	    case V_ASN1_GENERALIZEDTIME:		tmtm = ASN1_GENERALIZEDTIME_snprintf (tm);		break;	    default:		tmtm = NULL;	}	if (!tmtm)	{		snprintf (buf, buf_len, "ASN1_TIME_snprintf :: Invalid date");		return;	}	snprintf (buf, buf_len, "%s", asctime (tmtm));	*(strchr (buf, '\n')) = 0;}static voidbroke_oneline (char *oneline, char *parray[]){	char *pt, *ppt;	int i;	i = 0;	ppt = pt = oneline + 1;	while ((pt = strchr (pt, '/')))	{		*pt = 0;		parray[i++] = ppt;		ppt = ++pt;	}	parray[i++] = ppt;	parray[i] = NULL;}/*    FIXME: Master-Key, Extensions, CA bits	    (openssl x509 -text -in servcert.pem)*/int_SSL_get_cert_info (struct cert_info *cert_info, SSL * ssl){	X509 *peer_cert;	EVP_PKEY *peer_pkey;	/* EVP_PKEY *ca_pkey; */	/* EVP_PKEY *tmp_pkey; */	char notBefore[64];	char notAfter[64];	int alg;	int sign_alg;	if (!(peer_cert = SSL_get_peer_certificate (ssl)))		return (1);				  /* FATAL? */	X509_NAME_oneline (X509_get_subject_name (peer_cert), cert_info->subject,							 sizeof (cert_info->subject));	X509_NAME_oneline (X509_get_issuer_name (peer_cert), cert_info->issuer,							 sizeof (cert_info->issuer));	broke_oneline (cert_info->subject, cert_info->subject_word);	broke_oneline (cert_info->issuer, cert_info->issuer_word);	alg = OBJ_obj2nid (peer_cert->cert_info->key->algor->algorithm);	sign_alg = OBJ_obj2nid (peer_cert->sig_alg->algorithm);	ASN1_TIME_snprintf (notBefore, sizeof (notBefore),							  X509_get_notBefore (peer_cert));	ASN1_TIME_snprintf (notAfter, sizeof (notAfter),							  X509_get_notAfter (peer_cert));	peer_pkey = X509_get_pubkey (peer_cert);	strncpy (cert_info->algorithm,				(alg == NID_undef) ? "UNKNOWN" : OBJ_nid2ln (alg),				sizeof (cert_info->algorithm));	cert_info->algorithm_bits = EVP_PKEY_bits (peer_pkey);	strncpy (cert_info->sign_algorithm,				(sign_alg == NID_undef) ? "UNKNOWN" : OBJ_nid2ln (sign_alg),				sizeof (cert_info->sign_algorithm));	/* EVP_PKEY_bits(ca_pkey)); */	cert_info->sign_algorithm_bits = 0;	strncpy (cert_info->notbefore, notBefore, sizeof (cert_info->notbefore));	strncpy (cert_info->notafter, notAfter, sizeof (cert_info->notafter));	EVP_PKEY_free (peer_pkey);	/* SSL_SESSION_print_fp(stdout, SSL_get_session(ssl)); *//*	if (ssl->session->sess_cert->peer_rsa_tmp) {		tmp_pkey = EVP_PKEY_new();		EVP_PKEY_assign_RSA(tmp_pkey, ssl->session->sess_cert->peer_rsa_tmp);		cert_info->rsa_tmp_bits = EVP_PKEY_bits (tmp_pkey);		EVP_PKEY_free(tmp_pkey);	} else		fprintf(stderr, "REMOTE SIDE DOESN'T PROVIDES ->peer_rsa_tmp\n");*/	X509_free (peer_cert);	return (0);}struct chiper_info *_SSL_get_cipher_info (SSL * ssl){	SSL_CIPHER *c;	c = SSL_get_current_cipher (ssl);	strncpy (chiper_info.version, SSL_CIPHER_get_version (c),				sizeof (chiper_info.version));	strncpy (chiper_info.chiper, SSL_CIPHER_get_name (c),				sizeof (chiper_info.chiper));	SSL_CIPHER_get_bits (c, &chiper_info.chiper_bits);	return (&chiper_info);}int_SSL_send (SSL * ssl, char *buf, int len){	int num;	num = SSL_write (ssl, buf, len);	switch (SSL_get_error (ssl, num))	{	case SSL_ERROR_SSL:			  /* setup errno! */		/* ??? */		__SSL_fill_err_buf ("SSL_write");		fprintf (stderr, "%s\n", err_buf);		break;	case SSL_ERROR_SYSCALL:		/* ??? */		perror ("SSL_write/write");		break;	case SSL_ERROR_ZERO_RETURN:		/* fprintf(stderr, "SSL closed on write\n"); */		break;	}	return (num);}int_SSL_recv (SSL * ssl, char *buf, int len){	int num;	num = SSL_read (ssl, buf, len);	switch (SSL_get_error (ssl, num))	{	case SSL_ERROR_SSL:		/* ??? */		__SSL_fill_err_buf ("SSL_read");		fprintf (stderr, "%s\n", err_buf);		break;	case SSL_ERROR_SYSCALL:		/* ??? */		perror ("SSL_read/read");		break;	case SSL_ERROR_ZERO_RETURN:		/* fprintf(stdeerr, "SSL closed on read\n"); */		break;	}	return (num);}SSL *_SSL_socket (SSL_CTX *ctx, int sd){	SSL *ssl;	if (!(ssl = SSL_new (ctx)))		/* FATAL */		__SSL_critical_error ("SSL_new");	SSL_set_fd (ssl, sd);	if (ctx->method == SSLv3_client_method())		SSL_set_connect_state (ssl);	else	        SSL_set_accept_state(ssl);	return (ssl);}char *_SSL_set_verify (SSL_CTX *ctx, void *verify_callback, char *cacert){	if (!SSL_CTX_set_default_verify_paths (ctx))	{		__SSL_fill_err_buf ("SSL_CTX_set_default_verify_paths");		return (err_buf);	}	if (cacert)	{		if (!SSL_CTX_load_verify_locations (ctx, cacert, NULL))		{			__SSL_fill_err_buf ("SSL_CTX_load_verify_locations");			return (err_buf);		}	}	SSL_CTX_set_verify (ctx, SSL_VERIFY_PEER, verify_callback);	return (NULL);}void_SSL_close (SSL * ssl){	SSL_set_shutdown (ssl, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);	SSL_free (ssl);	ERR_remove_state (0);		  /* free state buffer */}

⌨️ 快捷键说明

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