# The following should be removed in the new release, after updating the
# abi-dump repository:
+[suppress_function]
+name = gnutls_pubkey_import_dh_raw
+
+[suppress_function]
+name = gnutls_privkey_import_dh_raw
+
+[suppress_function]
+name = gnutls_privkey_export_dh_raw
+
+[suppress_function]
+name = gnutls_x509_privkey_import_dh_raw
GNUTLS_3_7_5@GNUTLS_3_7_5
GNUTLS_3_7_7@GNUTLS_3_7_7
GNUTLS_3_8_1@GNUTLS_3_8_1
+GNUTLS_3_8_2@GNUTLS_3_8_2
_gnutls_global_init_skip@GNUTLS_3_4
gnutls_aead_cipher_decrypt@GNUTLS_3_4
gnutls_aead_cipher_decryptv2@GNUTLS_3_6_10
gnutls_privkey_decrypt_data2@GNUTLS_3_6_5
gnutls_privkey_decrypt_data@GNUTLS_3_4
gnutls_privkey_deinit@GNUTLS_3_4
+gnutls_privkey_export_dh_raw@GNUTLS_3_8_2
gnutls_privkey_export_dsa_raw2@GNUTLS_3_6_0
gnutls_privkey_export_dsa_raw@GNUTLS_3_4
gnutls_privkey_export_ecc_raw2@GNUTLS_3_6_0
gnutls_privkey_get_seed@GNUTLS_3_4
gnutls_privkey_get_spki@GNUTLS_3_6_0
gnutls_privkey_get_type@GNUTLS_3_4
+gnutls_privkey_import_dh_raw@GNUTLS_3_8_2
gnutls_privkey_import_dsa_raw@GNUTLS_3_4
gnutls_privkey_import_ecc_raw@GNUTLS_3_4
gnutls_privkey_import_ext2@GNUTLS_3_4
gnutls_pubkey_get_preferred_hash_algorithm@GNUTLS_3_4
gnutls_pubkey_get_spki@GNUTLS_3_6_0
gnutls_pubkey_import@GNUTLS_3_4
+gnutls_pubkey_import_dh_raw@GNUTLS_3_8_2
gnutls_pubkey_import_dsa_raw@GNUTLS_3_4
gnutls_pubkey_import_ecc_raw@GNUTLS_3_4
gnutls_pubkey_import_ecc_x962@GNUTLS_3_4
gnutls_x509_privkey_get_spki@GNUTLS_3_6_0
gnutls_x509_privkey_import2@GNUTLS_3_4
gnutls_x509_privkey_import@GNUTLS_3_4
+gnutls_x509_privkey_import_dh_raw@GNUTLS_3_8_2
gnutls_x509_privkey_import_dsa_raw@GNUTLS_3_4
gnutls_x509_privkey_import_ecc_raw@GNUTLS_3_4
gnutls_x509_privkey_import_gost_raw@GNUTLS_3_6_3
FUNCS += functions/gnutls_privkey_decrypt_data2.short
FUNCS += functions/gnutls_privkey_deinit
FUNCS += functions/gnutls_privkey_deinit.short
+FUNCS += functions/gnutls_privkey_export_dh_raw
+FUNCS += functions/gnutls_privkey_export_dh_raw.short
FUNCS += functions/gnutls_privkey_export_dsa_raw
FUNCS += functions/gnutls_privkey_export_dsa_raw.short
FUNCS += functions/gnutls_privkey_export_dsa_raw2
FUNCS += functions/gnutls_privkey_get_spki.short
FUNCS += functions/gnutls_privkey_get_type
FUNCS += functions/gnutls_privkey_get_type.short
+FUNCS += functions/gnutls_privkey_import_dh_raw
+FUNCS += functions/gnutls_privkey_import_dh_raw.short
FUNCS += functions/gnutls_privkey_import_dsa_raw
FUNCS += functions/gnutls_privkey_import_dsa_raw.short
FUNCS += functions/gnutls_privkey_import_ecc_raw
FUNCS += functions/gnutls_pubkey_get_spki.short
FUNCS += functions/gnutls_pubkey_import
FUNCS += functions/gnutls_pubkey_import.short
+FUNCS += functions/gnutls_pubkey_import_dh_raw
+FUNCS += functions/gnutls_pubkey_import_dh_raw.short
FUNCS += functions/gnutls_pubkey_import_dsa_raw
FUNCS += functions/gnutls_pubkey_import_dsa_raw.short
FUNCS += functions/gnutls_pubkey_import_ecc_raw
FUNCS += functions/gnutls_x509_privkey_import.short
FUNCS += functions/gnutls_x509_privkey_import2
FUNCS += functions/gnutls_x509_privkey_import2.short
+FUNCS += functions/gnutls_x509_privkey_import_dh_raw
+FUNCS += functions/gnutls_x509_privkey_import_dh_raw.short
FUNCS += functions/gnutls_x509_privkey_import_dsa_raw
FUNCS += functions/gnutls_x509_privkey_import_dsa_raw.short
FUNCS += functions/gnutls_x509_privkey_import_ecc_raw
APIMANS += gnutls_privkey_decrypt_data.3
APIMANS += gnutls_privkey_decrypt_data2.3
APIMANS += gnutls_privkey_deinit.3
+APIMANS += gnutls_privkey_export_dh_raw.3
APIMANS += gnutls_privkey_export_dsa_raw.3
APIMANS += gnutls_privkey_export_dsa_raw2.3
APIMANS += gnutls_privkey_export_ecc_raw.3
APIMANS += gnutls_privkey_get_seed.3
APIMANS += gnutls_privkey_get_spki.3
APIMANS += gnutls_privkey_get_type.3
+APIMANS += gnutls_privkey_import_dh_raw.3
APIMANS += gnutls_privkey_import_dsa_raw.3
APIMANS += gnutls_privkey_import_ecc_raw.3
APIMANS += gnutls_privkey_import_ext.3
APIMANS += gnutls_pubkey_get_preferred_hash_algorithm.3
APIMANS += gnutls_pubkey_get_spki.3
APIMANS += gnutls_pubkey_import.3
+APIMANS += gnutls_pubkey_import_dh_raw.3
APIMANS += gnutls_pubkey_import_dsa_raw.3
APIMANS += gnutls_pubkey_import_ecc_raw.3
APIMANS += gnutls_pubkey_import_ecc_x962.3
APIMANS += gnutls_x509_privkey_get_spki.3
APIMANS += gnutls_x509_privkey_import.3
APIMANS += gnutls_x509_privkey_import2.3
+APIMANS += gnutls_x509_privkey_import_dh_raw.3
APIMANS += gnutls_x509_privkey_import_dsa_raw.3
APIMANS += gnutls_x509_privkey_import_ecc_raw.3
APIMANS += gnutls_x509_privkey_import_gost_raw.3
const gnutls_datum_t *q,
const gnutls_datum_t *g,
const gnutls_datum_t *y);
+int gnutls_pubkey_import_dh_raw(gnutls_pubkey_t key, const gnutls_datum_t *p,
+ const gnutls_datum_t *q,
+ const gnutls_datum_t *g,
+ const gnutls_datum_t *y);
int gnutls_pubkey_import_rsa_raw(gnutls_pubkey_t key, const gnutls_datum_t *m,
const gnutls_datum_t *e);
const gnutls_datum_t *y,
const gnutls_datum_t *x);
+int gnutls_privkey_import_dh_raw(gnutls_privkey_t key, const gnutls_datum_t *p,
+ const gnutls_datum_t *q,
+ const gnutls_datum_t *g,
+ const gnutls_datum_t *y,
+ const gnutls_datum_t *x);
+
int gnutls_privkey_import_rsa_raw(
gnutls_privkey_t key, const gnutls_datum_t *m, const gnutls_datum_t *e,
const gnutls_datum_t *d, const gnutls_datum_t *p,
gnutls_datum_t *y, gnutls_datum_t *x,
unsigned flags);
+int gnutls_privkey_export_dh_raw(gnutls_privkey_t key, gnutls_datum_t *p,
+ gnutls_datum_t *q, gnutls_datum_t *g,
+ gnutls_datum_t *y, gnutls_datum_t *x,
+ unsigned int flags);
+
int gnutls_privkey_export_ecc_raw(gnutls_privkey_t key,
gnutls_ecc_curve_t *curve, gnutls_datum_t *x,
gnutls_datum_t *y, gnutls_datum_t *k);
const gnutls_datum_t *g,
const gnutls_datum_t *y,
const gnutls_datum_t *x);
+int gnutls_x509_privkey_import_dh_raw(gnutls_x509_privkey_t key,
+ const gnutls_datum_t *p,
+ const gnutls_datum_t *q,
+ const gnutls_datum_t *g,
+ const gnutls_datum_t *y,
+ const gnutls_datum_t *x);
int gnutls_x509_privkey_get_pk_algorithm(gnutls_x509_privkey_t key);
int gnutls_x509_privkey_get_pk_algorithm2(gnutls_x509_privkey_t key,
*;
} GNUTLS_3_7_7;
+GNUTLS_3_8_2
+{
+ global:
+ gnutls_pubkey_import_dh_raw;
+ gnutls_privkey_import_dh_raw;
+ gnutls_privkey_export_dh_raw;
+ gnutls_x509_privkey_import_dh_raw;
+ local:
+ *;
+} GNUTLS_3_8_1;
+
GNUTLS_FIPS140_3_4 {
global:
gnutls_cipher_self_test;
}
break;
+ case GNUTLS_PK_DH:
case GNUTLS_PK_DSA: {
bigint_t t1 = NULL;
return GNUTLS_E_INVALID_REQUEST;
}
- if (params->algo != GNUTLS_PK_DSA) {
+ if (params->algo != GNUTLS_PK_DSA && params->algo != GNUTLS_PK_DH) {
gnutls_assert();
return GNUTLS_E_INVALID_REQUEST;
}
return ret;
}
+/**
+ * gnutls_privkey_export_dh_raw:
+ * @key: Holds the public key
+ * @p: will hold the p
+ * @q: will hold the q
+ * @g: will hold the g
+ * @y: will hold the y
+ * @x: will hold the x
+ * @flags: flags from %gnutls_abstract_export_flags_t
+ *
+ * This function will export the Diffie-Hellman private key's
+ * parameters found in the given structure. The new parameters will be
+ * allocated using gnutls_malloc() and will be stored in the
+ * appropriate datum.
+ *
+ * Returns: %GNUTLS_E_SUCCESS on success, otherwise a negative error code.
+ *
+ * Since: 3.8.2
+ **/
+int gnutls_privkey_export_dh_raw(gnutls_privkey_t key, gnutls_datum_t *p,
+ gnutls_datum_t *q, gnutls_datum_t *g,
+ gnutls_datum_t *y, gnutls_datum_t *x,
+ unsigned int flags)
+{
+ return gnutls_privkey_export_dsa_raw2(key, p, q, g, y, x, flags);
+}
+
/**
* gnutls_privkey_export_ecc_raw:
* @key: Holds the public key
return ret;
}
+/**
+ * gnutls_privkey_import_dh_raw:
+ * @key: The structure to store the parsed key
+ * @p: holds the p
+ * @q: holds the q (optional)
+ * @g: holds the g
+ * @y: holds the y (optional)
+ * @x: holds the x
+ *
+ * This function will convert the given Diffie-Hellman raw parameters
+ * to the native #gnutls_privkey_t format. The output will be stored
+ * in @key.
+ *
+ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a
+ * negative error value.
+ *
+ * Since: 3.8.2
+ **/
+int gnutls_privkey_import_dh_raw(gnutls_privkey_t key, const gnutls_datum_t *p,
+ const gnutls_datum_t *q,
+ const gnutls_datum_t *g,
+ const gnutls_datum_t *y,
+ const gnutls_datum_t *x)
+{
+ int ret;
+ gnutls_x509_privkey_t xkey;
+
+ ret = gnutls_x509_privkey_init(&xkey);
+ if (ret < 0)
+ return gnutls_assert_val(ret);
+
+ ret = gnutls_x509_privkey_import_dh_raw(xkey, p, q, g, y, x);
+ if (ret < 0) {
+ gnutls_assert();
+ goto error;
+ }
+
+ ret = gnutls_privkey_import_x509(key, xkey,
+ GNUTLS_PRIVKEY_IMPORT_AUTO_RELEASE);
+ if (ret < 0) {
+ gnutls_assert();
+ goto error;
+ }
+
+ return 0;
+
+error:
+ gnutls_x509_privkey_deinit(xkey);
+ return ret;
+}
+
/**
* gnutls_privkey_import_ecc_raw:
* @key: The key
return ret;
}
+/**
+ * gnutls_pubkey_import_dh_raw:
+ * @key: The structure to store the parsed key
+ * @p: holds the p
+ * @q: holds the q (optional)
+ * @g: holds the g
+ * @y: holds the y
+ *
+ * This function will convert the given Diffie-Hellman raw parameters
+ * to the native #gnutls_pubkey_t format. The output will be stored
+ * in @key.
+ *
+ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a
+ * negative error value.
+ *
+ * Since: 3.8.2
+ **/
+int gnutls_pubkey_import_dh_raw(gnutls_pubkey_t key, const gnutls_datum_t *p,
+ const gnutls_datum_t *q,
+ const gnutls_datum_t *g,
+ const gnutls_datum_t *y)
+{
+ int ret;
+
+ if (unlikely(key == NULL || p == NULL || g == NULL || y == NULL)) {
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+ }
+
+ gnutls_pk_params_release(&key->params);
+ gnutls_pk_params_init(&key->params);
+
+ if (_gnutls_mpi_init_scan_nz(&key->params.params[DH_P], p->data,
+ p->size)) {
+ gnutls_assert();
+ ret = GNUTLS_E_MPI_SCAN_FAILED;
+ goto cleanup;
+ }
+
+ if (q) {
+ if (_gnutls_mpi_init_scan_nz(&key->params.params[DH_Q], q->data,
+ q->size)) {
+ gnutls_assert();
+ ret = GNUTLS_E_MPI_SCAN_FAILED;
+ goto cleanup;
+ }
+ }
+
+ if (_gnutls_mpi_init_scan_nz(&key->params.params[DH_G], g->data,
+ g->size)) {
+ gnutls_assert();
+ ret = GNUTLS_E_MPI_SCAN_FAILED;
+ goto cleanup;
+ }
+
+ if (_gnutls_mpi_init_scan_nz(&key->params.params[DH_Y], y->data,
+ y->size)) {
+ gnutls_assert();
+ ret = GNUTLS_E_MPI_SCAN_FAILED;
+ goto cleanup;
+ }
+
+ key->params.params_nr = DH_PUBLIC_PARAMS;
+ key->params.algo = GNUTLS_PK_DH;
+ key->bits = pubkey_to_bits(&key->params);
+
+ return 0;
+
+cleanup:
+ gnutls_pk_params_clear(&key->params);
+ gnutls_pk_params_release(&key->params);
+ return ret;
+}
+
/* Updates the gnutls_x509_spki_st parameters based on the signature
* information, and reports any incompatibilities between the existing
* parameters (if any) with the signature algorithm */
return ret;
}
+/**
+ * gnutls_x509_privkey_import_dh_raw:
+ * @key: The data to store the parsed key
+ * @p: holds the p
+ * @q: holds the q (optional)
+ * @g: holds the g
+ * @y: holds the y (optional)
+ * @x: holds the x
+ *
+ * This function will convert the given Diffie-Hellman raw parameters
+ * to the native #gnutls_x509_privkey_t format. The output will be
+ * stored in @key.
+ *
+ * Returns: On success, %GNUTLS_E_SUCCESS (0) is returned, otherwise a
+ * negative error value.
+ **/
+int gnutls_x509_privkey_import_dh_raw(gnutls_x509_privkey_t key,
+ const gnutls_datum_t *p,
+ const gnutls_datum_t *q,
+ const gnutls_datum_t *g,
+ const gnutls_datum_t *y,
+ const gnutls_datum_t *x)
+{
+ int ret;
+
+ if (unlikely(key == NULL || p == NULL || g == NULL || x == NULL)) {
+ return gnutls_assert_val(GNUTLS_E_INVALID_REQUEST);
+ }
+
+ gnutls_pk_params_init(&key->params);
+
+ if (_gnutls_mpi_init_scan_nz(&key->params.params[DH_P], p->data,
+ p->size)) {
+ gnutls_assert();
+ ret = GNUTLS_E_MPI_SCAN_FAILED;
+ goto cleanup;
+ }
+
+ if (q) {
+ if (_gnutls_mpi_init_scan_nz(&key->params.params[DH_Q], q->data,
+ q->size)) {
+ gnutls_assert();
+ ret = GNUTLS_E_MPI_SCAN_FAILED;
+ goto cleanup;
+ }
+ }
+
+ if (_gnutls_mpi_init_scan_nz(&key->params.params[DH_G], g->data,
+ g->size)) {
+ gnutls_assert();
+ ret = GNUTLS_E_MPI_SCAN_FAILED;
+ goto cleanup;
+ }
+
+ if (y) {
+ if (_gnutls_mpi_init_scan_nz(&key->params.params[DH_Y], y->data,
+ y->size)) {
+ gnutls_assert();
+ ret = GNUTLS_E_MPI_SCAN_FAILED;
+ goto cleanup;
+ }
+ }
+
+ if (_gnutls_mpi_init_scan_nz(&key->params.params[DH_X], x->data,
+ x->size)) {
+ gnutls_assert();
+ ret = GNUTLS_E_MPI_SCAN_FAILED;
+ goto cleanup;
+ }
+
+ ret = _gnutls_pk_fixup(GNUTLS_PK_DH, GNUTLS_IMPORT, &key->params);
+ if (ret < 0) {
+ gnutls_assert();
+ goto cleanup;
+ }
+
+ key->params.algo = GNUTLS_PK_DH;
+ key->params.params_nr = DH_PRIVATE_PARAMS;
+
+ return 0;
+
+cleanup:
+ gnutls_pk_params_clear(&key->params);
+ gnutls_pk_params_release(&key->params);
+ return ret;
+}
+
/**
* gnutls_x509_privkey_import_ecc_raw:
* @key: The data to store the parsed key