| OLD | NEW |
| 1 /* v3_lib.c */ | 1 /* v3_lib.c */ |
| 2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 * project 1999. | 3 * project 1999. |
| 4 */ | 4 */ |
| 5 /* ==================================================================== | 5 /* ==================================================================== |
| 6 * Copyright (c) 1999 The OpenSSL Project. All rights reserved. | 6 * Copyright (c) 1999 The OpenSSL Project. All rights reserved. |
| 7 * | 7 * |
| 8 * Redistribution and use in source and binary forms, with or without | 8 * Redistribution and use in source and binary forms, with or without |
| 9 * modification, are permitted provided that the following conditions | 9 * modification, are permitted provided that the following conditions |
| 10 * are met: | 10 * are met: |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 return 0; | 77 return 0; |
| 78 } | 78 } |
| 79 if(!sk_X509V3_EXT_METHOD_push(ext_list, ext)) { | 79 if(!sk_X509V3_EXT_METHOD_push(ext_list, ext)) { |
| 80 X509V3err(X509V3_F_X509V3_EXT_ADD,ERR_R_MALLOC_FAILURE); | 80 X509V3err(X509V3_F_X509V3_EXT_ADD,ERR_R_MALLOC_FAILURE); |
| 81 return 0; | 81 return 0; |
| 82 } | 82 } |
| 83 return 1; | 83 return 1; |
| 84 } | 84 } |
| 85 | 85 |
| 86 static int ext_cmp(const X509V3_EXT_METHOD * const *a, | 86 static int ext_cmp(const X509V3_EXT_METHOD * const *a, |
| 87 » » const X509V3_EXT_METHOD * const *b) | 87 » » const X509V3_EXT_METHOD * const *b) |
| 88 { | 88 { |
| 89 return ((*a)->ext_nid - (*b)->ext_nid); | 89 return ((*a)->ext_nid - (*b)->ext_nid); |
| 90 } | 90 } |
| 91 | 91 |
| 92 X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid) | 92 DECLARE_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, const X509V3_EXT_METHOD *, |
| 93 » » » ext); |
| 94 IMPLEMENT_OBJ_BSEARCH_CMP_FN(const X509V3_EXT_METHOD *, |
| 95 » » » const X509V3_EXT_METHOD *, ext); |
| 96 |
| 97 const X509V3_EXT_METHOD *X509V3_EXT_get_nid(int nid) |
| 93 { | 98 { |
| 94 » X509V3_EXT_METHOD tmp, *t = &tmp, **ret; | 99 » X509V3_EXT_METHOD tmp; |
| 100 » const X509V3_EXT_METHOD *t = &tmp, * const *ret; |
| 95 int idx; | 101 int idx; |
| 96 if(nid < 0) return NULL; | 102 if(nid < 0) return NULL; |
| 97 tmp.ext_nid = nid; | 103 tmp.ext_nid = nid; |
| 98 » ret = (X509V3_EXT_METHOD **) OBJ_bsearch((char *)&t, | 104 » ret = OBJ_bsearch_ext(&t, standard_exts, STANDARD_EXTENSION_COUNT); |
| 99 » » » (char *)standard_exts, STANDARD_EXTENSION_COUNT, | |
| 100 » » » sizeof(X509V3_EXT_METHOD *), (int (*)(const void *, cons
t void *))ext_cmp); | |
| 101 if(ret) return *ret; | 105 if(ret) return *ret; |
| 102 if(!ext_list) return NULL; | 106 if(!ext_list) return NULL; |
| 103 idx = sk_X509V3_EXT_METHOD_find(ext_list, &tmp); | 107 idx = sk_X509V3_EXT_METHOD_find(ext_list, &tmp); |
| 104 if(idx == -1) return NULL; | 108 if(idx == -1) return NULL; |
| 105 return sk_X509V3_EXT_METHOD_value(ext_list, idx); | 109 return sk_X509V3_EXT_METHOD_value(ext_list, idx); |
| 106 } | 110 } |
| 107 | 111 |
| 108 X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext) | 112 const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext) |
| 109 { | 113 { |
| 110 int nid; | 114 int nid; |
| 111 if((nid = OBJ_obj2nid(ext->object)) == NID_undef) return NULL; | 115 if((nid = OBJ_obj2nid(ext->object)) == NID_undef) return NULL; |
| 112 return X509V3_EXT_get_nid(nid); | 116 return X509V3_EXT_get_nid(nid); |
| 113 } | 117 } |
| 114 | 118 |
| 115 | 119 |
| 116 int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist) | 120 int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist) |
| 117 { | 121 { |
| 118 for(;extlist->ext_nid!=-1;extlist++) | 122 for(;extlist->ext_nid!=-1;extlist++) |
| 119 if(!X509V3_EXT_add(extlist)) return 0; | 123 if(!X509V3_EXT_add(extlist)) return 0; |
| 120 return 1; | 124 return 1; |
| 121 } | 125 } |
| 122 | 126 |
| 123 int X509V3_EXT_add_alias(int nid_to, int nid_from) | 127 int X509V3_EXT_add_alias(int nid_to, int nid_from) |
| 124 { | 128 { |
| 125 » X509V3_EXT_METHOD *ext, *tmpext; | 129 » const X509V3_EXT_METHOD *ext; |
| 130 » X509V3_EXT_METHOD *tmpext; |
| 131 |
| 126 if(!(ext = X509V3_EXT_get_nid(nid_from))) { | 132 if(!(ext = X509V3_EXT_get_nid(nid_from))) { |
| 127 X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS,X509V3_R_EXTENSION_NOT_F
OUND); | 133 X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS,X509V3_R_EXTENSION_NOT_F
OUND); |
| 128 return 0; | 134 return 0; |
| 129 } | 135 } |
| 130 if(!(tmpext = (X509V3_EXT_METHOD *)OPENSSL_malloc(sizeof(X509V3_EXT_METH
OD)))) { | 136 if(!(tmpext = (X509V3_EXT_METHOD *)OPENSSL_malloc(sizeof(X509V3_EXT_METH
OD)))) { |
| 131 X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS,ERR_R_MALLOC_FAILURE); | 137 X509V3err(X509V3_F_X509V3_EXT_ADD_ALIAS,ERR_R_MALLOC_FAILURE); |
| 132 return 0; | 138 return 0; |
| 133 } | 139 } |
| 134 *tmpext = *ext; | 140 *tmpext = *ext; |
| 135 tmpext->ext_nid = nid_to; | 141 tmpext->ext_nid = nid_to; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 154 | 160 |
| 155 int X509V3_add_standard_extensions(void) | 161 int X509V3_add_standard_extensions(void) |
| 156 { | 162 { |
| 157 return 1; | 163 return 1; |
| 158 } | 164 } |
| 159 | 165 |
| 160 /* Return an extension internal structure */ | 166 /* Return an extension internal structure */ |
| 161 | 167 |
| 162 void *X509V3_EXT_d2i(X509_EXTENSION *ext) | 168 void *X509V3_EXT_d2i(X509_EXTENSION *ext) |
| 163 { | 169 { |
| 164 » X509V3_EXT_METHOD *method; | 170 » const X509V3_EXT_METHOD *method; |
| 165 const unsigned char *p; | 171 const unsigned char *p; |
| 166 | 172 |
| 167 if(!(method = X509V3_EXT_get(ext))) return NULL; | 173 if(!(method = X509V3_EXT_get(ext))) return NULL; |
| 168 p = ext->value->data; | 174 p = ext->value->data; |
| 169 if(method->it) return ASN1_item_d2i(NULL, &p, ext->value->length, ASN1_I
TEM_ptr(method->it)); | 175 if(method->it) return ASN1_item_d2i(NULL, &p, ext->value->length, ASN1_I
TEM_ptr(method->it)); |
| 170 return method->d2i(NULL, &p, ext->value->length); | 176 return method->d2i(NULL, &p, ext->value->length); |
| 171 } | 177 } |
| 172 | 178 |
| 173 /* Get critical flag and decoded version of extension from a NID. | 179 /* Get critical flag and decoded version of extension from a NID. |
| 174 * The "idx" variable returns the last found extension and can | 180 * The "idx" variable returns the last found extension and can |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 | 300 |
| 295 return 1; | 301 return 1; |
| 296 | 302 |
| 297 err: | 303 err: |
| 298 if(!(flags & X509V3_ADD_SILENT)) | 304 if(!(flags & X509V3_ADD_SILENT)) |
| 299 X509V3err(X509V3_F_X509V3_ADD1_I2D, errcode); | 305 X509V3err(X509V3_F_X509V3_ADD1_I2D, errcode); |
| 300 return 0; | 306 return 0; |
| 301 } | 307 } |
| 302 | 308 |
| 303 IMPLEMENT_STACK_OF(X509V3_EXT_METHOD) | 309 IMPLEMENT_STACK_OF(X509V3_EXT_METHOD) |
| OLD | NEW |