aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/encoding/payloads/encrypted_payload.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libcharon/encoding/payloads/encrypted_payload.c')
-rw-r--r--src/libcharon/encoding/payloads/encrypted_payload.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libcharon/encoding/payloads/encrypted_payload.c b/src/libcharon/encoding/payloads/encrypted_payload.c
index 431f7bb28..c61fb8683 100644
--- a/src/libcharon/encoding/payloads/encrypted_payload.c
+++ b/src/libcharon/encoding/payloads/encrypted_payload.c
@@ -585,6 +585,16 @@ METHOD(encrypted_payload_t, decrypt, status_t,
return parse(this, plain);
}
+METHOD(encrypted_payload_t, decrypt_plain, status_t,
+ private_encrypted_payload_t *this, chunk_t assoc)
+{
+ if (!this->encrypted.ptr)
+ {
+ return FAILED;
+ }
+ return parse(this, this->encrypted);
+}
+
METHOD(encrypted_payload_t, decrypt_v1, status_t,
private_encrypted_payload_t *this, chunk_t iv)
{
@@ -671,3 +681,20 @@ encrypted_payload_t *encrypted_payload_create(payload_type_t type)
return &this->public;
}
+
+/*
+ * Described in header
+ */
+encrypted_payload_t *encrypted_payload_create_from_plain(payload_type_t next,
+ chunk_t plain)
+{
+ private_encrypted_payload_t *this;
+
+ this = (private_encrypted_payload_t*)encrypted_payload_create(PLV2_ENCRYPTED);
+ this->public.decrypt = _decrypt_plain;
+ this->next_payload = next;
+ this->encrypted = plain;
+ compute_length(this);
+
+ return &this->public;
+}