summaryrefslogtreecommitdiff
path: root/src/certificates.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-01-11 00:25:11 +0000
committerCarl Hetherington <cth@carlh.net>2013-01-11 00:25:11 +0000
commit67cf9c95d190b1f2a67d73c0a7f712e213b6e71a (patch)
tree5330aa403ea22459ed257ee577aaeec84053c0a4 /src/certificates.cc
parent5265670cb158bee669e62a2953b41a624d324a36 (diff)
Tweaks to management of crypto information.
Diffstat (limited to 'src/certificates.cc')
-rw-r--r--src/certificates.cc44
1 files changed, 18 insertions, 26 deletions
diff --git a/src/certificates.cc b/src/certificates.cc
index 6ed32dca..c1b15c51 100644
--- a/src/certificates.cc
+++ b/src/certificates.cc
@@ -42,6 +42,19 @@ Certificate::Certificate (X509* c)
}
+Certificate::Certificate (string const & filename)
+ : _certificate (0)
+{
+ FILE* f = fopen (filename.c_str(), "r");
+ if (!f) {
+ throw FileError ("could not open file", filename);
+ }
+
+ if (!PEM_read_X509 (f, &_certificate, 0, 0)) {
+ throw MiscError ("could not read X509 certificate");
+ }
+}
+
Certificate::~Certificate ()
{
X509_free (_certificate);
@@ -147,32 +160,6 @@ Certificate::thumbprint () const
return Kumu::base64encode (digest, 20, digest_base64, 64);
}
-/** @param filename Text file of PEM-format certificates,
- * in the order:
- *
- * 1. self-signed root certificate
- * 2. intermediate certificate signed by root certificate
- * ...
- * n. leaf certificate signed by previous intermediate.
- */
-
-CertificateChain::CertificateChain (string const & filename)
-{
- FILE* f = fopen (filename.c_str(), "r");
- if (!f) {
- throw FileError ("could not open file", filename);
- }
-
- while (1) {
- X509* c = 0;
- if (!PEM_read_X509 (f, &c, 0, 0)) {
- break;
- }
-
- _certificates.push_back (shared_ptr<Certificate> (new Certificate (c)));
- }
-}
-
shared_ptr<Certificate>
CertificateChain::root () const
{
@@ -195,3 +182,8 @@ CertificateChain::leaf_to_root () const
return c;
}
+void
+CertificateChain::add (shared_ptr<Certificate> c)
+{
+ _certificates.push_back (c);
+}