gnutls_datum_t * out,
const gnutls_pk_params_st * priv,
const gnutls_pk_params_st * pub,
+ const gnutls_datum_t * nonce,
unsigned int flags)
{
int ret;
bigint_t k = NULL, ff = NULL, r = NULL;
unsigned int bits;
+ if (nonce != NULL)
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+
f = pub->params[DH_Y];
x = priv->params[DH_X];
q = priv->params[DH_Q];
out->data = NULL;
+ if (nonce != NULL)
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+
curve = get_supported_nist_curve(priv->curve);
if (curve == NULL)
return
{
unsigned size = gnutls_ecc_curve_get_size(priv->curve);
+ if (nonce != NULL)
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+
/* The point is in pub, while the private part (scalar) in priv. */
if (size == 0 || priv->raw_priv.size != size)
#define _gnutls_pk_verify( algo, data, sig, params, sign_params) _gnutls_pk_ops.verify( algo, data, sig, params, sign_params)
#define _gnutls_pk_verify_priv_params( algo, params) _gnutls_pk_ops.verify_priv_params( algo, params)
#define _gnutls_pk_verify_pub_params( algo, params) _gnutls_pk_ops.verify_pub_params( algo, params)
-#define _gnutls_pk_derive( algo, out, pub, priv) _gnutls_pk_ops.derive( algo, out, pub, priv, 0)
-#define _gnutls_pk_derive_tls13( algo, out, pub, priv) _gnutls_pk_ops.derive( algo, out, pub, priv, PK_DERIVE_TLS13)
+#define _gnutls_pk_derive( algo, out, pub, priv) _gnutls_pk_ops.derive( algo, out, pub, priv, NULL, 0)
+#define _gnutls_pk_derive_nonce( algo, out, pub, priv, nonce) _gnutls_pk_ops.derive( algo, out, pub, priv, nonce, 0)
+#define _gnutls_pk_derive_tls13( algo, out, pub, priv) _gnutls_pk_ops.derive( algo, out, pub, priv, NULL, PK_DERIVE_TLS13)
#define _gnutls_pk_generate_keys( algo, bits, params, temporal) _gnutls_pk_ops.generate_keys( algo, bits, params, temporal)
#define _gnutls_pk_generate_params( algo, bits, priv) _gnutls_pk_ops.generate_params( algo, bits, priv)
#define _gnutls_pk_hash_algorithm( pk, sig, params, hash) _gnutls_pk_ops.hash_algorithm(pk, sig, params, hash)