#include
int X509_NAME_add_entry_by_txt(X509_NAME *name, const char *field, int type, const unsigned char *bytes, int len, int loc, int set);
int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type, unsigned char *bytes, int len, int loc, int set);
int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, unsigned char *bytes, int len, int loc, int set);
int X509_NAME_add_entry(X509_NAME *name,X509_NAME_ENTRY *ne, int loc, int set);
X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc);
The type of field is determined by ttyyppee which can either be a definition of the type of bbyytteess (such as MMBBSSTTRRIINNGG__AASSCC) or a standard ASN1 type (such as VV__AASSNN11__IIAA55SSTTRRIINNGG). The new entry is added to a position determined by lloocc and sseett.
_X_5_0_9___N_A_M_E___a_d_d___e_n_t_r_y_(_) adds a copy of XX550099__NNAAMMEE__EENNTTRRYY structure nnee to nnaammee. The new entry is added to a position determined by lloocc and sseett. Since a copy of nnee is added nnee must be freed up after the call.
_X_5_0_9___N_A_M_E___d_e_l_e_t_e___e_n_t_r_y_(_) deletes an entry from nnaammee at position lloocc. The deleted entry is returned and must be freed up.
If instead an ASN1 type is used no checks are performed and the supplied data in bbyytteess is used directly.
In _X_5_0_9___N_A_M_E___a_d_d___e_n_t_r_y___b_y___t_x_t_(_) the ffiieelldd string represents the field name using OBJ_txt2obj(field, 0).
The lloocc and sseett parameters determine where a new entry should be added. For almost all applications lloocc can be set to -1 and sseett to 0. This adds a new entry to the end of nnaammee as a single valued RelativeDistinguishedName (RDN).
lloocc actually determines the index where the new entry is inserted: if it is -1 it is appended.
sseett determines how the new type is added. If it is zero a new RDN is created.
If sseett is -1 or 1 it is added to the previous or next RDN structure respectively. This will then be a multivalued RDN: since multivalues RDNs are very seldom used sseett is almost always set to zero.
"C=UK, O=Disorganized Organization, CN=Joe Bloggs"
X509_NAME *nm; nm = X509_NAME_new(); if (nm == NULL) /* Some error */ if (!X509_NAME_add_entry_by_txt(nm, MBSTRING_ASC, "C", "UK", -1, -1, 0)) /* Error */ if (!X509_NAME_add_entry_by_txt(nm, MBSTRING_ASC, "O", "Disorganized Organization", -1, -1, 0)) /* Error */ if (!X509_NAME_add_entry_by_txt(nm, MBSTRING_ASC, "CN", "Joe Bloggs", -1, -1, 0)) /* Error */
_X_5_0_9___N_A_M_E___d_e_l_e_t_e___e_n_t_r_y_(_) returns either the deleted XX550099__NNAAMMEE__EENNTTRRYY structure of NNUULLLL if an error occurred.