aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/plugins/pubkey
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2008-06-11 14:10:02 +0000
committerMartin Willi <martin@strongswan.org>2008-06-11 14:10:02 +0000
commit66860d3b8f1201c865ca50d850c01f9ad698d872 (patch)
treebc540ed3bf700e5aaaeb16bfb04dce6466b975a9 /src/libstrongswan/plugins/pubkey
parentd1ebd5de222c05b7a373d9f59e8e311169710d76 (diff)
downloadstrongswan-66860d3b8f1201c865ca50d850c01f9ad698d872.tar.bz2
strongswan-66860d3b8f1201c865ca50d850c01f9ad698d872.tar.xz
loading PEM encoded public keys
Diffstat (limited to 'src/libstrongswan/plugins/pubkey')
-rw-r--r--src/libstrongswan/plugins/pubkey/pubkey_public_key.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/libstrongswan/plugins/pubkey/pubkey_public_key.c b/src/libstrongswan/plugins/pubkey/pubkey_public_key.c
index 1291b6ede..5a072c482 100644
--- a/src/libstrongswan/plugins/pubkey/pubkey_public_key.c
+++ b/src/libstrongswan/plugins/pubkey/pubkey_public_key.c
@@ -20,6 +20,7 @@
#include "pubkey_public_key.h"
#include <debug.h>
+#include <asn1/pem.h>
#include <asn1/oid.h>
#include <asn1/asn1.h>
#include <asn1/asn1_parser.h>
@@ -131,19 +132,34 @@ static void add(private_builder_t *this, builder_part_t part, ...)
DBG1("ignoring surplus build part %N", builder_part_names, part);
return;
}
+ va_start(args, part);
switch (part)
{
case BUILD_BLOB_ASN1_DER:
{
- va_start(args, part);
this->key = load(va_arg(args, chunk_t));
- va_end(args);
+ break;
+ }
+ case BUILD_BLOB_ASN1_PEM:
+ {
+ bool pgp;
+ char *pem;
+ chunk_t blob;
+
+ pem = va_arg(args, char *);
+ blob = chunk_clone(chunk_create(pem, strlen(pem)));
+ if (pem_to_bin(&blob, &chunk_empty, &pgp))
+ {
+ this->key = load(chunk_clone(blob));
+ }
+ free(blob.ptr);
break;
}
default:
DBG1("ignoring unsupported build part %N", builder_part_names, part);
break;
}
+ va_end(args);
}
/**