/* kbnode.c - keyblock node utility functions
- * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2007, 2008, 2010
- * Free Software Foundation, Inc.
+ * Copyright (C) 1998-2003, 2007-2011 Free Software Foundation, Inc.
*
* Author: Timo Schulz
*
/**
* cdk_kbnode_read_from_mem:
* @ret_node: the new key node
+ * @armor: whether base64 or not
* @buf: the buffer which stores the key sequence
* @buflen: the length of the buffer
*
**/
cdk_error_t
cdk_kbnode_read_from_mem (cdk_kbnode_t * ret_node,
+ int armor,
const byte * buf, size_t buflen)
{
cdk_stream_t inp;
rc = cdk_stream_tmp_from_mem (buf, buflen, &inp);
if (rc)
return rc;
+
+ if (armor)
+ cdk_stream_set_armor_flag (inp, 0);
+
rc = cdk_keydb_get_keyblock (inp, ret_node);
if (rc)
gnutls_assert ();
cdk_kbnode_t cdk_kbnode_new (cdk_packet_t pkt);
cdk_error_t cdk_kbnode_read_from_mem (cdk_kbnode_t * ret_node,
+ int armor,
const unsigned char *buf,
size_t buflen);
cdk_error_t cdk_kbnode_write_to_mem (cdk_kbnode_t node,
return 0;
}
- if (cdk_kbnode_read_from_mem (&knode, cert->data, cert->size))
+ if (cdk_kbnode_read_from_mem (&knode, 0, cert->data, cert->size))
{
gnutls_assert ();
return 0;
/*
- * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
- * Free Software Foundation, Inc.
+ * Copyright (C) 2002-2011 Free Software Foundation, Inc.
*
* Author: Timo Schulz, Nikos Mavrogiannopoulos
*
const gnutls_datum_t * data,
gnutls_openpgp_crt_fmt_t format)
{
- cdk_stream_t inp;
cdk_packet_t pkt;
- int rc;
+ int rc, armor;
if (data->data == NULL || data->size == 0)
{
return GNUTLS_E_OPENPGP_GETKEY_FAILED;
}
- 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
+ if (format == GNUTLS_OPENPGP_FMT_RAW) armor = 0;
+ else armor = 1;
+
+ rc = cdk_kbnode_read_from_mem (&key->knode, armor, data->data, data->size);
+ if (rc)
{
- rc = cdk_stream_tmp_from_mem (data->data, data->size, &inp);
- if (rc)
- {
- rc = _gnutls_map_cdk_rc (rc);
- gnutls_assert ();
- return rc;
- }
- rc = cdk_stream_set_armor_flag (inp, 0);
- if (!rc)
- rc = cdk_keydb_get_keyblock (inp, &key->knode);
- cdk_stream_close (inp);
- if (rc)
- {
- if (rc == CDK_Inv_Packet)
- rc = GNUTLS_E_OPENPGP_GETKEY_FAILED;
- else
- rc = _gnutls_map_cdk_rc (rc);
- gnutls_assert ();
- return rc;
- }
+ rc = _gnutls_map_cdk_rc (rc);
+ gnutls_assert ();
+ return rc;
}
/* Test if the import was successful. */
gnutls_openpgp_crt_fmt_t format,
const char *password, unsigned int flags)
{
- cdk_stream_t inp;
cdk_packet_t pkt;
- int rc;
+ int rc, armor;
if (data->data == NULL || data->size == 0)
{
}
if (format == GNUTLS_OPENPGP_FMT_RAW)
- {
- rc = cdk_kbnode_read_from_mem (&key->knode, data->data, data->size);
- if (rc != 0)
- {
- rc = _gnutls_map_cdk_rc (rc);
- gnutls_assert ();
- return rc;
- }
- }
- else
- {
- rc = cdk_stream_tmp_from_mem (data->data, data->size, &inp);
- if (rc != 0)
- {
- rc = _gnutls_map_cdk_rc (rc);
- gnutls_assert ();
- return rc;
- }
+ armor = 0;
+ else armor = 1;
- rc = cdk_stream_set_armor_flag (inp, 0);
- if (rc != 0)
- {
- rc = _gnutls_map_cdk_rc (rc);
- cdk_stream_close (inp);
- gnutls_assert ();
- return rc;
- }
-
- rc = cdk_keydb_get_keyblock (inp, &key->knode);
- cdk_stream_close (inp);
-
- if (rc != 0)
- {
- rc = _gnutls_map_cdk_rc (rc);
- gnutls_assert ();
- return rc;
- }
+ rc = cdk_kbnode_read_from_mem (&key->knode, armor, data->data, data->size);
+ if (rc != 0)
+ {
+ rc = _gnutls_map_cdk_rc (rc);
+ gnutls_assert ();
+ return rc;
}
/* Test if the import was successful. */