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

📄 x509_vfy.c

📁 openssl是ssl的开源项目
💻 C
📖 第 1 页 / 共 2 页
字号:
/*	ctx->error=0;  not needed */	while (n >= 0)		{		ctx->error_depth=n;		if (!xs->valid)			{			if ((pkey=X509_get_pubkey(xi)) == NULL)				{				ctx->error=X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY;				ctx->current_cert=xi;				ok=(*cb)(0,ctx);				if (!ok) goto end;				}			if (X509_verify(xs,pkey) <= 0)				{				ctx->error=X509_V_ERR_CERT_SIGNATURE_FAILURE;				ctx->current_cert=xs;				ok=(*cb)(0,ctx);				if (!ok) goto end;				}			pkey=NULL;			i=X509_cmp_current_time(X509_get_notBefore(xs));			if (i == 0)				{				ctx->error=X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD;				ctx->current_cert=xs;				ok=(*cb)(0,ctx);				if (!ok) goto end;				}			if (i > 0)				{				ctx->error=X509_V_ERR_CERT_NOT_YET_VALID;				ctx->current_cert=xs;				ok=(*cb)(0,ctx);				if (!ok) goto end;				}			xs->valid=1;			}		i=X509_cmp_current_time(X509_get_notAfter(xs));		if (i == 0)			{			ctx->error=X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD;			ctx->current_cert=xs;			ok=(*cb)(0,ctx);			if (!ok) goto end;			}		if (i < 0)			{			ctx->error=X509_V_ERR_CERT_HAS_EXPIRED;			ctx->current_cert=xs;			ok=(*cb)(0,ctx);			if (!ok) goto end;			}		/* CRL CHECK */		/* The last error (if any) is still in the error value */		ctx->current_cert=xs;		ok=(*cb)(1,ctx);		if (!ok) goto end;		n--;		if (n >= 0)			{			xi=xs;			xs=(X509 *)sk_value(ctx->chain,n);			}		}	ok=1;end:	return(ok);	}int X509_cmp_current_time(ctm)ASN1_UTCTIME *ctm;	{	char *str;	ASN1_UTCTIME atm;	time_t offset;	char buff1[24],buff2[24],*p;	int i,j;	p=buff1;	i=ctm->length;	str=(char *)ctm->data;	if ((i < 11) || (i > 17)) return(0);	memcpy(p,str,10);	p+=10;	str+=10;	if ((*str == 'Z') || (*str == '-') || (*str == '+'))		{ *(p++)='0'; *(p++)='0'; }	else	{ *(p++)= *(str++); *(p++)= *(str++); }	*(p++)='Z';	*(p++)='\0';	if (*str == 'Z')		offset=0;	else		{		if ((*str != '+') && (str[5] != '-'))			return(0);		offset=((str[1]-'0')*10+(str[2]-'0'))*60;		offset+=(str[3]-'0')*10+(str[4]-'0');		if (*str == '-')			offset= -offset;		}	atm.type=V_ASN1_UTCTIME;	atm.length=sizeof(buff2);	atm.data=(unsigned char *)buff2;	X509_gmtime_adj(&atm,-offset);	i=(buff1[0]-'0')*10+(buff1[1]-'0');	if (i < 70) i+=100;	j=(buff2[0]-'0')*10+(buff2[1]-'0');	if (j < 70) j+=100;	if (i < j) return (-1);	if (i > j) return (1);	i=strcmp(buff1,buff2);	if (i == 0) /* wait a second then return younger :-) */		return(-1);	else		return(i);	}ASN1_UTCTIME *X509_gmtime_adj(s, adj)ASN1_UTCTIME *s;long adj;	{	time_t t;	time(&t);	t+=adj;	return(ASN1_UTCTIME_set(s,t));	}int X509_get_pubkey_parameters(pkey,chain)EVP_PKEY *pkey;STACK *chain;	{	EVP_PKEY *ktmp=NULL,*ktmp2;	int i,j;	if ((pkey != NULL) && !EVP_PKEY_missing_parameters(pkey)) return(1);	for (i=0; i<sk_num(chain); i++)		{		ktmp=X509_get_pubkey((X509 *)sk_value(chain,i));		if (ktmp == NULL)			{			X509err(X509_F_X509_GET_PUBKEY_PARAMETERS,X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY);			return(0);			}		if (!EVP_PKEY_missing_parameters(ktmp))			break;		else			{			ktmp=NULL;			}		}	if (ktmp == NULL)		{		X509err(X509_F_X509_GET_PUBKEY_PARAMETERS,X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN);		return(0);		}	/* first, populate the other certs */	for (j=i-1; j >= 0; j--)		{		ktmp2=X509_get_pubkey((X509 *)sk_value(chain,j));		EVP_PKEY_copy_parameters(ktmp2,ktmp);		}		if (pkey != NULL)		EVP_PKEY_copy_parameters(pkey,ktmp);	return(1);	}int X509_STORE_add_cert(ctx,x)X509_STORE *ctx;X509 *x;	{	X509_OBJECT *obj,*r;	int ret=1;	if (x == NULL) return(0);	obj=(X509_OBJECT *)Malloc(sizeof(X509_OBJECT));	if (obj == NULL)		{		X509err(X509_F_X509_STORE_ADD_CERT,ERR_R_MALLOC_FAILURE);		return(0);		}	obj->type=X509_LU_X509;	obj->data.x509=x;	CRYPTO_w_lock(CRYPTO_LOCK_X509_STORE);	X509_OBJECT_up_ref_count(obj);	r=(X509_OBJECT *)lh_insert(ctx->certs,(char *)obj);	if (r != NULL)		{ /* oops, put it back */		lh_delete(ctx->certs,(char *)obj);		X509_OBJECT_free_contents(obj);		Free(obj);		lh_insert(ctx->certs,(char *)r);		X509err(X509_F_X509_STORE_ADD_CERT,X509_R_CERT_ALREADY_IN_HASH_TABLE);		ret=0;		}	CRYPTO_w_unlock(CRYPTO_LOCK_X509_STORE);	return(ret);		}int X509_STORE_add_crl(ctx,x)X509_STORE *ctx;X509_CRL *x;	{	X509_OBJECT *obj,*r;	int ret=1;	if (x == NULL) return(0);	obj=(X509_OBJECT *)Malloc(sizeof(X509_OBJECT));	if (obj == NULL)		{		X509err(X509_F_X509_STORE_ADD_CRL,ERR_R_MALLOC_FAILURE);		return(0);		}	obj->type=X509_LU_CRL;	obj->data.crl=x;	CRYPTO_w_lock(CRYPTO_LOCK_X509_STORE);	X509_OBJECT_up_ref_count(obj);	r=(X509_OBJECT *)lh_insert(ctx->certs,(char *)obj);	if (r != NULL)		{ /* oops, put it back */		lh_delete(ctx->certs,(char *)obj);		X509_OBJECT_free_contents(obj);		Free(obj);		lh_insert(ctx->certs,(char *)r);		X509err(X509_F_X509_STORE_ADD_CRL,X509_R_CERT_ALREADY_IN_HASH_TABLE);		ret=0;		}	CRYPTO_w_unlock(CRYPTO_LOCK_X509_STORE);	return(ret);		}int X509_STORE_CTX_get_ex_new_index(argl,argp,new_func,dup_func,free_func)long argl;char *argp;int (*new_func)();int (*dup_func)();void (*free_func)();        {        x509_store_ctx_num++;        return(CRYPTO_get_ex_new_index(x509_store_ctx_num-1,		&x509_store_ctx_method,                argl,argp,new_func,dup_func,free_func));        }int X509_STORE_CTX_set_ex_data(ctx,idx,data)X509_STORE_CTX *ctx;int idx;char *data;	{	return(CRYPTO_set_ex_data(&ctx->ex_data,idx,data));	}char *X509_STORE_CTX_get_ex_data(ctx,idx)X509_STORE_CTX *ctx;int idx;	{	return(CRYPTO_get_ex_data(&ctx->ex_data,idx));	}int X509_STORE_CTX_get_error(ctx)X509_STORE_CTX *ctx;	{	return(ctx->error);	}void X509_STORE_CTX_set_error(ctx,err)X509_STORE_CTX *ctx;int err;	{	ctx->error=err;	}int X509_STORE_CTX_get_error_depth(ctx)X509_STORE_CTX *ctx;	{	return(ctx->error_depth);	}X509 *X509_STORE_CTX_get_current_cert(ctx)X509_STORE_CTX *ctx;	{	return(ctx->current_cert);	}STACK *X509_STORE_CTX_get_chain(ctx)X509_STORE_CTX *ctx;	{	return(ctx->chain);	}void X509_STORE_CTX_set_cert(ctx,x)X509_STORE_CTX *ctx;X509 *x;	{	ctx->cert=x;	}void X509_STORE_CTX_set_chain(ctx,sk)X509_STORE_CTX *ctx;STACK *sk;	{	ctx->untrusted=sk;	}

⌨️ 快捷键说明

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