diff options
author | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-10-31 15:19:04 +0000 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2003-10-31 15:19:04 +0000 |
commit | 2557dd050dd158aa4a21e0d4d45a3b8b0b25e656 (patch) | |
tree | db8e25780549131d7e965638dbb5585426643c3b | |
parent | cba31e5ec40da3076f9e103e62ab97f0d2e1d1e3 (diff) | |
download | gnutls-2557dd050dd158aa4a21e0d4d45a3b8b0b25e656.tar.gz |
*** empty log message ***
-rw-r--r-- | libextra/openpgp/.cvsignore | 9 | ||||
-rw-r--r-- | libextra/openpgp/openpgp.c | 30 | ||||
-rw-r--r-- | libextra/openpgp/openpgp.h | 7 |
3 files changed, 37 insertions, 9 deletions
diff --git a/libextra/openpgp/.cvsignore b/libextra/openpgp/.cvsignore new file mode 100644 index 0000000000..871ce187b1 --- /dev/null +++ b/libextra/openpgp/.cvsignore @@ -0,0 +1,9 @@ +.deps +.libs +*.lo +*.o +*.la +Makefile.in +gnutls.h.in +Makefile +.cvsignore diff --git a/libextra/openpgp/openpgp.c b/libextra/openpgp/openpgp.c index c15624fbea..440c6d4f7f 100644 --- a/libextra/openpgp/openpgp.c +++ b/libextra/openpgp/openpgp.c @@ -68,6 +68,7 @@ void gnutls_openpgp_key_deinit(gnutls_openpgp_key key) cdk_kbnode_release( key->knode); key->knode = NULL; } + if (key->inp) cdk_stream_close( key->inp); gnutls_free(key); } @@ -85,15 +86,32 @@ void gnutls_openpgp_key_deinit(gnutls_openpgp_key key) * **/ int gnutls_openpgp_key_import(gnutls_openpgp_key key, - const gnutls_datum * data, - gnutls_openpgp_key_fmt format) + const gnutls_datum * data, gnutls_openpgp_key_fmt format) { int rc; - rc = cdk_kbnode_read_from_mem( &key->knode, data->data, data->size); - if( (rc = _gnutls_map_cdk_rc( rc ))) { - gnutls_assert(); - return rc; + if (format == GNUTLS_OPENPGP_FMT_RAW) { + rc = cdk_kbnode_read_from_mem( &key->knode, data->data, data->size); + if( rc) { + rc = _gnutls_map_cdk_rc( rc); + gnutls_assert(); + return rc; + } + } else { /* base64 */ + key->inp = cdk_stream_tmp_from_mem( data->data, data->size); + if (key->inp == NULL) { + gnutls_assert(); + return GNUTLS_E_INTERNAL_ERROR; + } + + cdk_stream_set_armor_flag( key->inp, 0 ); + + rc = cdk_keydb_get_keyblock( key->inp, &key->knode ); + if( rc) { + rc = _gnutls_map_cdk_rc( rc); + gnutls_assert(); + return rc; + } } return 0; diff --git a/libextra/openpgp/openpgp.h b/libextra/openpgp/openpgp.h index 0986f99a96..c8a92ab88e 100644 --- a/libextra/openpgp/openpgp.h +++ b/libextra/openpgp/openpgp.h @@ -7,8 +7,12 @@ #include <opencdk.h> +typedef enum gnutls_openpgp_key_fmt { GNUTLS_OPENPGP_FMT_RAW, + GNUTLS_OPENPGP_FMT_BASE64 } gnutls_openpgp_key_fmt; + typedef struct gnutls_openpgp_key_int { cdk_kbnode_t knode; + cdk_stream_t inp; } gnutls_openpgp_key_int; typedef struct gnutls_openpgp_keyring_int { @@ -19,9 +23,6 @@ typedef struct gnutls_openpgp_trustdb_int { cdk_stream_t st; } gnutls_openpgp_trustdb_int; -typedef enum gnutls_openpgp_key_fmt { GNUTLS_X509_FMT_RAW, - GNUTLS_X509_FMT_BASE64 } gnutls_openpgp_key_fmt; - typedef struct gnutls_openpgp_key_int *gnutls_openpgp_key; typedef struct gnutls_openpgp_keyring_int *gnutls_openpgp_keyring; typedef struct gnutls_openpgp_trustdb_int *gnutls_openpgp_trustdb; |