summaryrefslogtreecommitdiff
path: root/src/certtool-common.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2015-06-02 14:08:13 +0200
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2015-06-02 14:08:13 +0200
commit8f5e46a24573663a7dc294dde3bc9566a9266e6e (patch)
tree4646e5e5c924c6d434f8f6f5e9651694bca6a961 /src/certtool-common.c
parentefe884d9d1ff00f6fe476b58332f467b726db04b (diff)
downloadgnutls-8f5e46a24573663a7dc294dde3bc9566a9266e6e.tar.gz
certtool: added --p7-generate, --p7-sign and --p7-detached-sign
Diffstat (limited to 'src/certtool-common.c')
-rw-r--r--src/certtool-common.c92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/certtool-common.c b/src/certtool-common.c
index 685d168028..ea70439f78 100644
--- a/src/certtool-common.c
+++ b/src/certtool-common.c
@@ -445,6 +445,98 @@ gnutls_x509_crt_t *load_cert_list(int mand, size_t * crt_size,
return crt;
}
+/* Loads a CRL list
+ */
+gnutls_x509_crl_t *load_crl_list(int mand, size_t * crl_size,
+ common_info_st * info)
+{
+ FILE *fd;
+ static gnutls_x509_crl_t crl[MAX_CERTS];
+ char *ptr;
+ int ret, i;
+ gnutls_datum_t dat;
+ size_t size;
+ int ptr_size;
+
+ fix_lbuffer(0);
+
+ *crl_size = 0;
+ if (info->verbose)
+ fprintf(stderr, "Loading CRL list...\n");
+
+ if (info->crl == NULL) {
+ if (mand) {
+ fprintf(stderr, "missing --load-crl\n");
+ exit(1);
+ } else
+ return NULL;
+ }
+
+ fd = fopen(info->crl, "r");
+ if (fd == NULL) {
+ fprintf(stderr, "Could not open %s\n", info->crl);
+ exit(1);
+ }
+
+ size = fread(lbuffer, 1, lbuffer_size - 1, fd);
+ lbuffer[size] = 0;
+
+ fclose(fd);
+
+ ptr = (void *) lbuffer;
+ ptr_size = size;
+
+ for (i = 0; i < MAX_CERTS; i++) {
+ ret = gnutls_x509_crl_init(&crl[i]);
+ if (ret < 0) {
+ fprintf(stderr, "crl_init: %s\n",
+ gnutls_strerror(ret));
+ exit(1);
+ }
+
+ dat.data = (void *) ptr;
+ dat.size = ptr_size;
+
+ ret =
+ gnutls_x509_crl_import(crl[i], &dat,
+ info->incert_format);
+ if (ret < 0) {
+ int ret2 = gnutls_x509_crl_import(crl[i], &dat,
+ GNUTLS_X509_FMT_PEM);
+ if (ret2 >= 0)
+ ret = ret2;
+ }
+
+ if (ret < 0 && *crl_size > 0)
+ break;
+ if (ret < 0) {
+ fprintf(stderr, "crl_import: %s\n",
+ gnutls_strerror(ret));
+ exit(1);
+ }
+
+ ptr = strstr(ptr, "---END");
+ if (ptr == NULL)
+ break;
+ ptr++;
+
+ ptr_size = size;
+ ptr_size -=
+ (unsigned int) ((unsigned char *) ptr -
+ (unsigned char *) lbuffer);
+
+ if (ptr_size < 0)
+ break;
+
+ (*crl_size)++;
+ }
+ if (info->verbose)
+ fprintf(stderr, "Loaded %d certificates.\n",
+ (int) *crl_size);
+
+ return crl;
+}
+
/* Load the Certificate Request.
*/
gnutls_x509_crq_t load_request(common_info_st * info)