summaryrefslogtreecommitdiff
path: root/lib/gnutls_x509.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2003-12-18 10:32:36 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2003-12-18 10:32:36 +0000
commit4d4fa5bb8a4e2c2fb1fc9ab68a4d6b887e497aa7 (patch)
treeb9dedc72738de90e4dd062df3ae32471bf6f7681 /lib/gnutls_x509.c
parent07ff6f25feb45c03986a66ce39c17bc2e4e5db09 (diff)
downloadgnutls-4d4fa5bb8a4e2c2fb1fc9ab68a4d6b887e497aa7.tar.gz
Added the callbacks gnutls_certificate_client_retrieve_function() and
gnutls_certificate_server_retrieve_function(), to allow a client or a server to specify certificates for the handshake without storing them to the credentials structure.
Diffstat (limited to 'lib/gnutls_x509.c')
-rw-r--r--lib/gnutls_x509.c52
1 files changed, 32 insertions, 20 deletions
diff --git a/lib/gnutls_x509.c b/lib/gnutls_x509.c
index 6ee494064b..eaca68d83e 100644
--- a/lib/gnutls_x509.c
+++ b/lib/gnutls_x509.c
@@ -550,12 +550,43 @@ int i, ret;
void _gnutls_privkey_deinit(gnutls_privkey *key)
{
int i;
+ if (key == NULL) return;
for (i = 0; i < key->params_size; i++) {
_gnutls_mpi_release( &key->params[i]);
}
}
+int _gnutls_x509_key2gnutls_key( gnutls_privkey* privkey, const gnutls_datum* raw_key,
+ gnutls_x509_crt_fmt type)
+{
+gnutls_x509_privkey tmpkey;
+int ret;
+
+ ret = gnutls_x509_privkey_init( &tmpkey);
+ if (ret < 0) {
+ gnutls_assert();
+ return ret;
+ }
+
+ ret = gnutls_x509_privkey_import( tmpkey, raw_key, type);
+ if (ret < 0) {
+ gnutls_assert();
+ gnutls_x509_privkey_deinit( tmpkey);
+ return ret;
+ }
+
+ ret = privkey_cpy( privkey, tmpkey);
+ if (ret < 0) {
+ gnutls_assert();
+ gnutls_x509_privkey_deinit( tmpkey);
+ return ret;
+ }
+
+ gnutls_x509_privkey_deinit( tmpkey);
+
+ return 0;
+}
/* Reads a PEM encoded PKCS-1 RSA private key from memory
* 2002-01-26: Added ability to read DSA keys.
@@ -566,7 +597,6 @@ static int read_key_mem(gnutls_certificate_credentials res, const void *key, int
{
int ret;
gnutls_datum tmp;
- gnutls_x509_privkey tmpkey;
/* allocate space for the pkey list
*/
@@ -576,33 +606,15 @@ static int read_key_mem(gnutls_certificate_credentials res, const void *key, int
return GNUTLS_E_MEMORY_ERROR;
}
- ret = gnutls_x509_privkey_init( &tmpkey); //res->pkey[res->ncerts]);
- if (ret < 0) {
- gnutls_assert();
- return ret;
- }
-
tmp.data = (opaque*)key;
tmp.size = key_size;
- ret = gnutls_x509_privkey_import( tmpkey, &tmp, type);
- if (ret < 0) {
- gnutls_assert();
- gnutls_x509_privkey_deinit( tmpkey);
-
- return ret;
- }
-
- ret = privkey_cpy( &res->pkey[res->ncerts], tmpkey);
+ ret = _gnutls_x509_key2gnutls_key( &res->pkey[res->ncerts], &tmp, type);
if (ret < 0) {
gnutls_assert();
- gnutls_x509_privkey_deinit( tmpkey);
-
return ret;
}
- gnutls_x509_privkey_deinit( tmpkey);
-
return 0;
}