1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/evp/names.c */ 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * All rights reserved. 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This package is an SSL implementation written 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * by Eric Young (eay@cryptsoft.com). 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The implementation was written so as to conform with Netscapes SSL. 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This library is free for commercial and non-commercial use as long as 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the following conditions are aheared to. The following conditions 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply to all code found in this distribution, be it the RC4, RSA, 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * included with this distribution is covered by the same copyright terms 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright remains Eric Young's, and as such any Copyright notices in 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the code are not to be removed. 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * If this package is used in a product, Eric Young should be given attribution 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * as the author of the parts of the library used. 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This can be in the form of a textual message at program startup or 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in documentation (online or textual) provided with the package. 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the copyright 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in the 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * documentation and/or other materials provided with the distribution. 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this software 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * must display the following acknowledgement: 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes cryptographic software written by 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Eric Young (eay@cryptsoft.com)" 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The word 'cryptographic' can be left out if the rouines from the library 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * being used are not cryptographic related :-). 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. If you include any Windows specific code (or a derivative thereof) from 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the apps directory (application code) you must include an acknowledgement: 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUCH DAMAGE. 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * The licence and distribution terms for any publically available version or 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * derivative of this code cannot be changed. i.e. this code cannot simply be 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * copied and put under another distribution licence 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * [including the GNU Public Licence.] 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h> 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "cryptlib.h" 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/evp.h> 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/objects.h> 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/x509.h> 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint EVP_add_cipher(const EVP_CIPHER *c) 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int r; 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 69392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom if (c == NULL) return 0; 70392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 71392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom OPENSSL_init(); 72392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r=OBJ_NAME_add(OBJ_nid2sn(c->nid),OBJ_NAME_TYPE_CIPHER_METH,(const char *)c); 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (r == 0) return(0); 75221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom check_defer(c->nid); 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r=OBJ_NAME_add(OBJ_nid2ln(c->nid),OBJ_NAME_TYPE_CIPHER_METH,(const char *)c); 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(r); 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 80221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint EVP_add_digest(const EVP_MD *md) 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int r; 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const char *name; 85392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom OPENSSL_init(); 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project name=OBJ_nid2sn(md->type); 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r=OBJ_NAME_add(name,OBJ_NAME_TYPE_MD_METH,(const char *)md); 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (r == 0) return(0); 90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom check_defer(md->type); 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r=OBJ_NAME_add(OBJ_nid2ln(md->type),OBJ_NAME_TYPE_MD_METH,(const char *)md); 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (r == 0) return(0); 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 94221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (md->pkey_type && md->type != md->pkey_type) 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r=OBJ_NAME_add(OBJ_nid2sn(md->pkey_type), 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,name); 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (r == 0) return(0); 99221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom check_defer(md->pkey_type); 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r=OBJ_NAME_add(OBJ_nid2ln(md->pkey_type), 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,name); 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(r); 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst EVP_CIPHER *EVP_get_cipherbyname(const char *name) 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const EVP_CIPHER *cp; 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cp=(const EVP_CIPHER *)OBJ_NAME_get(name,OBJ_NAME_TYPE_CIPHER_METH); 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(cp); 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst EVP_MD *EVP_get_digestbyname(const char *name) 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const EVP_MD *cp; 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project cp=(const EVP_MD *)OBJ_NAME_get(name,OBJ_NAME_TYPE_MD_METH); 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(cp); 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid EVP_cleanup(void) 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OBJ_NAME_cleanup(OBJ_NAME_TYPE_CIPHER_METH); 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OBJ_NAME_cleanup(OBJ_NAME_TYPE_MD_METH); 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* The above calls will only clean out the contents of the name 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project hash table, but not the hash table itself. The following line 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project does that part. -- Richard Levitte */ 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project OBJ_NAME_cleanup(-1); 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EVP_PBE_cleanup(); 132221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (obj_cleanup_defer == 2) 133221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 134221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom obj_cleanup_defer = 0; 135221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom OBJ_cleanup(); 136221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 137221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom OBJ_sigid_free(); 138221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 139221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 140221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromstruct doall_cipher 141221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 142221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom void *arg; 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom void (*fn)(const EVP_CIPHER *ciph, 144221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const char *from, const char *to, void *arg); 145221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom }; 146221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 147221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromstatic void do_all_cipher_fn(const OBJ_NAME *nm, void *arg) 148221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 149221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom struct doall_cipher *dc = arg; 150221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (nm->alias) 151221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc->fn(NULL, nm->name, nm->data, dc->arg); 152221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom else 153221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc->fn((const EVP_CIPHER *)nm->data, nm->name, NULL, dc->arg); 154221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 155221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 156221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid EVP_CIPHER_do_all(void (*fn)(const EVP_CIPHER *ciph, 157221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const char *from, const char *to, void *x), void *arg) 158221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 159221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom struct doall_cipher dc; 160221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc.fn = fn; 161221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc.arg = arg; 162221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom OBJ_NAME_do_all(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn, &dc); 163221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 164221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 165221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid EVP_CIPHER_do_all_sorted(void (*fn)(const EVP_CIPHER *ciph, 166221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const char *from, const char *to, void *x), void *arg) 167221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 168221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom struct doall_cipher dc; 169221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc.fn = fn; 170221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc.arg = arg; 171221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_CIPHER_METH, do_all_cipher_fn,&dc); 172221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 173221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 174221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromstruct doall_md 175221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 176221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom void *arg; 177221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom void (*fn)(const EVP_MD *ciph, 178221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const char *from, const char *to, void *arg); 179221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom }; 180221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 181221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromstatic void do_all_md_fn(const OBJ_NAME *nm, void *arg) 182221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 183221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom struct doall_md *dc = arg; 184221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (nm->alias) 185221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc->fn(NULL, nm->name, nm->data, dc->arg); 186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom else 187221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc->fn((const EVP_MD *)nm->data, nm->name, NULL, dc->arg); 188221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 189221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 190221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid EVP_MD_do_all(void (*fn)(const EVP_MD *md, 191221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const char *from, const char *to, void *x), void *arg) 192221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 193221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom struct doall_md dc; 194221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc.fn = fn; 195221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc.arg = arg; 196221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom OBJ_NAME_do_all(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc); 197221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 198221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 199221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid EVP_MD_do_all_sorted(void (*fn)(const EVP_MD *md, 200221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const char *from, const char *to, void *x), void *arg) 201221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom { 202221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom struct doall_md dc; 203221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc.fn = fn; 204221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom dc.arg = arg; 205221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom OBJ_NAME_do_all_sorted(OBJ_NAME_TYPE_MD_METH, do_all_md_fn, &dc); 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 207