1 #include "includes.h"
2 #include "dbutil.h"
3 #include "crypto_desc.h"
4 #include "ltc_prng.h"
5 #include "ecc.h"
6 #include "dbrandom.h"
7
8 #if DROPBEAR_LTC_PRNG
9 int dropbear_ltc_prng = -1;
10 #endif
11
12 /* Wrapper for libtommath */
dropbear_rand_source(void * out,size_t size)13 static mp_err dropbear_rand_source(void* out, size_t size) {
14 genrandom((unsigned char*)out, (unsigned int)size);
15 return MP_OKAY;
16 }
17
18
19 /* Register the compiled in ciphers.
20 * This should be run before using any of the ciphers/hashes */
crypto_init()21 void crypto_init() {
22
23 const struct ltc_cipher_descriptor *regciphers[] = {
24 #if DROPBEAR_AES
25 &aes_desc,
26 #endif
27 #if DROPBEAR_BLOWFISH
28 &blowfish_desc,
29 #endif
30 #if DROPBEAR_TWOFISH
31 &twofish_desc,
32 #endif
33 #if DROPBEAR_3DES
34 &des3_desc,
35 #endif
36 NULL
37 };
38
39 const struct ltc_hash_descriptor *reghashes[] = {
40 /* we need sha1 for hostkey stuff regardless */
41 &sha1_desc,
42 #if DROPBEAR_MD5_HMAC
43 &md5_desc,
44 #endif
45 #if DROPBEAR_SHA256
46 &sha256_desc,
47 #endif
48 #if DROPBEAR_SHA384
49 &sha384_desc,
50 #endif
51 #if DROPBEAR_SHA512
52 &sha512_desc,
53 #endif
54 NULL
55 };
56 int i;
57
58 for (i = 0; regciphers[i] != NULL; i++) {
59 if (register_cipher(regciphers[i]) == -1) {
60 dropbear_exit("Error registering crypto");
61 }
62 }
63
64 for (i = 0; reghashes[i] != NULL; i++) {
65 if (register_hash(reghashes[i]) == -1) {
66 dropbear_exit("Error registering crypto");
67 }
68 }
69
70 #if DROPBEAR_LTC_PRNG
71 dropbear_ltc_prng = register_prng(&dropbear_prng_desc);
72 if (dropbear_ltc_prng == -1) {
73 dropbear_exit("Error registering crypto");
74 }
75 #endif
76
77 mp_rand_source(dropbear_rand_source);
78
79 #if DROPBEAR_ECC
80 ltc_mp = ltm_desc;
81 dropbear_ecc_fill_dp();
82 #endif
83 }
84
85