gnutls_datum_t * m, gnutls_datum_t * e)
{
int ret;
- gnutls_pk_params_st params;
+ gnutls_pubkey_t pubkey;
if (crt == NULL) {
gnutls_assert();
return GNUTLS_E_INVALID_REQUEST;
}
- ret = gnutls_x509_crt_get_pk_algorithm(crt, NULL);
- if (ret != GNUTLS_PK_RSA) {
- gnutls_assert();
- return GNUTLS_E_INVALID_REQUEST;
- }
-
- ret = _gnutls_x509_crt_get_mpis(crt, ¶ms);
- if (ret < 0) {
- gnutls_assert();
- return ret;
- }
+ ret = gnutls_pubkey_init(&pubkey);
+ if (ret < 0)
+ return gnutls_assert_val(ret);
- ret = _gnutls_mpi_dprint_lz(params.params[0], m);
- if (ret < 0) {
+ ret = gnutls_pubkey_import_x509(pubkey, crt, 0);
+ if (ret < 0) {
gnutls_assert();
goto cleanup;
}
- ret = _gnutls_mpi_dprint_lz(params.params[1], e);
- if (ret < 0) {
+ ret = gnutls_pubkey_export_rsa_raw(pubkey, m, e);
+ if (ret < 0) {
gnutls_assert();
- _gnutls_free_datum(m);
goto cleanup;
}
- ret = 0;
-
- cleanup:
- gnutls_pk_params_release(¶ms);
+ cleanup:
+ gnutls_pubkey_deinit(pubkey);
return ret;
}
gnutls_datum_t * g, gnutls_datum_t * y)
{
int ret;
- gnutls_pk_params_st params;
+ gnutls_pubkey_t pubkey;
if (crt == NULL) {
gnutls_assert();
return GNUTLS_E_INVALID_REQUEST;
}
- ret = gnutls_x509_crt_get_pk_algorithm(crt, NULL);
- if (ret != GNUTLS_PK_DSA) {
- gnutls_assert();
- return GNUTLS_E_INVALID_REQUEST;
- }
-
- ret = _gnutls_x509_crt_get_mpis(crt, ¶ms);
- if (ret < 0) {
- gnutls_assert();
- return ret;
- }
-
-
- /* P */
- ret = _gnutls_mpi_dprint_lz(params.params[0], p);
- if (ret < 0) {
- gnutls_assert();
- goto cleanup;
- }
-
- /* Q */
- ret = _gnutls_mpi_dprint_lz(params.params[1], q);
- if (ret < 0) {
- gnutls_assert();
- _gnutls_free_datum(p);
- goto cleanup;
- }
-
+ ret = gnutls_pubkey_init(&pubkey);
+ if (ret < 0)
+ return gnutls_assert_val(ret);
- /* G */
- ret = _gnutls_mpi_dprint_lz(params.params[2], g);
- if (ret < 0) {
+ ret = gnutls_pubkey_import_x509(pubkey, crt, 0);
+ if (ret < 0) {
gnutls_assert();
- _gnutls_free_datum(p);
- _gnutls_free_datum(q);
goto cleanup;
}
-
- /* Y */
- ret = _gnutls_mpi_dprint_lz(params.params[3], y);
- if (ret < 0) {
+ ret = gnutls_pubkey_export_dsa_raw(pubkey, p, q, g, y);
+ if (ret < 0) {
gnutls_assert();
- _gnutls_free_datum(p);
- _gnutls_free_datum(g);
- _gnutls_free_datum(q);
goto cleanup;
}
- ret = 0;
-
- cleanup:
- gnutls_pk_params_release(¶ms);
+ cleanup:
+ gnutls_pubkey_deinit(pubkey);
return ret;
-
}
/**