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 |