Mercurial > dropbear
annotate crypto_desc.c @ 1715:3974f087d9c0
Disallow leading lines before the ident for server (#102)
Per RFC4253 4.2 clients must be able to process other lines of data
before the version string, server behavior is not defined neither
with MUST/SHOULD nor with MAY.
If server process up to 50 lines too - it may cause too long hanging
session with invalid/evil client that consume host resources and
potentially may lead to DDoS on poor embedded boxes.
Let's require first line from client to be version string and fail
early if it's not - matches both RFC and real OpenSSH behavior.
author | Vladislav Grishenko <themiron@users.noreply.github.com> |
---|---|
date | Mon, 15 Jun 2020 18:22:18 +0500 |
parents | 750ec4ec4cbe |
children | 34d9d3c022ce |
rev | line source |
---|---|
766 | 1 #include "includes.h" |
2 #include "dbutil.h" | |
3 #include "crypto_desc.h" | |
4 #include "ltc_prng.h" | |
767
e465ed10c51d
Be safer with how we handle ltc_ecc_sets[] (particularly with
Matt Johnston <matt@ucc.asn.au>
parents:
766
diff
changeset
|
5 #include "ecc.h" |
766 | 6 |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
7 #if DROPBEAR_LTC_PRNG |
766 | 8 int dropbear_ltc_prng = -1; |
9 #endif | |
10 | |
11 | |
12 /* Register the compiled in ciphers. | |
13 * This should be run before using any of the ciphers/hashes */ | |
14 void crypto_init() { | |
15 | |
16 const struct ltc_cipher_descriptor *regciphers[] = { | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
17 #if DROPBEAR_AES |
766 | 18 &aes_desc, |
19 #endif | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
20 #if DROPBEAR_BLOWFISH |
766 | 21 &blowfish_desc, |
22 #endif | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
23 #if DROPBEAR_TWOFISH |
766 | 24 &twofish_desc, |
25 #endif | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
26 #if DROPBEAR_3DES |
766 | 27 &des3_desc, |
28 #endif | |
29 NULL | |
30 }; | |
31 | |
32 const struct ltc_hash_descriptor *reghashes[] = { | |
33 /* we need sha1 for hostkey stuff regardless */ | |
34 &sha1_desc, | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
35 #if DROPBEAR_MD5_HMAC |
766 | 36 &md5_desc, |
37 #endif | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
38 #if DROPBEAR_SHA256 |
766 | 39 &sha256_desc, |
40 #endif | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
41 #if DROPBEAR_SHA384 |
766 | 42 &sha384_desc, |
43 #endif | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
44 #if DROPBEAR_SHA512 |
766 | 45 &sha512_desc, |
46 #endif | |
47 NULL | |
48 }; | |
49 int i; | |
50 | |
51 for (i = 0; regciphers[i] != NULL; i++) { | |
52 if (register_cipher(regciphers[i]) == -1) { | |
53 dropbear_exit("Error registering crypto"); | |
54 } | |
55 } | |
56 | |
57 for (i = 0; reghashes[i] != NULL; i++) { | |
58 if (register_hash(reghashes[i]) == -1) { | |
59 dropbear_exit("Error registering crypto"); | |
60 } | |
61 } | |
62 | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
63 #if DROPBEAR_LTC_PRNG |
766 | 64 dropbear_ltc_prng = register_prng(&dropbear_prng_desc); |
65 if (dropbear_ltc_prng == -1) { | |
66 dropbear_exit("Error registering crypto"); | |
67 } | |
68 #endif | |
69 | |
1295
750ec4ec4cbe
Convert #ifdef to #if, other build changes
Matt Johnston <matt@ucc.asn.au>
parents:
767
diff
changeset
|
70 #if DROPBEAR_ECC |
766 | 71 ltc_mp = ltm_desc; |
767
e465ed10c51d
Be safer with how we handle ltc_ecc_sets[] (particularly with
Matt Johnston <matt@ucc.asn.au>
parents:
766
diff
changeset
|
72 dropbear_ecc_fill_dp(); |
766 | 73 #endif |
74 } | |
75 |