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 + -
显示快捷键?