/* Reads a DER or PEM certificate from memory */ static int read_cert_mem (gnutls_certificate_credentials_t res, const void *cert, int cert_size, gnutls_x509_crt_fmt_t type) { int ret; /* allocate space for the certificate to add */ res->cert_list = gnutls_realloc_fast (res->cert_list, (1 + res->ncerts) * sizeof (gnutls_cert *)); if (res->cert_list == NULL) { gnutls_assert (); return GNUTLS_E_MEMORY_ERROR; } res->cert_list_length = gnutls_realloc_fast (res->cert_list_length, (1 + res->ncerts) * sizeof (int)); if (res->cert_list_length == NULL) { gnutls_assert (); return GNUTLS_E_MEMORY_ERROR; } res->cert_list[res->ncerts] = NULL; /* for realloc */ res->cert_list_length[res->ncerts] = 0; if (type == GNUTLS_X509_FMT_DER) ret = parse_der_cert_mem (&res->cert_list[res->ncerts], &res->cert_list_length[res->ncerts], cert, cert_size); else ret = parse_pem_cert_mem (&res->cert_list[res->ncerts], &res->cert_list_length[res->ncerts], cert, cert_size); if (ret < 0) { gnutls_assert (); return ret; } return ret; }
/* Reads a DER or PEM certificate from memory */ static int read_cert_mem(gnutls_certificate_credentials_t res, gnutls_privkey_t key, const void *cert, int cert_size, gnutls_x509_crt_fmt_t type) { int ret; if (type == GNUTLS_X509_FMT_DER) ret = parse_der_cert_mem(res, key, cert, cert_size); else ret = parse_pem_cert_mem(res, key, cert, cert_size); if (ret < 0) { gnutls_assert(); return ret; } return ret; }