summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2003-10-31 15:19:04 +0000
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2003-10-31 15:19:04 +0000
commit2557dd050dd158aa4a21e0d4d45a3b8b0b25e656 (patch)
treedb8e25780549131d7e965638dbb5585426643c3b
parentcba31e5ec40da3076f9e103e62ab97f0d2e1d1e3 (diff)
downloadgnutls-2557dd050dd158aa4a21e0d4d45a3b8b0b25e656.tar.gz
*** empty log message ***
-rw-r--r--libextra/openpgp/.cvsignore9
-rw-r--r--libextra/openpgp/openpgp.c30
-rw-r--r--libextra/openpgp/openpgp.h7
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;