| OLD | NEW |
| 1 /* crypto/evp/names.c */ | 1 /* crypto/evp/names.c */ |
| 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 * All rights reserved. | 3 * All rights reserved. |
| 4 * | 4 * |
| 5 * This package is an SSL implementation written | 5 * This package is an SSL implementation written |
| 6 * by Eric Young (eay@cryptsoft.com). | 6 * by Eric Young (eay@cryptsoft.com). |
| 7 * The implementation was written so as to conform with Netscapes SSL. | 7 * The implementation was written so as to conform with Netscapes SSL. |
| 8 * | 8 * |
| 9 * This library is free for commercial and non-commercial use as long as | 9 * This library is free for commercial and non-commercial use as long as |
| 10 * the following conditions are aheared to. The following conditions | 10 * the following conditions are aheared to. The following conditions |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 #include <stdio.h> | 59 #include <stdio.h> |
| 60 #include "cryptlib.h" | 60 #include "cryptlib.h" |
| 61 #include <openssl/evp.h> | 61 #include <openssl/evp.h> |
| 62 #include <openssl/objects.h> | 62 #include <openssl/objects.h> |
| 63 #include <openssl/x509.h> | 63 #include <openssl/x509.h> |
| 64 | 64 |
| 65 int EVP_add_cipher(const EVP_CIPHER *c) | 65 int EVP_add_cipher(const EVP_CIPHER *c) |
| 66 { | 66 { |
| 67 int r; | 67 int r; |
| 68 | 68 |
| 69 #ifdef OPENSSL_FIPS | |
| 70 OPENSSL_init(); | |
| 71 #endif | |
| 72 | |
| 73 r=OBJ_NAME_add(OBJ_nid2sn(c->nid),OBJ_NAME_TYPE_CIPHER_METH,(const char
*)c); | 69 r=OBJ_NAME_add(OBJ_nid2sn(c->nid),OBJ_NAME_TYPE_CIPHER_METH,(const char
*)c); |
| 74 if (r == 0) return(0); | 70 if (r == 0) return(0); |
| 71 check_defer(c->nid); |
| 75 r=OBJ_NAME_add(OBJ_nid2ln(c->nid),OBJ_NAME_TYPE_CIPHER_METH,(const char
*)c); | 72 r=OBJ_NAME_add(OBJ_nid2ln(c->nid),OBJ_NAME_TYPE_CIPHER_METH,(const char
*)c); |
| 76 return(r); | 73 return(r); |
| 77 } | 74 } |
| 78 | 75 |
| 76 |
| 79 int EVP_add_digest(const EVP_MD *md) | 77 int EVP_add_digest(const EVP_MD *md) |
| 80 { | 78 { |
| 81 int r; | 79 int r; |
| 82 const char *name; | 80 const char *name; |
| 83 | 81 |
| 84 #ifdef OPENSSL_FIPS | |
| 85 OPENSSL_init(); | |
| 86 #endif | |
| 87 name=OBJ_nid2sn(md->type); | 82 name=OBJ_nid2sn(md->type); |
| 88 r=OBJ_NAME_add(name,OBJ_NAME_TYPE_MD_METH,(const char *)md); | 83 r=OBJ_NAME_add(name,OBJ_NAME_TYPE_MD_METH,(const char *)md); |
| 89 if (r == 0) return(0); | 84 if (r == 0) return(0); |
| 85 check_defer(md->type); |
| 90 r=OBJ_NAME_add(OBJ_nid2ln(md->type),OBJ_NAME_TYPE_MD_METH,(const char *)
md); | 86 r=OBJ_NAME_add(OBJ_nid2ln(md->type),OBJ_NAME_TYPE_MD_METH,(const char *)
md); |
| 91 if (r == 0) return(0); | 87 if (r == 0) return(0); |
| 92 | 88 |
| 93 if (md->pkey_type && md->type != md->pkey_type) | 89 if (md->pkey_type && md->type != md->pkey_type) |
| 94 { | 90 { |
| 95 r=OBJ_NAME_add(OBJ_nid2sn(md->pkey_type), | 91 r=OBJ_NAME_add(OBJ_nid2sn(md->pkey_type), |
| 96 OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,name); | 92 OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,name); |
| 97 if (r == 0) return(0); | 93 if (r == 0) return(0); |
| 94 check_defer(md->pkey_type); |
| 98 r=OBJ_NAME_add(OBJ_nid2ln(md->pkey_type), | 95 r=OBJ_NAME_add(OBJ_nid2ln(md->pkey_type), |
| 99 OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,name); | 96 OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,name); |
| 100 } | 97 } |
| 101 return(r); | 98 return(r); |
| 102 } | 99 } |
| 103 | 100 |
| 104 const EVP_CIPHER *EVP_get_cipherbyname(const char *name) | 101 const EVP_CIPHER *EVP_get_cipherbyname(const char *name) |
| 105 { | 102 { |
| 106 const EVP_CIPHER *cp; | 103 const EVP_CIPHER *cp; |
| 107 | 104 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 120 void EVP_cleanup(void) | 117 void EVP_cleanup(void) |
| 121 { | 118 { |
| 122 OBJ_NAME_cleanup(OBJ_NAME_TYPE_CIPHER_METH); | 119 OBJ_NAME_cleanup(OBJ_NAME_TYPE_CIPHER_METH); |
| 123 OBJ_NAME_cleanup(OBJ_NAME_TYPE_MD_METH); | 120 OBJ_NAME_cleanup(OBJ_NAME_TYPE_MD_METH); |
| 124 /* The above calls will only clean out the contents of the name | 121 /* The above calls will only clean out the contents of the name |
| 125 hash table, but not the hash table itself. The following line | 122 hash table, but not the hash table itself. The following line |
| 126 does that part. -- Richard Levitte */ | 123 does that part. -- Richard Levitte */ |
| 127 OBJ_NAME_cleanup(-1); | 124 OBJ_NAME_cleanup(-1); |
| 128 | 125 |
| 129 EVP_PBE_cleanup(); | 126 EVP_PBE_cleanup(); |
| 127 if (obj_cleanup_defer == 2) |
| 128 { |
| 129 obj_cleanup_defer = 0; |
| 130 OBJ_cleanup(); |
| 131 } |
| 132 OBJ_sigid_free(); |
| 130 } | 133 } |
| 134 |
| 135 struct doall_cipher |
| 136 { |
| 137 void *arg; |
| 138 void (*fn)(const EVP_CIPHER *ciph, |
| 139 const char *from, const char *to, void *arg); |
| 140 }; |
| 141 |
| 142 static void do_all_cipher_fn(const OBJ_NAME *nm, void *arg) |
| 143 { |
| 144 struct doall_cipher *dc = arg; |
| 145 if (nm->alias) |
| 146 dc->fn(NULL, nm->name, nm->data, dc->arg); |
| 147 else |
| 148 dc->fn((const EVP_CIPHER *)nm->data, nm->name, NULL, dc->arg); |
| 149 } |
| 150 |
| 151 void EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *ciph, |
| 152 const char *from, const char *to, void *x), void *arg) |
| 153 { |
| 154 struct doall_cipher dc; |
| 155 dc.fn = fn; |
| 156 dc.arg = arg; |
| 157 OBJ_NAME_do_all(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn, &dc); |
| 158 } |
| 159 |
| 160 void EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *ciph, |
| 161 const char *from, const char *to, void *x), void *arg) |
| 162 { |
| 163 struct doall_cipher dc; |
| 164 dc.fn = fn; |
| 165 dc.arg = arg; |
| 166 OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn,&dc); |
| 167 } |
| 168 |
| 169 struct doall_md |
| 170 { |
| 171 void *arg; |
| 172 void (*fn)(const EVP_MD *ciph, |
| 173 const char *from, const char *to, void *arg); |
| 174 }; |
| 175 |
| 176 static void do_all_md_fn(const OBJ_NAME *nm, void *arg) |
| 177 { |
| 178 struct doall_md *dc = arg; |
| 179 if (nm->alias) |
| 180 dc->fn(NULL, nm->name, nm->data, dc->arg); |
| 181 else |
| 182 dc->fn((const EVP_MD *)nm->data, nm->name, NULL, dc->arg); |
| 183 } |
| 184 |
| 185 void EVP_MD_do_all(void (*fn)(const EVP_MD *md, |
| 186 const char *from, const char *to, void *x), void *arg) |
| 187 { |
| 188 struct doall_md dc; |
| 189 dc.fn = fn; |
| 190 dc.arg = arg; |
| 191 OBJ_NAME_do_all(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc); |
| 192 } |
| 193 |
| 194 void EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *md, |
| 195 const char *from, const char *to, void *x), void *arg) |
| 196 { |
| 197 struct doall_md dc; |
| 198 dc.fn = fn; |
| 199 dc.arg = arg; |
| 200 OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc); |
| 201 } |
| OLD | NEW |