return max;
}
-#ifdef ENABLE_FIPS140
-# define zeroize_temp_key(x, size) memset(x, 0, size)
-# define zrelease_temp_mpi_key(mpi) if (*mpi!=NULL) { \
+#define zrelease_mpi_key(mpi) if (*mpi!=NULL) { \
_gnutls_mpi_clear(*mpi); \
_gnutls_mpi_release(mpi); \
}
+
+#ifdef ENABLE_FIPS140
+# define zeroize_temp_key(x, size) memset(x, 0, size)
+# define zrelease_temp_mpi_key zrelease_mpi_key
#else
# define zeroize_temp_key(x, size)
# define zrelease_temp_mpi_key(mpi) _gnutls_mpi_release(mpi)
#endif
+
#endif /* GNUTLS_INT_H */
_gnutls_rnd(GNUTLS_RND_RANDOM, data, length);
}
+static void
+ecc_scalar_zclear (struct ecc_scalar *s)
+{
+ memset(s->p, 0, ecc_size(s->ecc)*sizeof(mp_limb_t));
+ ecc_scalar_clear(s);
+}
+
+static void
+ecc_point_zclear (struct ecc_point *p)
+{
+ memset(p->p, 0, 2*ecc_size(p->ecc)*sizeof(mp_limb_t));
+ ecc_point_clear(p);
+}
+
+
static void
_dsa_params_to_pubkey(const gnutls_pk_params_st * pk_params,
struct dsa_public_key *pub)
ecc_cleanup:
ecc_point_clear(&ecc_pub);
- ecc_scalar_clear(&ecc_priv);
+ ecc_scalar_zclear(&ecc_priv);
if (ret < 0)
goto cleanup;
break;
&sig.s);
dsa_signature_clear(&sig);
- ecc_scalar_clear(&priv);
+ ecc_scalar_zclear(&priv);
if (ret < 0) {
gnutls_assert();
_gnutls_mpi_sub_ui(t1, params->params[RSA_PRIME2],
1);
- _gnutls_mpi_release(&t2);
+ zrelease_mpi_key(&t2);
t2 = _gnutls_mpi_mod(params->params[RSA_PRIV], t1);
if (t2 == NULL) {
ret = 0;
rsa_cleanup:
- _gnutls_mpi_release(&t1);
- _gnutls_mpi_release(&t2);
+ zrelease_mpi_key(&t1);
+ zrelease_mpi_key(&t2);
}
break;
ret = 0;
dsa_cleanup:
- _gnutls_mpi_release(&t1);
+ zrelease_mpi_key(&t1);
}
break;
mpz_init(x1);
mpz_init(y1);
ecc_point_get(&r, x1, y1);
- ecc_point_clear(&r);
+ ecc_point_zclear(&r);
mpz_init(x2);
mpz_init(y2);
ret = 0;
ecc_cleanup:
- ecc_scalar_clear(&priv);
+ ecc_scalar_zclear(&priv);
ecc_point_clear(&pub);
}
break;
params->params[7] =
_gnutls_mpi_mod(params->params[2] /*d */ , tmp);
- _gnutls_mpi_release(&tmp);
+ zrelease_mpi_key(&tmp);
if (params->params[7] == NULL || params->params[6] == NULL) {
gnutls_assert();
TOMPZ(params->params[RSA_PRIME1]));
/* calculate exp1 [6] and exp2 [7] */
- _gnutls_mpi_release(¶ms->params[RSA_E1]);
- _gnutls_mpi_release(¶ms->params[RSA_E2]);
+ zrelease_mpi_key(¶ms->params[RSA_E1]);
+ zrelease_mpi_key(¶ms->params[RSA_E2]);
result = calc_rsa_exp(params);
if (result < 0) {
return 1;
- cleanup:
+cleanup:
+ memset(em, 0, sizeof(key->size));
gnutls_free(em);
return ret;