Implemented support for preinstalled PGP certificates in charon
This commit is contained in:
@@ -240,8 +240,8 @@ static enumerator_t* create_cert_enumerator(private_stroke_cred_t *this,
|
|||||||
(cert == CERT_X509_CRL)? (void*)crl_filter : (void*)ac_filter,
|
(cert == CERT_X509_CRL)? (void*)crl_filter : (void*)ac_filter,
|
||||||
data, (void*)id_data_destroy);
|
data, (void*)id_data_destroy);
|
||||||
}
|
}
|
||||||
if (cert != CERT_X509 && cert != CERT_ANY)
|
if (cert != CERT_X509 && cert != CERT_GPG && cert != CERT_ANY)
|
||||||
{ /* we only have X509 certificates. TODO: ACs? */
|
{ /* we have X509/PGP certificates. TODO: ACs? */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
data = malloc_thing(id_data_t);
|
data = malloc_thing(id_data_t);
|
||||||
@@ -484,9 +484,8 @@ static certificate_t* load_peer(private_stroke_cred_t *this, char *filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cert = lib->creds->create(lib->creds,
|
cert = lib->creds->create(lib->creds,
|
||||||
CRED_CERTIFICATE, CERT_X509,
|
CRED_CERTIFICATE, CERT_ANY,
|
||||||
BUILD_FROM_FILE, path,
|
BUILD_FROM_FILE, path,
|
||||||
BUILD_X509_FLAG, 0,
|
|
||||||
BUILD_END);
|
BUILD_END);
|
||||||
if (cert)
|
if (cert)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -375,6 +375,11 @@ static void *load_from_blob(chunk_t blob, credential_type_t type, int subtype,
|
|||||||
* RSA for PGP keys, which is actually wrong. */
|
* RSA for PGP keys, which is actually wrong. */
|
||||||
subtype = KEY_ANY;
|
subtype = KEY_ANY;
|
||||||
}
|
}
|
||||||
|
/* if CERT_ANY is given, ASN1 encoded blob is handled as X509 */
|
||||||
|
if (type == CRED_CERTIFICATE && subtype == CERT_ANY)
|
||||||
|
{
|
||||||
|
subtype = pgp ? CERT_GPG : CERT_X509;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cred = lib->creds->create(lib->creds, type, subtype,
|
cred = lib->creds->create(lib->creds, type, subtype,
|
||||||
pgp ? BUILD_BLOB_PGP : BUILD_BLOB_ASN1_DER, blob,
|
pgp ? BUILD_BLOB_PGP : BUILD_BLOB_ASN1_DER, blob,
|
||||||
|
|||||||
@@ -347,7 +347,7 @@ static bool parse_user_id(private_pgp_cert_t *this, chunk_t packet)
|
|||||||
/**
|
/**
|
||||||
* See header.
|
* See header.
|
||||||
*/
|
*/
|
||||||
pgp_cert_t *pgp_cert_load(certificate_t type, va_list args)
|
pgp_cert_t *pgp_cert_load(certificate_type_t type, va_list args)
|
||||||
{
|
{
|
||||||
chunk_t packet, blob = chunk_empty;
|
chunk_t packet, blob = chunk_empty;
|
||||||
pgp_packet_tag_t tag;
|
pgp_packet_tag_t tag;
|
||||||
|
|||||||
@@ -43,6 +43,6 @@ struct pgp_cert_t {
|
|||||||
* @param args builder_part_t argument list
|
* @param args builder_part_t argument list
|
||||||
* @return builder instance
|
* @return builder instance
|
||||||
*/
|
*/
|
||||||
pgp_cert_t *pgp_cert_load(certificate_t type, va_list args);
|
pgp_cert_t *pgp_cert_load(certificate_type_t type, va_list args);
|
||||||
|
|
||||||
#endif /* PGP_CERT_ @}*/
|
#endif /* PGP_CERT_ @}*/
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include <library.h>
|
#include <library.h>
|
||||||
#include "pgp_builder.h"
|
#include "pgp_builder.h"
|
||||||
#include "pgp_encoder.h"
|
#include "pgp_encoder.h"
|
||||||
|
#include "pgp_cert.h"
|
||||||
|
|
||||||
typedef struct private_pgp_plugin_t private_pgp_plugin_t;
|
typedef struct private_pgp_plugin_t private_pgp_plugin_t;
|
||||||
|
|
||||||
@@ -42,6 +43,9 @@ static void destroy(private_pgp_plugin_t *this)
|
|||||||
lib->creds->remove_builder(lib->creds,
|
lib->creds->remove_builder(lib->creds,
|
||||||
(builder_function_t)pgp_private_key_load);
|
(builder_function_t)pgp_private_key_load);
|
||||||
|
|
||||||
|
lib->creds->remove_builder(lib->creds,
|
||||||
|
(builder_function_t)pgp_cert_load);
|
||||||
|
|
||||||
lib->encoding->remove_encoder(lib->encoding, pgp_encoder_encode);
|
lib->encoding->remove_encoder(lib->encoding, pgp_encoder_encode);
|
||||||
|
|
||||||
free(this);
|
free(this);
|
||||||
@@ -65,6 +69,9 @@ plugin_t *plugin_create()
|
|||||||
lib->creds->add_builder(lib->creds, CRED_PRIVATE_KEY, KEY_RSA,
|
lib->creds->add_builder(lib->creds, CRED_PRIVATE_KEY, KEY_RSA,
|
||||||
(builder_function_t)pgp_private_key_load);
|
(builder_function_t)pgp_private_key_load);
|
||||||
|
|
||||||
|
lib->creds->add_builder(lib->creds, CRED_CERTIFICATE, CERT_GPG,
|
||||||
|
(builder_function_t)pgp_cert_load);
|
||||||
|
|
||||||
lib->encoding->add_encoder(lib->encoding, pgp_encoder_encode);
|
lib->encoding->add_encoder(lib->encoding, pgp_encoder_encode);
|
||||||
|
|
||||||
return &this->public.plugin;
|
return &this->public.plugin;
|
||||||
|
|||||||
Reference in New Issue
Block a user