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* */
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:
cert->destroy(cert);
continue;
}
+ case BUILD_BLOB_ASN1_PEM:
case BUILD_FROM_FILE:
case BUILD_IETF_GROUP_ATTR:
{
#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>
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);
}
/**