Example #1
0
/* Reads a PEM encoded PKCS-1 RSA/DSA private key from memory.  Type
 * indicates the certificate format.  KEY can be NULL, to indicate
 * that GnuTLS doesn't know the private key.
 */
static int
read_key_mem (gnutls_certificate_credentials_t res,
	      const void *key, int key_size, gnutls_x509_crt_fmt_t type)
{
  int ret;
  gnutls_datum_t tmp;

  /* allocate space for the pkey list
   */
  res->pkey =
    gnutls_realloc_fast (res->pkey,
			 (res->ncerts + 1) * sizeof (gnutls_privkey));
  if (res->pkey == NULL)
    {
      gnutls_assert ();
      return GNUTLS_E_MEMORY_ERROR;
    }

  if (key)
    {
      tmp.data = (opaque *) key;
      tmp.size = key_size;

      ret =
	_gnutls_x509_raw_privkey_to_gkey (&res->pkey[res->ncerts], &tmp,
					  type);
      if (ret < 0)
	{
	  gnutls_assert ();
	  return ret;
	}
    }
  else
    memset (&res->pkey[res->ncerts], 0, sizeof (gnutls_privkey));

  return 0;
}
Example #2
0
int
_gnutls_raw_privkey_to_gkey (gnutls_privkey * key,
			     gnutls_certificate_type_t type,
			     const gnutls_datum_t * raw_key,
			     int key_enc /* DER or PEM */ )
{
  switch (type)
    {
    case GNUTLS_CRT_X509:
      return _gnutls_x509_raw_privkey_to_gkey (key, raw_key, key_enc);
    case GNUTLS_CRT_OPENPGP:
      if (_E_gnutls_openpgp_raw_privkey_to_gkey == NULL)
	{
	  gnutls_assert ();
	  return GNUTLS_E_INIT_LIBEXTRA;
	}
      return _E_gnutls_openpgp_raw_privkey_to_gkey (key, raw_key,
						    (gnutls_openpgp_crt_fmt_t)
						    key_enc);
    default:
      gnutls_assert ();
      return GNUTLS_E_INTERNAL_ERROR;
    }
}