50 gnutls_datum_t encoded_datum;
51 decoded_datum->data = NULL;
52 decoded_datum->size = 0;
53 encoded_datum.data = (
unsigned char *) encoded;
54 encoded_datum.size = strlen (encoded);
56 return gnutls_base64_decode2 (&encoded_datum, decoded_datum);
85 gchar *pem_str = NULL;
87 gnutls_datum_t export_datum = {.data = NULL, .size = 0};
90 gnutls_x509_privkey_export2 (privkey, GNUTLS_X509_FMT_PEM, &export_datum);
92 g_warning (
"%s: Error exporting private key: %s", __func__,
93 gnutls_strerror (ret));
95 pem_str = g_strdup ((
const char *) export_datum.data);
97 gnutls_free (export_datum.data);
114 GString *certs_string = g_string_new (
"");
115 for (
unsigned int i = 0; i < certs_count; i++)
117 gnutls_x509_crt_t cert;
118 gnutls_datum_t export_datum = {.data = NULL, .size = 0};
121 ret = gnutls_x509_crt_export2 (cert, GNUTLS_X509_FMT_PEM, &export_datum);
124 g_warning (
"%s: Error exporting certificate: %s", __func__,
125 gnutls_strerror (ret));
128 g_string_append_printf (certs_string,
"%s\n",
129 (
char *) export_datum.data);
130 gnutls_free (export_datum.data);
132 return g_string_free (certs_string, FALSE);
176 gchar **privkey_out, gchar **cert_chain_out,
177 gchar **extra_certs_out, gchar **crl_out)
179 gnutls_x509_privkey_t privkey;
180 gnutls_x509_crt_t *chain_certs, *extra_certs;
181 gnutls_x509_crl_t crl;
182 unsigned int chain_certs_count, extra_certs_count;
188 *cert_chain_out = NULL;
190 *extra_certs_out = NULL;
194 chain_certs = extra_certs = NULL;
196 gnutls_x509_privkey_init (&privkey);
197 gnutls_x509_crl_init (&crl);
198 ret = gnutls_pkcs12_simple_parse (pkcs12, passphrase, &privkey, &chain_certs,
199 &chain_certs_count, &extra_certs,
200 &extra_certs_count, &crl, 0);
201 if (ret != GNUTLS_E_SUCCESS)
203 gnutls_x509_privkey_deinit (privkey);
204 gnutls_x509_crl_deinit (crl);
208 if (privkey_out && privkey)
211 gnutls_x509_privkey_deinit (privkey);
213 if (cert_chain_out && chain_certs_count)
217 if (extra_certs_out && extra_certs_count)
226 gnutls_x509_crl_deinit (crl);
228 return GNUTLS_E_SUCCESS;
int gvm_pkcs12_to_pem(gnutls_pkcs12_t pkcs12, const char *passphrase, gchar **privkey_out, gchar **cert_chain_out, gchar **extra_certs_out, gchar **crl_out)
Convert GnuTLS PKCS12 data to a PEM formatted string.