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 | |
parent | d1ebd5de222c05b7a373d9f59e8e311169710d76 (diff) | |
download | strongswan-66860d3b8f1201c865ca50d850c01f9ad698d872.tar.bz2 strongswan-66860d3b8f1201c865ca50d850c01f9ad698d872.tar.xz |
loading PEM encoded public keys
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/credentials/builder.c | 1 | ||||
-rw-r--r-- | src/libstrongswan/credentials/builder.h | 2 | ||||
-rw-r--r-- | src/libstrongswan/credentials/credential_factory.c | 2 | ||||
-rw-r--r-- | src/libstrongswan/plugins/pubkey/pubkey_public_key.c | 20 |
4 files changed, 23 insertions, 2 deletions
diff --git a/src/libstrongswan/credentials/builder.c b/src/libstrongswan/credentials/builder.c index 6a03cbd54..c13a8a860 100644 --- a/src/libstrongswan/credentials/builder.c +++ b/src/libstrongswan/credentials/builder.c @@ -18,6 +18,7 @@ ENUM(builder_part_names, BUILD_BLOB_ASN1_DER, BUILD_END, "BUILD_FROM_FILE", "BUILD_BLOB_ASN1_DER", + "BUILD_BLOB_ASN1_PEM", "BUILD_KEY_SIZE", "BUILD_SIGNING_KEY", "BUILD_SIGNING_CERT", diff --git a/src/libstrongswan/credentials/builder.h b/src/libstrongswan/credentials/builder.h index 54aca33da..22c106b7a 100644 --- a/src/libstrongswan/credentials/builder.h +++ b/src/libstrongswan/credentials/builder.h @@ -42,6 +42,8 @@ enum builder_part_t { BUILD_FROM_FILE, /** DER encoded ASN1 blob, chunk_t */ BUILD_BLOB_ASN1_DER, + /** PEM encoded ASN1 blob, null terminated char* */ + BUILD_BLOB_ASN1_PEM, /** key size in bits, as used for key generation, u_int */ BUILD_KEY_SIZE, /** private key to use for signing, private_key_t* */ diff --git a/src/libstrongswan/credentials/credential_factory.c b/src/libstrongswan/credentials/credential_factory.c index de4c2fb43..951ddb58a 100644 --- a/src/libstrongswan/credentials/credential_factory.c +++ b/src/libstrongswan/credentials/credential_factory.c @@ -165,6 +165,7 @@ static void* create(private_credential_factory_t *this, credential_type_t type, case BUILD_NOT_AFTER_TIME: builder->add(builder, part, va_arg(args, time_t)); continue; + case BUILD_BLOB_ASN1_PEM: case BUILD_FROM_FILE: case BUILD_SIGNING_KEY: case BUILD_PUBLIC_KEY: @@ -261,6 +262,7 @@ static void* create(private_credential_factory_t *this, credential_type_t type, cert->destroy(cert); continue; } + case BUILD_BLOB_ASN1_PEM: case BUILD_FROM_FILE: case BUILD_IETF_GROUP_ATTR: { 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); } /** |