From edfd33455cb772f43f0d1690266074e722a9f4fe Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 16 Jun 2014 15:01:28 +0200 Subject: encrypted_payload: Encrypted payload can be constructed from plaintext --- .../encoding/payloads/encrypted_payload.c | 27 ++++++++++++++++++++++ .../encoding/payloads/encrypted_payload.h | 11 +++++++++ 2 files changed, 38 insertions(+) (limited to 'src') 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; +} diff --git a/src/libcharon/encoding/payloads/encrypted_payload.h b/src/libcharon/encoding/payloads/encrypted_payload.h index 663360f80..be59e3c2d 100644 --- a/src/libcharon/encoding/payloads/encrypted_payload.h +++ b/src/libcharon/encoding/payloads/encrypted_payload.h @@ -118,4 +118,15 @@ struct encrypted_payload_t { */ encrypted_payload_t *encrypted_payload_create(payload_type_t type); +/** + * Creates an encrypted payload with the given plain text data and next payload + * type. + * + * @param next next payload type + * @param plain plaintext data (gets adopted) + * @return encrypted_payload_t object + */ +encrypted_payload_t *encrypted_payload_create_from_plain(payload_type_t next, + chunk_t plain); + #endif /** ENCRYPTED_PAYLOAD_H_ @}*/ -- cgit v1.2.3