int i2d_AC_TARGET(AC_TARGET *a, unsigned char **pp) { int v1=0, v2=0, v3=0; M_ASN1_I2D_vars(a); M_ASN1_I2D_len_EXP_opt(a->name, i2d_GENERAL_NAME, 0, v1); M_ASN1_I2D_len_EXP_opt(a->group, i2d_GENERAL_NAME, 1, v2); M_ASN1_I2D_len_EXP_opt(a->cert, i2d_AC_IS, 2, v3); M_ASN1_I2D_seq_total(); M_ASN1_I2D_put_EXP_opt(a->name, i2d_GENERAL_NAME, 0, v1); M_ASN1_I2D_put_EXP_opt(a->group, i2d_GENERAL_NAME, 1, v2); M_ASN1_I2D_put_EXP_opt(a->cert, i2d_AC_IS, 2, v3); M_ASN1_I2D_finish(); }
int i2d_GENERAL_NAME(GENERAL_NAME *a, unsigned char **pp) { unsigned char *p; int ret; ret = 0; /* Save the location of initial TAG */ if(pp) p = *pp; else p = NULL; /* GEN_DNAME needs special treatment because of EXPLICIT tag */ if(a->type == GEN_DIRNAME) { int v = 0; M_ASN1_I2D_len_EXP_opt(a->d.dirn, i2d_X509_NAME, 4, v); if(!p) return ret; M_ASN1_I2D_put_EXP_opt(a->d.dirn, i2d_X509_NAME, 4, v); *pp = p; return ret; } switch(a->type) { case GEN_X400: case GEN_EDIPARTY: ret = i2d_ASN1_TYPE(a->d.other, pp); break; case GEN_OTHERNAME: ret = i2d_OTHERNAME(a->d.otherName, pp); break; case GEN_EMAIL: case GEN_DNS: case GEN_URI: ret = i2d_ASN1_IA5STRING(a->d.ia5, pp); break; case GEN_IPADD: ret = i2d_ASN1_OCTET_STRING(a->d.ip, pp); break; case GEN_RID: ret = i2d_ASN1_OBJECT(a->d.rid, pp); break; } /* Replace TAG with IMPLICIT value */ if(p) *p = (*p & V_ASN1_CONSTRUCTED) | a->type; return ret; }
int i2d_PKCS12_SAFEBAG(PKCS12_SAFEBAG *a, unsigned char **pp) { int bagnid, v = 0; M_ASN1_I2D_vars(a); bagnid = OBJ_obj2nid (a->type); M_ASN1_I2D_len (a->type, i2d_ASN1_OBJECT); switch (bagnid) { case NID_keyBag: M_ASN1_I2D_len_EXP_opt (a->value.keybag, i2d_PKCS8_PRIV_KEY_INFO, 0, v); break; case NID_pkcs8ShroudedKeyBag: M_ASN1_I2D_len_EXP_opt (a->value.shkeybag, i2d_X509_SIG, 0, v); break; case NID_safeContentsBag: M_ASN1_I2D_len_EXP_SEQUENCE_opt_type (PKCS12_SAFEBAG, a->value.safes, (i2d_func_t)i2d_PKCS12_SAFEBAG, 0, V_ASN1_SEQUENCE, v); break; case NID_certBag: case NID_crlBag: case NID_secretBag: M_ASN1_I2D_len_EXP_opt (a->value.bag, i2d_PKCS12_BAGS, 0, v); break; default: M_ASN1_I2D_len_EXP_opt (a->value.other, i2d_ASN1_TYPE, 0, v); break; } M_ASN1_I2D_len_SET_type (X509_ATTRIBUTE,a->attrib, (i2d_func_t)i2d_X509_ATTRIBUTE); M_ASN1_I2D_seq_total (); M_ASN1_I2D_put (a->type, i2d_ASN1_OBJECT); switch (bagnid) { case NID_keyBag: M_ASN1_I2D_put_EXP_opt (a->value.keybag, i2d_PKCS8_PRIV_KEY_INFO, 0, v); break; case NID_pkcs8ShroudedKeyBag: M_ASN1_I2D_put_EXP_opt (a->value.shkeybag, i2d_X509_SIG, 0, v); break; case NID_safeContentsBag: M_ASN1_I2D_put_EXP_SEQUENCE_opt_type (PKCS12_SAFEBAG, a->value.safes, (i2d_func_t)i2d_PKCS12_SAFEBAG, 0, V_ASN1_SEQUENCE, v); break; case NID_certBag: case NID_crlBag: case NID_secretBag: M_ASN1_I2D_put_EXP_opt (a->value.bag, i2d_PKCS12_BAGS, 0, v); break; default: M_ASN1_I2D_put_EXP_opt (a->value.other, i2d_ASN1_TYPE, 0, v); break; } M_ASN1_I2D_put_SET_type (X509_ATTRIBUTE, a->attrib, (i2d_func_t)i2d_X509_ATTRIBUTE); M_ASN1_I2D_finish(); }