| Index: openssl/crypto/evp/names.c
|
| ===================================================================
|
| --- openssl/crypto/evp/names.c (revision 105093)
|
| +++ openssl/crypto/evp/names.c (working copy)
|
| @@ -66,27 +66,23 @@
|
| {
|
| int r;
|
|
|
| -#ifdef OPENSSL_FIPS
|
| - OPENSSL_init();
|
| -#endif
|
| -
|
| r=OBJ_NAME_add(OBJ_nid2sn(c->nid),OBJ_NAME_TYPE_CIPHER_METH,(const char *)c);
|
| if (r == 0) return(0);
|
| + check_defer(c->nid);
|
| r=OBJ_NAME_add(OBJ_nid2ln(c->nid),OBJ_NAME_TYPE_CIPHER_METH,(const char *)c);
|
| return(r);
|
| }
|
|
|
| +
|
| int EVP_add_digest(const EVP_MD *md)
|
| {
|
| int r;
|
| const char *name;
|
|
|
| -#ifdef OPENSSL_FIPS
|
| - OPENSSL_init();
|
| -#endif
|
| name=OBJ_nid2sn(md->type);
|
| r=OBJ_NAME_add(name,OBJ_NAME_TYPE_MD_METH,(const char *)md);
|
| if (r == 0) return(0);
|
| + check_defer(md->type);
|
| r=OBJ_NAME_add(OBJ_nid2ln(md->type),OBJ_NAME_TYPE_MD_METH,(const char *)md);
|
| if (r == 0) return(0);
|
|
|
| @@ -95,6 +91,7 @@
|
| r=OBJ_NAME_add(OBJ_nid2sn(md->pkey_type),
|
| OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,name);
|
| if (r == 0) return(0);
|
| + check_defer(md->pkey_type);
|
| r=OBJ_NAME_add(OBJ_nid2ln(md->pkey_type),
|
| OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,name);
|
| }
|
| @@ -127,4 +124,78 @@
|
| OBJ_NAME_cleanup(-1);
|
|
|
| EVP_PBE_cleanup();
|
| + if (obj_cleanup_defer == 2)
|
| + {
|
| + obj_cleanup_defer = 0;
|
| + OBJ_cleanup();
|
| + }
|
| + OBJ_sigid_free();
|
| }
|
| +
|
| +struct doall_cipher
|
| + {
|
| + void *arg;
|
| + void (*fn)(const EVP_CIPHER *ciph,
|
| + const char *from, const char *to, void *arg);
|
| + };
|
| +
|
| +static void do_all_cipher_fn(const OBJ_NAME *nm, void *arg)
|
| + {
|
| + struct doall_cipher *dc = arg;
|
| + if (nm->alias)
|
| + dc->fn(NULL, nm->name, nm->data, dc->arg);
|
| + else
|
| + dc->fn((const EVP_CIPHER *)nm->data, nm->name, NULL, dc->arg);
|
| + }
|
| +
|
| +void EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *ciph,
|
| + const char *from, const char *to, void *x), void *arg)
|
| + {
|
| + struct doall_cipher dc;
|
| + dc.fn = fn;
|
| + dc.arg = arg;
|
| + OBJ_NAME_do_all(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn, &dc);
|
| + }
|
| +
|
| +void EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *ciph,
|
| + const char *from, const char *to, void *x), void *arg)
|
| + {
|
| + struct doall_cipher dc;
|
| + dc.fn = fn;
|
| + dc.arg = arg;
|
| + OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn,&dc);
|
| + }
|
| +
|
| +struct doall_md
|
| + {
|
| + void *arg;
|
| + void (*fn)(const EVP_MD *ciph,
|
| + const char *from, const char *to, void *arg);
|
| + };
|
| +
|
| +static void do_all_md_fn(const OBJ_NAME *nm, void *arg)
|
| + {
|
| + struct doall_md *dc = arg;
|
| + if (nm->alias)
|
| + dc->fn(NULL, nm->name, nm->data, dc->arg);
|
| + else
|
| + dc->fn((const EVP_MD *)nm->data, nm->name, NULL, dc->arg);
|
| + }
|
| +
|
| +void EVP_MD_do_all(void (*fn)(const EVP_MD *md,
|
| + const char *from, const char *to, void *x), void *arg)
|
| + {
|
| + struct doall_md dc;
|
| + dc.fn = fn;
|
| + dc.arg = arg;
|
| + OBJ_NAME_do_all(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc);
|
| + }
|
| +
|
| +void EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *md,
|
| + const char *from, const char *to, void *x), void *arg)
|
| + {
|
| + struct doall_md dc;
|
| + dc.fn = fn;
|
| + dc.arg = arg;
|
| + OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc);
|
| + }
|
|
|