aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon/encoding/payloads
diff options
context:
space:
mode:
Diffstat (limited to 'src/charon/encoding/payloads')
-rw-r--r--src/charon/encoding/payloads/cert_payload.c43
-rw-r--r--src/charon/encoding/payloads/cert_payload.h40
-rw-r--r--src/charon/encoding/payloads/payload.h2
3 files changed, 55 insertions, 30 deletions
diff --git a/src/charon/encoding/payloads/cert_payload.c b/src/charon/encoding/payloads/cert_payload.c
index 146d42eda..18bf24d47 100644
--- a/src/charon/encoding/payloads/cert_payload.c
+++ b/src/charon/encoding/payloads/cert_payload.c
@@ -28,22 +28,25 @@
/**
* String mappings for cert_encoding_t.
*/
-mapping_t cert_encoding_m[] = {
- {PKCS7_WRAPPED_X509_CERTIFICATE, "PKCS7_WRAPPED_X509_CERTIFICATE"},
- {PGP_CERTIFICATE, "PGP_CERTIFICATE"},
- {DNS_SIGNED_KEY, "DNS_SIGNED_KEY"},
- {X509_CERTIFICATE_SIGNATURE, "X509_CERTIFICATE_SIGNATURE"},
- {KERBEROS_TOKEN, "KERBEROS_TOKEN"},
- {CERTIFICATE_REVOCATION_LIST, "CERTIFICATE_REVOCATION_LIST"},
- {AUTHORITY_REVOCATION_LIST, "AUTHORITY_REVOCATION_LIST"},
- {SPKI_CERTIFICATE, "SPKI_CERTIFICATE"},
- {X509_CERTIFICATE_ATTRIBUTE, "X509_CERTIFICATE_ATTRIBUTE"},
- {RAW_SA_KEY, "RAW_SA_KEY"},
- {HASH_AND_URL_X509_CERTIFICATE, "HASH_AND_URL_X509_CERTIFICATE"},
- {HASH_AND_URL_X509_BUNDLE, "HASH_AND_URL_X509_BUNDLE"},
- {MAPPING_END, NULL}
+static const char *const cert_encoding_name[] = {
+ "CERT_NONE",
+ "CERT_PKCS7_WRAPPED_X509",
+ "CERT_PGP",
+ "CERT_DNS_SIGNED_KEY",
+ "CERT_X509_SIGNATURE",
+ "CERT_X509_KEY_EXCHANGE",
+ "CERT_KERBEROS_TOKENS",
+ "CERT_CRL",
+ "CERT_ARL",
+ "CERT_SPKI",
+ "CERT_X509_ATTRIBUTE",
+ "CERT_RAW_RSA_KEY",
+ "CERT_X509_HASH_AND_URL",
+ "CERT_X509_HASH_AND_URL_BUNDLE"
};
+enum_names cert_encoding_names =
+ { CERT_NONE, CERT_X509_HASH_AND_URL_BUNDLE, cert_encoding_name, NULL };
typedef struct private_cert_payload_t private_cert_payload_t;
@@ -277,3 +280,15 @@ cert_payload_t *cert_payload_create()
return (&(this->public));
}
+
+/*
+ * Described in header
+ */
+cert_payload_t *cert_payload_create_from_x509(x509_t *cert)
+{
+ cert_payload_t *this = cert_payload_create();
+
+ this->set_cert_encoding(this, CERT_X509_SIGNATURE);
+ this->set_data(this, cert->get_certificate(cert));
+ return this;
+} \ No newline at end of file
diff --git a/src/charon/encoding/payloads/cert_payload.h b/src/charon/encoding/payloads/cert_payload.h
index 51620d699..4c40ed7dc 100644
--- a/src/charon/encoding/payloads/cert_payload.h
+++ b/src/charon/encoding/payloads/cert_payload.h
@@ -24,6 +24,7 @@
#define CERT_PAYLOAD_H_
#include <types.h>
+#include <crypto/x509.h>
#include <encoding/payloads/payload.h>
/**
@@ -42,18 +43,19 @@ typedef enum cert_encoding_t cert_encoding_t;
* @ingroup payloads
*/
enum cert_encoding_t {
- PKCS7_WRAPPED_X509_CERTIFICATE = 1,
- PGP_CERTIFICATE = 2,
- DNS_SIGNED_KEY = 3,
- X509_CERTIFICATE_SIGNATURE = 4,
- KERBEROS_TOKEN = 6,
- CERTIFICATE_REVOCATION_LIST = 7,
- AUTHORITY_REVOCATION_LIST = 8,
- SPKI_CERTIFICATE = 9,
- X509_CERTIFICATE_ATTRIBUTE = 10,
- RAW_SA_KEY = 11,
- HASH_AND_URL_X509_CERTIFICATE = 12,
- HASH_AND_URL_X509_BUNDLE = 13
+ CERT_NONE = 0,
+ CERT_PKCS7_WRAPPED_X509 = 1,
+ CERT_PGP = 2,
+ CERT_DNS_SIGNED_KEY = 3,
+ CERT_X509_SIGNATURE = 4,
+ CERT_KERBEROS_TOKEN = 6,
+ CERT_CRL = 7,
+ CERT_ARL = 8,
+ CERT_SPKI = 9,
+ CERT_X509_ATTRIBUTE = 10,
+ CERT_RAW_RSA_KEY = 11,
+ CERT_X509_HASH_AND_URL = 12,
+ CERT_X509_HASH_AND_URL_BUNDLE = 13
};
/**
@@ -61,8 +63,7 @@ enum cert_encoding_t {
*
* @ingroup payloads
*/
-extern mapping_t cert_encoding_m[];
-
+extern enum_names cert_encoding_names;
typedef struct cert_payload_t cert_payload_t;
@@ -145,11 +146,20 @@ struct cert_payload_t {
/**
* @brief Creates an empty cert_payload_t object.
*
- * @return cert_payload_t object
+ * @return cert_payload_t object
*
* @ingroup payloads
*/
cert_payload_t *cert_payload_create(void);
+/**
+ * @brief Creates a cert_payload_t object with an X.509 certificate.
+ *
+ * @param cert X.509 certificate
+ * @return cert_payload_t object
+ *
+ * @ingroup payloads
+ */
+cert_payload_t *cert_payload_create_from_x509(x509_t *cert);
#endif /* CERT_PAYLOAD_H_ */
diff --git a/src/charon/encoding/payloads/payload.h b/src/charon/encoding/payloads/payload.h
index fc3457832..bc593f618 100644
--- a/src/charon/encoding/payloads/payload.h
+++ b/src/charon/encoding/payloads/payload.h
@@ -199,7 +199,7 @@ typedef struct payload_t payload_t;
* handling of all payloads.
*
* @b Constructors:
- * - payload_create() with the payload to instanciate.
+ * - payload_create() with the payload to instantiate.
*
* @ingroup payloads
*/