aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/encoding/payloads/encryption_payload.c
diff options
context:
space:
mode:
authorMartin Willi <martin@strongswan.org>2006-04-05 12:10:50 +0000
committerMartin Willi <martin@strongswan.org>2006-04-05 12:10:50 +0000
commit6862128151fb78f63685a8da5575783c426d64a7 (patch)
tree75920a6688ed5654fb917ecccc1e0e469480fd1f /Source/charon/encoding/payloads/encryption_payload.c
parent3dbbbf3e16366b0da33b29bbc1a4ba9a976e43a0 (diff)
downloadstrongswan-6862128151fb78f63685a8da5575783c426d64a7.tar.bz2
strongswan-6862128151fb78f63685a8da5575783c426d64a7.tar.xz
../svn-commit.tmp
Diffstat (limited to 'Source/charon/encoding/payloads/encryption_payload.c')
-rw-r--r--Source/charon/encoding/payloads/encryption_payload.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/Source/charon/encoding/payloads/encryption_payload.c b/Source/charon/encoding/payloads/encryption_payload.c
index da48c8349..70bbe9701 100644
--- a/Source/charon/encoding/payloads/encryption_payload.c
+++ b/Source/charon/encoding/payloads/encryption_payload.c
@@ -34,7 +34,7 @@
#include <encoding/parser.h>
#include <utils/iterator.h>
#include <utils/randomizer.h>
-#include <transforms/signers/signer.h>
+#include <crypto/signers/signer.h>
@@ -294,7 +294,12 @@ static status_t encrypt(private_encryption_payload_t *this)
/* build padding */
block_size = this->crypter->get_block_size(this->crypter);
padding.len = block_size - ((this->decrypted.len + 1) % block_size);
- randomizer->allocate_pseudo_random_bytes(randomizer, padding.len, &padding);
+ status = randomizer->allocate_pseudo_random_bytes(randomizer, padding.len, &padding);
+ if (status != SUCCESS)
+ {
+ randomizer->destroy(randomizer);
+ return status;
+ }
/* concatenate payload data, padding, padding len */
to_crypt.len = this->decrypted.len + padding.len + 1;
@@ -306,8 +311,14 @@ static status_t encrypt(private_encryption_payload_t *this)
/* build iv */
iv.len = block_size;
- randomizer->allocate_pseudo_random_bytes(randomizer, iv.len, &iv);
+ status = randomizer->allocate_pseudo_random_bytes(randomizer, iv.len, &iv);
randomizer->destroy(randomizer);
+ if (status != SUCCESS)
+ {
+ allocator_free_chunk(&to_crypt);
+ allocator_free_chunk(&padding);
+ return status;
+ }
this->logger->log_chunk(this->logger, RAW|LEVEL2, "data before encryption with padding", to_crypt);