diff options
author | Martin Willi <martin@strongswan.org> | 2008-06-11 14:10:02 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2008-06-11 14:10:02 +0000 |
commit | 66860d3b8f1201c865ca50d850c01f9ad698d872 (patch) | |
tree | bc540ed3bf700e5aaaeb16bfb04dce6466b975a9 /src/libstrongswan/plugins/pubkey | |
parent | d1ebd5de222c05b7a373d9f59e8e311169710d76 (diff) | |
download | strongswan-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.c | 20 |
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); } /** |