]> git.ipfire.org Git - thirdparty/gnutls.git/commitdiff
updated prototype of _gnutls_mpi_modm
authorNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 26 Jan 2014 08:16:36 +0000 (09:16 +0100)
committerNikos Mavrogiannopoulos <nmav@gnutls.org>
Sun, 26 Jan 2014 08:16:36 +0000 (09:16 +0100)
lib/auth/srp.c
lib/crypto-backend.h
lib/gnutls_mpi.c
lib/nettle/mpi.c
lib/nettle/pk.c

index 3966b0b9b241fe6f4d55a566759bd83971ffcdae..7e579e5cc02486b5e39b2bfde14ab35d20512dd1 100644 (file)
@@ -71,10 +71,14 @@ inline static int check_param_mod_n(bigint_t a, bigint_t n, int is_a)
        int ret, err = 0;
        bigint_t r;
 
-       r = _gnutls_mpi_modm(NULL, a, n);
-       if (r == NULL) {
-               gnutls_assert();
-               return GNUTLS_E_MEMORY_ERROR;
+       ret = _gnutls_mpi_init(&r);
+       if (ret < 0)
+               return gnutls_assert_val(ret);
+
+       ret = _gnutls_mpi_modm(r, a, n);
+       if (ret < 0) {
+               _gnutls_mpi_release(&r);
+               return gnutls_assert_val(ret);
        }
 
        ret = _gnutls_mpi_cmp_ui(r, 0);
index 25fdeb07e35659f55bb9e88bbe329ceb0225607a..ff798b581c74dc4aa7cab21cb119ec22f9846862 100644 (file)
@@ -114,7 +114,7 @@ typedef struct gnutls_crypto_bigint {
        /* as bigint_cmp */
        int (*bigint_cmp_ui) (const bigint_t m1, unsigned long m2);
        /* r = a % b */
-       bigint_t (*bigint_modm) (bigint_t r, const bigint_t a, const bigint_t b);
+       int (*bigint_modm) (bigint_t r, const bigint_t a, const bigint_t b);
        /* a = b -> ret == a */
        bigint_t (*bigint_set) (bigint_t a, const bigint_t b);
        /* a = b -> ret == a */
index 39560c4b1c1509564d76c3864800a900fb725bbf..44dbc9d5e033fa598abf6074c5d210af2e9d19b0 100644 (file)
@@ -72,7 +72,11 @@ _gnutls_mpi_random_modp(bigint_t r, bigint_t p,
                goto cleanup;
        }
        
-       _gnutls_mpi_modm(tmp, tmp, p);
+       ret = _gnutls_mpi_modm(tmp, tmp, p);
+       if (ret < 0) {
+               gnutls_assert();
+               goto cleanup;
+       }
 
        if (_gnutls_mpi_cmp_ui(tmp, 0) == 0)
                _gnutls_mpi_add_ui(tmp, tmp, 1);
index c4645ac1f5e805de88227e54a41cce8d2d55604b..8cac69b36362f64ac7235c6351543f736dbb1d9a 100644 (file)
@@ -128,6 +128,8 @@ static int wrap_nettle_mpi_init_multi(bigint_t *w, ...)
 fail:
        mpz_clear(TOMPZ(*w));
        gnutls_free(*w);
+       *w = NULL;
+
        va_start(args, w);
        
        do {
@@ -135,6 +137,7 @@ fail:
                if (next != last_failed) {
                        mpz_clear(TOMPZ(*next));
                        gnutls_free(*next);
+                       *next = NULL;
                }
        } while(next != last_failed);
        
@@ -256,19 +259,11 @@ static void wrap_nettle_mpi_clear(bigint_t a)
               TOMPZ(a)[0]._mp_alloc * sizeof(mp_limb_t));
 }
 
-static bigint_t wrap_nettle_mpi_modm(bigint_t r, const bigint_t a, const bigint_t b)
+static int wrap_nettle_mpi_modm(bigint_t r, const bigint_t a, const bigint_t b)
 {
-int ret;
-
-       if (r == NULL) {
-               ret = wrap_nettle_mpi_init(&r);
-               if (ret < 0)
-                       return NULL;
-       }
-
        mpz_mod(TOMPZ(r), TOMPZ(a), TOMPZ(b));
        
-       return r;
+       return 0;
 }
 
 static bigint_t
index 72407fa37b14fef74b1cc61fbab7754decc3a983..515380b421586710e7b946f8efd6754d9edcf696 100644 (file)
@@ -187,14 +187,23 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo,
        switch (algo) {
        case GNUTLS_PK_DH: {
                bigint_t f, x, prime;
-               bigint_t k = NULL, ff;
+               bigint_t k = NULL, ff = NULL;
                unsigned int bits;
 
                f = pub->params[DH_Y];
                x = priv->params[DH_X];
                prime = priv->params[DH_P];
 
-               ff = _gnutls_mpi_modm(NULL, f, prime);
+               ret = _gnutls_mpi_init_multi(&k, &ff, NULL);
+               if (ret < 0)
+                       return gnutls_assert_val(ret);
+
+               ret = _gnutls_mpi_modm(ff, f, prime);
+               if (ret < 0) {
+                       gnutls_assert();
+                       goto dh_cleanup;
+               }
+
                _gnutls_mpi_add_ui(ff, ff, 1);
 
                /* check if f==0,1,p-1. 
@@ -215,11 +224,6 @@ static int _wrap_nettle_pk_derive(gnutls_pk_algorithm_t algo,
                        goto dh_cleanup;
                }
 
-               ret = _gnutls_mpi_init(&k);
-               if (ret < 0) {
-                       gnutls_assert();
-                       goto dh_cleanup;
-               }
 
                _gnutls_mpi_powm(k, f, x, prime);
 
@@ -1125,7 +1129,7 @@ wrap_nettle_pk_verify_params(gnutls_pk_algorithm_t algo,
                                    gnutls_assert_val
                                    (GNUTLS_E_INVALID_REQUEST);
 
-                       ret = _gnutls_mpi_init(&t1);
+                       ret = _gnutls_mpi_init_multi(&t1, &t2, NULL);
                        if (ret < 0)
                                return
                                    gnutls_assert_val(ret);
@@ -1154,8 +1158,8 @@ wrap_nettle_pk_verify_params(gnutls_pk_algorithm_t algo,
                        /* [RSA_PRIME1] = d % p-1, [RSA_PRIME2] = d % q-1 */
                        _gnutls_mpi_sub_ui(t1, params->params[RSA_PRIME1],
                                           1);
-                       t2 = _gnutls_mpi_modm(NULL, params->params[RSA_PRIV], t1);
-                       if (t2 == NULL) {
+                       ret = _gnutls_mpi_modm(t2, params->params[RSA_PRIV], t1);
+                       if (ret < 0) {
                                ret =
                                    gnutls_assert_val
                                    (GNUTLS_E_MEMORY_ERROR);
@@ -1172,10 +1176,9 @@ wrap_nettle_pk_verify_params(gnutls_pk_algorithm_t algo,
 
                        _gnutls_mpi_sub_ui(t1, params->params[RSA_PRIME2],
                                           1);
-                       zrelease_mpi_key(&t2);
 
-                       t2 = _gnutls_mpi_modm(NULL, params->params[RSA_PRIV], t1);
-                       if (t2 == NULL) {
+                       ret = _gnutls_mpi_modm(t2, params->params[RSA_PRIV], t1);
+                       if (ret < 0) {
                                ret =
                                    gnutls_assert_val
                                    (GNUTLS_E_MEMORY_ERROR);
@@ -1315,28 +1318,36 @@ static int calc_rsa_exp(gnutls_pk_params_st * params)
                gnutls_assert();
                return GNUTLS_E_INTERNAL_ERROR;
        }
+       
+       params->params[6] = params->params[7] = NULL;
 
-       ret = _gnutls_mpi_init(&tmp);
+       ret = _gnutls_mpi_init_multi(&tmp, &params->params[6], &params->params[7], NULL);
        if (ret < 0)
                return gnutls_assert_val(ret);
 
        /* [6] = d % p-1, [7] = d % q-1 */
        _gnutls_mpi_sub_ui(tmp, params->params[3], 1);
-       params->params[6] =
-           _gnutls_mpi_modm(NULL, params->params[2] /*d */ , tmp);
+       ret =
+           _gnutls_mpi_modm(params->params[6], params->params[2] /*d */ , tmp);
+       if (ret < 0)
+               goto fail;
 
        _gnutls_mpi_sub_ui(tmp, params->params[4], 1);
-       params->params[7] =
-           _gnutls_mpi_modm(NULL, params->params[2] /*d */ , tmp);
+       ret =
+           _gnutls_mpi_modm(params->params[7], params->params[2] /*d */ , tmp);
+       if (ret < 0)
+               goto fail;
 
        zrelease_mpi_key(&tmp);
 
-       if (params->params[7] == NULL || params->params[6] == NULL) {
-               gnutls_assert();
-               return GNUTLS_E_MEMORY_ERROR;
-       }
-
        return 0;
+
+fail:
+       zrelease_mpi_key(&tmp);
+       zrelease_mpi_key(&params->params[6]);
+       zrelease_mpi_key(&params->params[7]);
+
+       return ret;
 }