#include <u.h>
#include <libc.h>
#include <auth.h>
#include <mp.h>
#include <libsec.h>

static char*
readfile(char *name)
{
	int fd;
	char *s;
	Dir *d;

	fd = open(name, OREAD);
	if(fd < 0)
		return nil;
	if((d = dirfstat(fd)) == nil)
		return nil;
	s = malloc(d->length + 1);
	if(s == nil || readn(fd, s, d->length) != d->length){
		free(s);
		free(d);
		close(fd);
		return nil;
	}
	close(fd);
	s[d->length] = '\0';
	free(d);
	return s;
}

uchar*
readcert(char *filename, int *pcertlen)
{
	char *pem;
	uchar *binary;

	pem = readfile(filename);
	if(pem == nil){
		werrstr("can't read %s", filename);
		return nil;
	}
	binary = decodepem(pem, "CERTIFICATE", pcertlen, nil);
	free(pem);
	if(binary == nil){
		werrstr("can't parse %s", filename);
		return nil;
	}
	return binary;
}


PEMChain *
readcertchain(char *filename)
{
	char *chfile;
	PEMChain *chp;

	chfile = readfile(filename);
	if (chfile == nil) {
		werrstr("can't read %s", filename);
		return nil;
	}
	chp = decodepemchain(chfile, "CERTIFICATE");
	return chp;
}

