comparison svr-kex.c @ 1318:10e2a7727253 coverity

merge coverity
author Matt Johnston <matt@ucc.asn.au>
date Fri, 22 Jul 2016 00:08:02 +0800
parents 750ec4ec4cbe
children 185c14fa504d 8747c2b19152
comparison
equal deleted inserted replaced
1286:7d02b83c61fd 1318:10e2a7727253
52 if (!ses.kexstate.recvkexinit) { 52 if (!ses.kexstate.recvkexinit) {
53 dropbear_exit("Premature kexdh_init message received"); 53 dropbear_exit("Premature kexdh_init message received");
54 } 54 }
55 55
56 switch (ses.newkeys->algo_kex->mode) { 56 switch (ses.newkeys->algo_kex->mode) {
57 #if DROPBEAR_NORMAL_DH
57 case DROPBEAR_KEX_NORMAL_DH: 58 case DROPBEAR_KEX_NORMAL_DH:
58 m_mp_init(&dh_e); 59 m_mp_init(&dh_e);
59 if (buf_getmpint(ses.payload, &dh_e) != DROPBEAR_SUCCESS) { 60 if (buf_getmpint(ses.payload, &dh_e) != DROPBEAR_SUCCESS) {
60 dropbear_exit("Bad kex value"); 61 dropbear_exit("Bad kex value");
61 } 62 }
62 break; 63 break;
64 #endif
65 #if DROPBEAR_ECDH
63 case DROPBEAR_KEX_ECDH: 66 case DROPBEAR_KEX_ECDH:
67 #endif
68 #if DROPBEAR_CURVE25519
64 case DROPBEAR_KEX_CURVE25519: 69 case DROPBEAR_KEX_CURVE25519:
65 #if defined(DROPBEAR_ECDH) || defined(DROPBEAR_CURVE25519) 70 #endif
71 #if DROPBEAR_ECDH || DROPBEAR_CURVE25519
66 ecdh_qs = buf_getstringbuf(ses.payload); 72 ecdh_qs = buf_getstringbuf(ses.payload);
67 #endif 73 break;
68 break; 74 #endif
69 } 75 }
70 if (ses.payload->pos != ses.payload->len) { 76 if (ses.payload->pos != ses.payload->len) {
71 dropbear_exit("Bad kex value"); 77 dropbear_exit("Bad kex value");
72 } 78 }
73 79
83 ses.requirenext = SSH_MSG_NEWKEYS; 89 ses.requirenext = SSH_MSG_NEWKEYS;
84 TRACE(("leave recv_msg_kexdh_init")) 90 TRACE(("leave recv_msg_kexdh_init"))
85 } 91 }
86 92
87 93
88 #ifdef DROPBEAR_DELAY_HOSTKEY 94 #if DROPBEAR_DELAY_HOSTKEY
89 95
90 static void fsync_parent_dir(const char* fn) { 96 static void fsync_parent_dir(const char* fn) {
91 #ifdef HAVE_LIBGEN_H 97 #ifdef HAVE_LIBGEN_H
92 char *fn_dir = m_strdup(fn); 98 char *fn_dir = m_strdup(fn);
93 char *dir = dirname(fn_dir); 99 char *dir = dirname(fn_dir);
118 return; 124 return;
119 } 125 }
120 126
121 switch (type) 127 switch (type)
122 { 128 {
123 #ifdef DROPBEAR_RSA 129 #if DROPBEAR_RSA
124 case DROPBEAR_SIGNKEY_RSA: 130 case DROPBEAR_SIGNKEY_RSA:
125 fn = RSA_PRIV_FILENAME; 131 fn = RSA_PRIV_FILENAME;
126 break; 132 break;
127 #endif 133 #endif
128 #ifdef DROPBEAR_DSS 134 #if DROPBEAR_DSS
129 case DROPBEAR_SIGNKEY_DSS: 135 case DROPBEAR_SIGNKEY_DSS:
130 fn = DSS_PRIV_FILENAME; 136 fn = DSS_PRIV_FILENAME;
131 break; 137 break;
132 #endif 138 #endif
133 #ifdef DROPBEAR_ECDSA 139 #if DROPBEAR_ECDSA
134 case DROPBEAR_SIGNKEY_ECDSA_NISTP256: 140 case DROPBEAR_SIGNKEY_ECDSA_NISTP256:
135 case DROPBEAR_SIGNKEY_ECDSA_NISTP384: 141 case DROPBEAR_SIGNKEY_ECDSA_NISTP384:
136 case DROPBEAR_SIGNKEY_ECDSA_NISTP521: 142 case DROPBEAR_SIGNKEY_ECDSA_NISTP521:
137 fn = ECDSA_PRIV_FILENAME; 143 fn = ECDSA_PRIV_FILENAME;
138 break; 144 break;
207 TRACE(("enter send_msg_kexdh_reply")) 213 TRACE(("enter send_msg_kexdh_reply"))
208 214
209 /* we can start creating the kexdh_reply packet */ 215 /* we can start creating the kexdh_reply packet */
210 CHECKCLEARTOWRITE(); 216 CHECKCLEARTOWRITE();
211 217
212 #ifdef DROPBEAR_DELAY_HOSTKEY 218 #if DROPBEAR_DELAY_HOSTKEY
213 if (svr_opts.delay_hostkey) 219 if (svr_opts.delay_hostkey)
214 { 220 {
215 svr_ensure_hostkey(); 221 svr_ensure_hostkey();
216 } 222 }
217 #endif 223 #endif
219 buf_putbyte(ses.writepayload, SSH_MSG_KEXDH_REPLY); 225 buf_putbyte(ses.writepayload, SSH_MSG_KEXDH_REPLY);
220 buf_put_pub_key(ses.writepayload, svr_opts.hostkey, 226 buf_put_pub_key(ses.writepayload, svr_opts.hostkey,
221 ses.newkeys->algo_hostkey); 227 ses.newkeys->algo_hostkey);
222 228
223 switch (ses.newkeys->algo_kex->mode) { 229 switch (ses.newkeys->algo_kex->mode) {
230 #if DROPBEAR_NORMAL_DH
224 case DROPBEAR_KEX_NORMAL_DH: 231 case DROPBEAR_KEX_NORMAL_DH:
225 { 232 {
226 struct kex_dh_param * dh_param = gen_kexdh_param(); 233 struct kex_dh_param * dh_param = gen_kexdh_param();
227 kexdh_comb_key(dh_param, dh_e, svr_opts.hostkey); 234 kexdh_comb_key(dh_param, dh_e, svr_opts.hostkey);
228 235
229 /* put f */ 236 /* put f */
230 buf_putmpint(ses.writepayload, &dh_param->pub); 237 buf_putmpint(ses.writepayload, &dh_param->pub);
231 free_kexdh_param(dh_param); 238 free_kexdh_param(dh_param);
232 } 239 }
233 break; 240 break;
241 #endif
242 #if DROPBEAR_ECDH
234 case DROPBEAR_KEX_ECDH: 243 case DROPBEAR_KEX_ECDH:
235 #ifdef DROPBEAR_ECDH
236 { 244 {
237 struct kex_ecdh_param *ecdh_param = gen_kexecdh_param(); 245 struct kex_ecdh_param *ecdh_param = gen_kexecdh_param();
238 kexecdh_comb_key(ecdh_param, ecdh_qs, svr_opts.hostkey); 246 kexecdh_comb_key(ecdh_param, ecdh_qs, svr_opts.hostkey);
239 247
240 buf_put_ecc_raw_pubkey_string(ses.writepayload, &ecdh_param->key); 248 buf_put_ecc_raw_pubkey_string(ses.writepayload, &ecdh_param->key);
241 free_kexecdh_param(ecdh_param); 249 free_kexecdh_param(ecdh_param);
242 } 250 }
243 #endif 251 break;
244 break; 252 #endif
253 #if DROPBEAR_CURVE25519
245 case DROPBEAR_KEX_CURVE25519: 254 case DROPBEAR_KEX_CURVE25519:
246 #ifdef DROPBEAR_CURVE25519
247 { 255 {
248 struct kex_curve25519_param *param = gen_kexcurve25519_param(); 256 struct kex_curve25519_param *param = gen_kexcurve25519_param();
249 kexcurve25519_comb_key(param, ecdh_qs, svr_opts.hostkey); 257 kexcurve25519_comb_key(param, ecdh_qs, svr_opts.hostkey);
250 buf_putstring(ses.writepayload, (const char*)param->pub, CURVE25519_LEN); 258 buf_putstring(ses.writepayload, (const char*)param->pub, CURVE25519_LEN);
251 free_kexcurve25519_param(param); 259 free_kexcurve25519_param(param);
252 } 260 }
253 #endif 261 break;
254 break; 262 #endif
255 } 263 }
256 264
257 /* calc the signature */ 265 /* calc the signature */
258 buf_put_sign(ses.writepayload, svr_opts.hostkey, 266 buf_put_sign(ses.writepayload, svr_opts.hostkey,
259 ses.newkeys->algo_hostkey, ses.hash); 267 ses.newkeys->algo_hostkey, ses.hash);