diff options
Diffstat (limited to 'src/lib/libcrypto/x509/x509name.c')
-rw-r--r-- | src/lib/libcrypto/x509/x509name.c | 66 |
1 files changed, 64 insertions, 2 deletions
diff --git a/src/lib/libcrypto/x509/x509name.c b/src/lib/libcrypto/x509/x509name.c index 2a422be350..cf2382d42c 100644 --- a/src/lib/libcrypto/x509/x509name.c +++ b/src/lib/libcrypto/x509/x509name.c | |||
@@ -171,6 +171,42 @@ X509_NAME_ENTRY *X509_NAME_delete_entry(X509_NAME *name, int loc) | |||
171 | return(ret); | 171 | return(ret); |
172 | } | 172 | } |
173 | 173 | ||
174 | int X509_NAME_add_entry_by_OBJ(X509_NAME *name, ASN1_OBJECT *obj, int type, | ||
175 | unsigned char *bytes, int len, int loc, int set) | ||
176 | { | ||
177 | X509_NAME_ENTRY *ne; | ||
178 | int ret; | ||
179 | ne = X509_NAME_ENTRY_create_by_OBJ(NULL, obj, type, bytes, len); | ||
180 | if(!ne) return 0; | ||
181 | ret = X509_NAME_add_entry(name, ne, loc, set); | ||
182 | X509_NAME_ENTRY_free(ne); | ||
183 | return ret; | ||
184 | } | ||
185 | |||
186 | int X509_NAME_add_entry_by_NID(X509_NAME *name, int nid, int type, | ||
187 | unsigned char *bytes, int len, int loc, int set) | ||
188 | { | ||
189 | X509_NAME_ENTRY *ne; | ||
190 | int ret; | ||
191 | ne = X509_NAME_ENTRY_create_by_NID(NULL, nid, type, bytes, len); | ||
192 | if(!ne) return 0; | ||
193 | ret = X509_NAME_add_entry(name, ne, loc, set); | ||
194 | X509_NAME_ENTRY_free(ne); | ||
195 | return ret; | ||
196 | } | ||
197 | |||
198 | int X509_NAME_add_entry_by_txt(X509_NAME *name, char *field, int type, | ||
199 | unsigned char *bytes, int len, int loc, int set) | ||
200 | { | ||
201 | X509_NAME_ENTRY *ne; | ||
202 | int ret; | ||
203 | ne = X509_NAME_ENTRY_create_by_txt(NULL, field, type, bytes, len); | ||
204 | if(!ne) return 0; | ||
205 | ret = X509_NAME_add_entry(name, ne, loc, set); | ||
206 | X509_NAME_ENTRY_free(ne); | ||
207 | return ret; | ||
208 | } | ||
209 | |||
174 | /* if set is -1, append to previous set, 0 'a new one', and 1, | 210 | /* if set is -1, append to previous set, 0 'a new one', and 1, |
175 | * prepend to the guy we are about to stomp on. */ | 211 | * prepend to the guy we are about to stomp on. */ |
176 | int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc, | 212 | int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int loc, |
@@ -236,10 +272,30 @@ err: | |||
236 | return(0); | 272 | return(0); |
237 | } | 273 | } |
238 | 274 | ||
275 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_txt(X509_NAME_ENTRY **ne, | ||
276 | char *field, int type, unsigned char *bytes, int len) | ||
277 | { | ||
278 | ASN1_OBJECT *obj; | ||
279 | X509_NAME_ENTRY *nentry; | ||
280 | |||
281 | obj=OBJ_txt2obj(field, 0); | ||
282 | if (obj == NULL) | ||
283 | { | ||
284 | X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_TXT, | ||
285 | X509_R_INVALID_FIELD_NAME); | ||
286 | ERR_add_error_data(2, "name=", field); | ||
287 | return(NULL); | ||
288 | } | ||
289 | nentry = X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len); | ||
290 | ASN1_OBJECT_free(obj); | ||
291 | return nentry; | ||
292 | } | ||
293 | |||
239 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, | 294 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, |
240 | int type, unsigned char *bytes, int len) | 295 | int type, unsigned char *bytes, int len) |
241 | { | 296 | { |
242 | ASN1_OBJECT *obj; | 297 | ASN1_OBJECT *obj; |
298 | X509_NAME_ENTRY *nentry; | ||
243 | 299 | ||
244 | obj=OBJ_nid2obj(nid); | 300 | obj=OBJ_nid2obj(nid); |
245 | if (obj == NULL) | 301 | if (obj == NULL) |
@@ -247,7 +303,9 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY **ne, int nid, | |||
247 | X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_NID,X509_R_UNKNOWN_NID); | 303 | X509err(X509_F_X509_NAME_ENTRY_CREATE_BY_NID,X509_R_UNKNOWN_NID); |
248 | return(NULL); | 304 | return(NULL); |
249 | } | 305 | } |
250 | return(X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len)); | 306 | nentry = X509_NAME_ENTRY_create_by_OBJ(ne,obj,type,bytes,len); |
307 | ASN1_OBJECT_free(obj); | ||
308 | return nentry; | ||
251 | } | 309 | } |
252 | 310 | ||
253 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, | 311 | X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, |
@@ -267,7 +325,7 @@ X509_NAME_ENTRY *X509_NAME_ENTRY_create_by_OBJ(X509_NAME_ENTRY **ne, | |||
267 | goto err; | 325 | goto err; |
268 | if (!X509_NAME_ENTRY_set_data(ret,type,bytes,len)) | 326 | if (!X509_NAME_ENTRY_set_data(ret,type,bytes,len)) |
269 | goto err; | 327 | goto err; |
270 | 328 | ||
271 | if ((ne != NULL) && (*ne == NULL)) *ne=ret; | 329 | if ((ne != NULL) && (*ne == NULL)) *ne=ret; |
272 | return(ret); | 330 | return(ret); |
273 | err: | 331 | err: |
@@ -294,6 +352,10 @@ int X509_NAME_ENTRY_set_data(X509_NAME_ENTRY *ne, int type, | |||
294 | int i; | 352 | int i; |
295 | 353 | ||
296 | if ((ne == NULL) || ((bytes == NULL) && (len != 0))) return(0); | 354 | if ((ne == NULL) || ((bytes == NULL) && (len != 0))) return(0); |
355 | if(type & MBSTRING_FLAG) | ||
356 | return ASN1_STRING_set_by_NID(&ne->value, bytes, | ||
357 | len, type, | ||
358 | OBJ_obj2nid(ne->object)) ? 1 : 0; | ||
297 | if (len < 0) len=strlen((char *)bytes); | 359 | if (len < 0) len=strlen((char *)bytes); |
298 | i=ASN1_STRING_set(ne->value,bytes,len); | 360 | i=ASN1_STRING_set(ne->value,bytes,len); |
299 | if (!i) return(0); | 361 | if (!i) return(0); |