diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-12-18 10:32:36 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-12-18 10:32:36 +0000 |
commit | 4d4fa5bb8a4e2c2fb1fc9ab68a4d6b887e497aa7 (patch) | |
tree | b9dedc72738de90e4dd062df3ae32471bf6f7681 /lib/gnutls_x509.c | |
parent | 07ff6f25feb45c03986a66ce39c17bc2e4e5db09 (diff) | |
download | gnutls-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.c | 52 |
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; } |