comparison common-kex.c @ 342:3e098639b05f

From Erik Hovland - Check for valid cipher independently to starting encryption - Use failure-checking m_mp_init for initialising mpint value
author Matt Johnston <matt@ucc.asn.au>
date Fri, 07 Jul 2006 09:28:32 +0000
parents 63601217f5ab
children e66eec4dcba7 b895f91c2ee6
comparison
equal deleted inserted replaced
341:2eb5a8514905 342:3e098639b05f
260 unsigned char *trans_IV, *trans_key, *recv_IV, *recv_key; 260 unsigned char *trans_IV, *trans_key, *recv_IV, *recv_key;
261 261
262 hash_state hs; 262 hash_state hs;
263 unsigned int C2S_keysize, S2C_keysize; 263 unsigned int C2S_keysize, S2C_keysize;
264 char mactransletter, macrecvletter; /* Client or server specific */ 264 char mactransletter, macrecvletter; /* Client or server specific */
265 int recv_cipher = 0, trans_cipher = 0;
265 266
266 TRACE(("enter gen_new_keys")) 267 TRACE(("enter gen_new_keys"))
267 /* the dh_K and hash are the start of all hashes, we make use of that */ 268 /* the dh_K and hash are the start of all hashes, we make use of that */
268 269
269 sha1_init(&hs); 270 sha1_init(&hs);
296 hashkeys(C2S_IV, SHA1_HASH_SIZE, &hs, 'A'); 297 hashkeys(C2S_IV, SHA1_HASH_SIZE, &hs, 'A');
297 hashkeys(S2C_IV, SHA1_HASH_SIZE, &hs, 'B'); 298 hashkeys(S2C_IV, SHA1_HASH_SIZE, &hs, 'B');
298 hashkeys(C2S_key, C2S_keysize, &hs, 'C'); 299 hashkeys(C2S_key, C2S_keysize, &hs, 'C');
299 hashkeys(S2C_key, S2C_keysize, &hs, 'D'); 300 hashkeys(S2C_key, S2C_keysize, &hs, 'D');
300 301
301 if (cbc_start( 302 recv_cipher = find_cipher(ses.newkeys->recv_algo_crypt->cipherdesc->name);
302 find_cipher(ses.newkeys->recv_algo_crypt->cipherdesc->name), 303 if (recv_cipher < 0)
303 recv_IV, recv_key, 304 dropbear_exit("crypto error");
305
306 if (cbc_start(recv_cipher, recv_IV, recv_key,
304 ses.newkeys->recv_algo_crypt->keysize, 0, 307 ses.newkeys->recv_algo_crypt->keysize, 0,
305 &ses.newkeys->recv_symmetric_struct) != CRYPT_OK) { 308 &ses.newkeys->recv_symmetric_struct) != CRYPT_OK) {
306 dropbear_exit("crypto error"); 309 dropbear_exit("crypto error");
307 } 310 }
308 311 trans_cipher = find_cipher(ses.newkeys->trans_algo_crypt->cipherdesc->name);
309 if (cbc_start( 312 if (trans_cipher < 0)
310 find_cipher(ses.newkeys->trans_algo_crypt->cipherdesc->name), 313 dropbear_exit("crypto error");
311 trans_IV, trans_key, 314
315 if (cbc_start(trans_cipher, trans_IV, trans_key,
312 ses.newkeys->trans_algo_crypt->keysize, 0, 316 ses.newkeys->trans_algo_crypt->keysize, 0,
313 &ses.newkeys->trans_symmetric_struct) != CRYPT_OK) { 317 &ses.newkeys->trans_symmetric_struct) != CRYPT_OK) {
314 dropbear_exit("crypto error"); 318 dropbear_exit("crypto error");
315 } 319 }
316 320
515 mp_int dh_p; 519 mp_int dh_p;
516 mp_int *dh_e = NULL, *dh_f = NULL; 520 mp_int *dh_e = NULL, *dh_f = NULL;
517 hash_state hs; 521 hash_state hs;
518 522
519 /* read the prime and generator*/ 523 /* read the prime and generator*/
520 mp_init(&dh_p); 524 m_mp_init(&dh_p);
521 bytes_to_mp(&dh_p, dh_p_val, DH_P_LEN); 525 bytes_to_mp(&dh_p, dh_p_val, DH_P_LEN);
522 526
523 /* Check that dh_pub_them (dh_e or dh_f) is in the range [1, p-1] */ 527 /* Check that dh_pub_them (dh_e or dh_f) is in the range [1, p-1] */
524 if (mp_cmp(dh_pub_them, &dh_p) != MP_LT 528 if (mp_cmp(dh_pub_them, &dh_p) != MP_LT
525 || mp_cmp_d(dh_pub_them, 0) != MP_GT) { 529 || mp_cmp_d(dh_pub_them, 0) != MP_GT) {