v3_cpols.c

来自「一个用于点对点传输加密的工具包源码」· C语言 代码 · 共 661 行 · 第 1/2 页

C
661
字号
{return i2d_ASN1_SET_OF_POLICYINFO(a, pp, i2d_POLICYINFO, V_ASN1_SEQUENCE,                                                 V_ASN1_UNIVERSAL, IS_SEQUENCE);}STACK_OF(POLICYINFO) *CERTIFICATEPOLICIES_new(void){	return sk_POLICYINFO_new_null();}void CERTIFICATEPOLICIES_free(STACK_OF(POLICYINFO) *a){	sk_POLICYINFO_pop_free(a, POLICYINFO_free);}STACK_OF(POLICYINFO) *d2i_CERTIFICATEPOLICIES(STACK_OF(POLICYINFO) **a,		unsigned char **pp,long length){return d2i_ASN1_SET_OF_POLICYINFO(a, pp, length, d2i_POLICYINFO,                         POLICYINFO_free, V_ASN1_SEQUENCE, V_ASN1_UNIVERSAL);}IMPLEMENT_STACK_OF(POLICYINFO)IMPLEMENT_ASN1_SET_OF(POLICYINFO)int i2d_POLICYINFO(POLICYINFO *a, unsigned char **pp){	M_ASN1_I2D_vars(a);	M_ASN1_I2D_len (a->policyid, i2d_ASN1_OBJECT);	M_ASN1_I2D_len_SEQUENCE_type(POLICYQUALINFO, a->qualifiers,							 i2d_POLICYQUALINFO);	M_ASN1_I2D_seq_total();	M_ASN1_I2D_put (a->policyid, i2d_ASN1_OBJECT);	M_ASN1_I2D_put_SEQUENCE_type(POLICYQUALINFO, a->qualifiers,							 i2d_POLICYQUALINFO);	M_ASN1_I2D_finish();}POLICYINFO *POLICYINFO_new(void){	POLICYINFO *ret=NULL;	ASN1_CTX c;	M_ASN1_New_Malloc(ret, POLICYINFO);	ret->policyid = NULL;	ret->qualifiers = NULL;	return (ret);	M_ASN1_New_Error(ASN1_F_POLICYINFO_NEW);}POLICYINFO *d2i_POLICYINFO(POLICYINFO **a, unsigned char **pp,long length){	M_ASN1_D2I_vars(a,POLICYINFO *,POLICYINFO_new);	M_ASN1_D2I_Init();	M_ASN1_D2I_start_sequence();	M_ASN1_D2I_get(ret->policyid, d2i_ASN1_OBJECT);	if(!M_ASN1_D2I_end_sequence()) {		M_ASN1_D2I_get_seq_type (POLICYQUALINFO, ret->qualifiers,				 d2i_POLICYQUALINFO, POLICYQUALINFO_free);	}	M_ASN1_D2I_Finish(a, POLICYINFO_free, ASN1_F_D2I_POLICYINFO);}void POLICYINFO_free(POLICYINFO *a){	if (a == NULL) return;	ASN1_OBJECT_free(a->policyid);	sk_POLICYQUALINFO_pop_free(a->qualifiers, POLICYQUALINFO_free);	OPENSSL_free (a);}static void print_qualifiers(BIO *out, STACK_OF(POLICYQUALINFO) *quals,		int indent){	POLICYQUALINFO *qualinfo;	int i;	for(i = 0; i < sk_POLICYQUALINFO_num(quals); i++) {		qualinfo = sk_POLICYQUALINFO_value(quals, i);		switch(OBJ_obj2nid(qualinfo->pqualid))		{			case NID_id_qt_cps:			BIO_printf(out, "%*sCPS: %s\n", indent, "",						qualinfo->d.cpsuri->data);			break;					case NID_id_qt_unotice:			BIO_printf(out, "%*sUser Notice:\n", indent, "");			print_notice(out, qualinfo->d.usernotice, indent + 2);			break;			default:			BIO_printf(out, "%*sUnknown Qualifier: ",							 indent + 2, "");						i2a_ASN1_OBJECT(out, qualinfo->pqualid);			BIO_puts(out, "\n");			break;		}	}}static void print_notice(BIO *out, USERNOTICE *notice, int indent){	int i;	if(notice->noticeref) {		NOTICEREF *ref;		ref = notice->noticeref;		BIO_printf(out, "%*sOrganization: %s\n", indent, "",						 ref->organization->data);		BIO_printf(out, "%*sNumber%s: ", indent, "",			   sk_ASN1_INTEGER_num(ref->noticenos) > 1 ? "s" : "");		for(i = 0; i < sk_ASN1_INTEGER_num(ref->noticenos); i++) {			ASN1_INTEGER *num;			char *tmp;			num = sk_ASN1_INTEGER_value(ref->noticenos, i);			if(i) BIO_puts(out, ", ");			tmp = i2s_ASN1_INTEGER(NULL, num);			BIO_puts(out, tmp);			OPENSSL_free(tmp);		}		BIO_puts(out, "\n");	}	if(notice->exptext)		BIO_printf(out, "%*sExplicit Text: %s\n", indent, "",							 notice->exptext->data);}			int i2d_POLICYQUALINFO(POLICYQUALINFO *a, unsigned char **pp){	M_ASN1_I2D_vars(a);	M_ASN1_I2D_len (a->pqualid, i2d_ASN1_OBJECT);	switch(OBJ_obj2nid(a->pqualid)) {		case NID_id_qt_cps:		M_ASN1_I2D_len(a->d.cpsuri, i2d_ASN1_IA5STRING);		break;		case NID_id_qt_unotice:		M_ASN1_I2D_len(a->d.usernotice, i2d_USERNOTICE);		break;		default:		M_ASN1_I2D_len(a->d.other, i2d_ASN1_TYPE);		break;	}	M_ASN1_I2D_seq_total();	M_ASN1_I2D_put (a->pqualid, i2d_ASN1_OBJECT);	switch(OBJ_obj2nid(a->pqualid)) {		case NID_id_qt_cps:		M_ASN1_I2D_put(a->d.cpsuri, i2d_ASN1_IA5STRING);		break;		case NID_id_qt_unotice:		M_ASN1_I2D_put(a->d.usernotice, i2d_USERNOTICE);		break;		default:		M_ASN1_I2D_put(a->d.other, i2d_ASN1_TYPE);		break;	}	M_ASN1_I2D_finish();}POLICYQUALINFO *POLICYQUALINFO_new(void){	POLICYQUALINFO *ret=NULL;	ASN1_CTX c;	M_ASN1_New_Malloc(ret, POLICYQUALINFO);	ret->pqualid = NULL;	ret->d.other = NULL;	return (ret);	M_ASN1_New_Error(ASN1_F_POLICYQUALINFO_NEW);}POLICYQUALINFO *d2i_POLICYQUALINFO(POLICYQUALINFO **a, unsigned char **pp,		long length){	M_ASN1_D2I_vars(a,POLICYQUALINFO *,POLICYQUALINFO_new);	M_ASN1_D2I_Init();	M_ASN1_D2I_start_sequence();	M_ASN1_D2I_get (ret->pqualid, d2i_ASN1_OBJECT);	switch(OBJ_obj2nid(ret->pqualid)) {		case NID_id_qt_cps:		M_ASN1_D2I_get(ret->d.cpsuri, d2i_ASN1_IA5STRING);		break;		case NID_id_qt_unotice:		M_ASN1_D2I_get(ret->d.usernotice, d2i_USERNOTICE);		break;		default:		M_ASN1_D2I_get(ret->d.other, d2i_ASN1_TYPE);		break;	}	M_ASN1_D2I_Finish(a, POLICYQUALINFO_free, ASN1_F_D2I_POLICYQUALINFO);}void POLICYQUALINFO_free(POLICYQUALINFO *a){	if (a == NULL) return;	switch(OBJ_obj2nid(a->pqualid)) {		case NID_id_qt_cps:		M_ASN1_IA5STRING_free(a->d.cpsuri);		break;		case NID_id_qt_unotice:		USERNOTICE_free(a->d.usernotice);		break;		default:		ASN1_TYPE_free(a->d.other);		break;	}		ASN1_OBJECT_free(a->pqualid);	OPENSSL_free (a);}int i2d_USERNOTICE(USERNOTICE *a, unsigned char **pp){	M_ASN1_I2D_vars(a);	M_ASN1_I2D_len (a->noticeref, i2d_NOTICEREF);	M_ASN1_I2D_len (a->exptext, i2d_DISPLAYTEXT);	M_ASN1_I2D_seq_total();	M_ASN1_I2D_put (a->noticeref, i2d_NOTICEREF);	M_ASN1_I2D_put (a->exptext, i2d_DISPLAYTEXT);	M_ASN1_I2D_finish();}USERNOTICE *USERNOTICE_new(void){	USERNOTICE *ret=NULL;	ASN1_CTX c;	M_ASN1_New_Malloc(ret, USERNOTICE);	ret->noticeref = NULL;	ret->exptext = NULL;	return (ret);	M_ASN1_New_Error(ASN1_F_USERNOTICE_NEW);}USERNOTICE *d2i_USERNOTICE(USERNOTICE **a, unsigned char **pp,long length){	M_ASN1_D2I_vars(a,USERNOTICE *,USERNOTICE_new);	M_ASN1_D2I_Init();	M_ASN1_D2I_start_sequence();	M_ASN1_D2I_get_opt(ret->noticeref, d2i_NOTICEREF, V_ASN1_SEQUENCE);	if (!M_ASN1_D2I_end_sequence()) {		M_ASN1_D2I_get(ret->exptext, d2i_DISPLAYTEXT);	}	M_ASN1_D2I_Finish(a, USERNOTICE_free, ASN1_F_D2I_USERNOTICE);}void USERNOTICE_free(USERNOTICE *a){	if (a == NULL) return;	NOTICEREF_free(a->noticeref);	M_DISPLAYTEXT_free(a->exptext);	OPENSSL_free (a);}int i2d_NOTICEREF(NOTICEREF *a, unsigned char **pp){	M_ASN1_I2D_vars(a);	M_ASN1_I2D_len (a->organization, i2d_DISPLAYTEXT);	M_ASN1_I2D_len_SEQUENCE_type(ASN1_INTEGER, a->noticenos,				     i2d_ASN1_INTEGER);	M_ASN1_I2D_seq_total();	M_ASN1_I2D_put (a->organization, i2d_DISPLAYTEXT);	M_ASN1_I2D_put_SEQUENCE_type(ASN1_INTEGER, a->noticenos,				     i2d_ASN1_INTEGER);	M_ASN1_I2D_finish();}NOTICEREF *NOTICEREF_new(void){	NOTICEREF *ret=NULL;	ASN1_CTX c;	M_ASN1_New_Malloc(ret, NOTICEREF);	ret->organization = NULL;	ret->noticenos = NULL;	return (ret);	M_ASN1_New_Error(ASN1_F_NOTICEREF_NEW);}NOTICEREF *d2i_NOTICEREF(NOTICEREF **a, unsigned char **pp,long length){	M_ASN1_D2I_vars(a,NOTICEREF *,NOTICEREF_new);	M_ASN1_D2I_Init();	M_ASN1_D2I_start_sequence();	/* This is to cope with some broken encodings that use IA5STRING for         * the organization field	 */	M_ASN1_D2I_get_opt(ret->organization, d2i_ASN1_IA5STRING,							 V_ASN1_IA5STRING);	if(!ret->organization) {		 M_ASN1_D2I_get(ret->organization, d2i_DISPLAYTEXT);	}	M_ASN1_D2I_get_seq_type(ASN1_INTEGER, ret->noticenos, d2i_ASN1_INTEGER,				ASN1_STRING_free);	M_ASN1_D2I_Finish(a, NOTICEREF_free, ASN1_F_D2I_NOTICEREF);}void NOTICEREF_free(NOTICEREF *a){	if (a == NULL) return;	M_DISPLAYTEXT_free(a->organization);	sk_ASN1_INTEGER_pop_free(a->noticenos, ASN1_STRING_free);	OPENSSL_free (a);}IMPLEMENT_STACK_OF(POLICYQUALINFO)IMPLEMENT_ASN1_SET_OF(POLICYQUALINFO)

⌨️ 快捷键说明

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