From: Tobias Brunner Date: Mon, 16 Jun 2014 13:01:28 +0000 (+0200) Subject: encrypted_payload: Encrypted payload can be constructed from plaintext X-Git-Tag: 5.2.1rc1~12^2~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=edfd33455cb772f43f0d1690266074e722a9f4fe;p=thirdparty%2Fstrongswan.git encrypted_payload: Encrypted payload can be constructed from plaintext --- diff --git a/src/libcharon/encoding/payloads/encrypted_payload.c b/src/libcharon/encoding/payloads/encrypted_payload.c index 431f7bb28b..c61fb86833 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 663360f806..be59e3c2d9 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_ @}*/