1 /* 2 * Dropbear - a SSH2 server 3 * 4 * Copyright (c) 2002,2003 Matt Johnston 5 * All rights reserved. 6 * 7 * Permission is hereby granted, free of charge, to any person obtaining a copy 8 * of this software and associated documentation files (the "Software"), to deal 9 * in the Software without restriction, including without limitation the rights 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 * copies of the Software, and to permit persons to whom the Software is 12 * furnished to do so, subject to the following conditions: 13 * 14 * The above copyright notice and this permission notice shall be included in 15 * all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 * SOFTWARE. */ 24 25 #ifndef _ALGO_H_ 26 27 #define _ALGO_H_ 28 29 #include "includes.h" 30 #include "buffer.h" 31 32 struct Algo_Type { 33 34 unsigned char *name; /* identifying name */ 35 char val; /* a value for this cipher, or -1 for invalid */ 36 void *data; /* algorithm specific data */ 37 unsigned usable : 1; /* whether we can use this algorithm */ 38 39 }; 40 41 typedef struct Algo_Type algo_type; 42 43 /* lists mapping ssh types of algorithms to internal values */ 44 extern algo_type sshkex[]; 45 extern algo_type sshhostkey[]; 46 extern algo_type sshciphers[]; 47 extern algo_type sshhashes[]; 48 extern algo_type sshcompress[]; 49 50 extern const struct dropbear_cipher dropbear_nocipher; 51 extern const struct dropbear_hash dropbear_nohash; 52 53 struct dropbear_cipher { 54 const struct ltc_cipher_descriptor *cipherdesc; 55 unsigned long keysize; 56 unsigned char blocksize; 57 }; 58 59 struct dropbear_hash { 60 const struct ltc_hash_descriptor *hashdesc; 61 unsigned long keysize; 62 unsigned char hashsize; 63 }; 64 65 void crypto_init(); 66 int have_algo(char* algo, size_t algolen, algo_type algos[]); 67 void buf_put_algolist(buffer * buf, algo_type localalgos[]); 68 69 algo_type * svr_buf_match_algo(buffer* buf, algo_type localalgos[], 70 int *goodguess); 71 algo_type * cli_buf_match_algo(buffer* buf, algo_type localalgos[], 72 int *goodguess); 73 74 #endif /* _ALGO_H_ */ 75