# HG changeset patch # User Matt Johnston # Date 1369318696 -28800 # Node ID 724c3e0c8734bdd4a5b1ab1afb3ec02a856b5992 # Parent 34b73c9d8aa3c1272306d3b3bbad67e69a467099 Add m_mp_alloc_init_multi() helper diff -r 34b73c9d8aa3 -r 724c3e0c8734 bignum.c --- a/bignum.c Tue May 21 13:44:48 2013 +0800 +++ b/bignum.c Thu May 23 22:18:16 2013 +0800 @@ -52,6 +52,22 @@ va_end(args); } +void m_mp_alloc_init_multi(mp_int **mp, ...) +{ + mp_int** cur_arg = mp; + va_list args; + + va_start(args, mp); /* init args to next argument from caller */ + while (cur_arg != NULL) { + *cur_arg = m_malloc(sizeof(mp_int)); + if (mp_init(*cur_arg) != MP_OKAY) { + dropbear_exit("Mem alloc error"); + } + cur_arg = va_arg(args, mp_int**); + } + va_end(args); +} + void bytes_to_mp(mp_int *mp, const unsigned char* bytes, unsigned int len) { if (mp_read_unsigned_bin(mp, (unsigned char*)bytes, len) != MP_OKAY) { diff -r 34b73c9d8aa3 -r 724c3e0c8734 bignum.h --- a/bignum.h Tue May 21 13:44:48 2013 +0800 +++ b/bignum.h Thu May 23 22:18:16 2013 +0800 @@ -30,6 +30,7 @@ void m_mp_init(mp_int *mp); void m_mp_init_multi(mp_int *mp, ...) ATTRIB_SENTINEL; +void m_mp_alloc_init_multi(mp_int **mp, ...) ATTRIB_SENTINEL; void bytes_to_mp(mp_int *mp, const unsigned char* bytes, unsigned int len); void hash_process_mp(const struct ltc_hash_descriptor *hash_desc, hash_state *hs, mp_int *mp); diff -r 34b73c9d8aa3 -r 724c3e0c8734 common-kex.c --- a/common-kex.c Tue May 21 13:44:48 2013 +0800 +++ b/common-kex.c Thu May 23 22:18:16 2013 +0800 @@ -633,8 +633,7 @@ } /* K = e^y mod p = f^x mod p */ - ses.dh_K = (mp_int*)m_malloc(sizeof(mp_int)); - m_mp_init(ses.dh_K); + m_mp_alloc_init_multi(&ses.dh_K, NULL); if (mp_exptmod(dh_pub_them, ¶m->priv, &dh_p, ses.dh_K) != MP_OKAY) { dropbear_exit("Diffie-Hellman error"); } diff -r 34b73c9d8aa3 -r 724c3e0c8734 dss.c --- a/dss.c Tue May 21 13:44:48 2013 +0800 +++ b/dss.c Thu May 23 22:18:16 2013 +0800 @@ -47,11 +47,7 @@ TRACE(("enter buf_get_dss_pub_key")) dropbear_assert(key != NULL); - key->p = m_malloc(sizeof(mp_int)); - key->q = m_malloc(sizeof(mp_int)); - key->g = m_malloc(sizeof(mp_int)); - key->y = m_malloc(sizeof(mp_int)); - m_mp_init_multi(key->p, key->q, key->g, key->y, NULL); + m_mp_alloc_init_multi(&key->p, &key->q, &key->g, &key->y, NULL); key->x = NULL; buf_incrpos(buf, 4+SSH_SIGNKEY_DSS_LEN); /* int + "ssh-dss" */ @@ -87,8 +83,7 @@ return DROPBEAR_FAILURE; } - key->x = m_malloc(sizeof(mp_int)); - m_mp_init(key->x); + m_mp_alloc_init_multi(&key->x, NULL); ret = buf_getmpint(buf, key->x); if (ret == DROPBEAR_FAILURE) { m_free(key->x); diff -r 34b73c9d8aa3 -r 724c3e0c8734 ecc.c --- a/ecc.c Tue May 21 13:44:48 2013 +0800 +++ b/ecc.c Thu May 23 22:18:16 2013 +0800 @@ -72,11 +72,8 @@ ecc_key * new_ecc_key(void) { ecc_key *key = m_malloc(sizeof(*key)); - key->pubkey.x = m_malloc(sizeof(mp_int)); - key->pubkey.y = m_malloc(sizeof(mp_int)); - key->pubkey.z = m_malloc(sizeof(mp_int)); - key->k = m_malloc(sizeof(mp_int)); - m_mp_init_multi(key->pubkey.x, key->pubkey.y, key->pubkey.z, key->k, NULL); + m_mp_alloc_init_multi(&key->pubkey.x, &key->pubkey.y, + &key->pubkey.z, &key->k, NULL); return key; } @@ -92,7 +89,7 @@ t1 = m_malloc(sizeof(mp_int)); t2 = m_malloc(sizeof(mp_int)); - m_mp_init_multi(prime, b, t1, t2, NULL); + m_mp_alloc_init_multi(&prime, &b, &t1, &t2, NULL); /* load prime and b */ if ((err = mp_read_radix(prime, key->dp->prime, 16)) != CRYPT_OK) { goto error; } diff -r 34b73c9d8aa3 -r 724c3e0c8734 gendss.c --- a/gendss.c Tue May 21 13:44:48 2013 +0800 +++ b/gendss.c Thu May 23 22:18:16 2013 +0800 @@ -53,12 +53,7 @@ key = m_malloc(sizeof(*key)); - key->p = (mp_int*)m_malloc(sizeof(mp_int)); - key->q = (mp_int*)m_malloc(sizeof(mp_int)); - key->g = (mp_int*)m_malloc(sizeof(mp_int)); - key->y = (mp_int*)m_malloc(sizeof(mp_int)); - key->x = (mp_int*)m_malloc(sizeof(mp_int)); - m_mp_init_multi(key->p, key->q, key->g, key->y, key->x, NULL); + m_mp_alloc_init_multi(&key->p, &key->q, &key->g, &key->y, &key->x, NULL); getq(key); getp(key, size/8); diff -r 34b73c9d8aa3 -r 724c3e0c8734 genrsa.c --- a/genrsa.c Tue May 21 13:44:48 2013 +0800 +++ b/genrsa.c Thu May 23 22:18:16 2013 +0800 @@ -50,15 +50,8 @@ } key = m_malloc(sizeof(*key)); - - key->e = (mp_int*)m_malloc(sizeof(mp_int)); - key->n = (mp_int*)m_malloc(sizeof(mp_int)); - key->d = (mp_int*)m_malloc(sizeof(mp_int)); - key->p = (mp_int*)m_malloc(sizeof(mp_int)); - key->q = (mp_int*)m_malloc(sizeof(mp_int)); - - m_mp_init_multi(key->e, key->n, key->d, key->p, key->q, - &pminus, &lcm, &qminus, NULL); + m_mp_alloc_init_multi(&key->e, &key->n, &key->d, &key->p, &key->q, NULL); + m_mp_init_multi(&pminus, &lcm, &qminus, NULL); if (mp_set_int(key->e, RSA_E) != MP_OKAY) { fprintf(stderr, "RSA generation failed\n"); diff -r 34b73c9d8aa3 -r 724c3e0c8734 rsa.c --- a/rsa.c Tue May 21 13:44:48 2013 +0800 +++ b/rsa.c Thu May 23 22:18:16 2013 +0800 @@ -50,9 +50,7 @@ int ret = DROPBEAR_FAILURE; TRACE(("enter buf_get_rsa_pub_key")) dropbear_assert(key != NULL); - key->e = m_malloc(sizeof(mp_int)); - key->n = m_malloc(sizeof(mp_int)); - m_mp_init_multi(key->e, key->n, NULL); + m_mp_alloc_init_multi(&key->e, &key->n, NULL); key->d = NULL; key->p = NULL; key->q = NULL; @@ -98,8 +96,7 @@ key->p = NULL; key->q = NULL; - key->d = m_malloc(sizeof(mp_int)); - m_mp_init(key->d); + m_mp_alloc_init_multi(&key->d); if (buf_getmpint(buf, key->d) == DROPBEAR_FAILURE) { TRACE(("leave buf_get_rsa_priv_key: d: ret == DROPBEAR_FAILURE")) goto out; @@ -108,9 +105,7 @@ if (buf->pos == buf->len) { /* old Dropbear private keys didn't keep p and q, so we will ignore them*/ } else { - key->p = m_malloc(sizeof(mp_int)); - key->q = m_malloc(sizeof(mp_int)); - m_mp_init_multi(key->p, key->q, NULL); + m_mp_alloc_init_multi(&key->p, &key->q, NULL); if (buf_getmpint(buf, key->p) == DROPBEAR_FAILURE) { TRACE(("leave buf_get_rsa_priv_key: p: ret == DROPBEAR_FAILURE"))