aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2012-07-05 17:26:12 +0200
committerMartin Willi <martin@revosec.ch>2012-07-16 14:53:32 +0200
commitcbfbba7d8655fbc1feb839d240bbbace374291e3 (patch)
treee10764885e8ad14c960362c640e90d0d99fc8c77
parentad08730a4b71594b66a5632562b7c2a22578ffeb (diff)
downloadstrongswan-cbfbba7d8655fbc1feb839d240bbbace374291e3.tar.bz2
strongswan-cbfbba7d8655fbc1feb839d240bbbace374291e3.tar.xz
Add a return value to signer_t.allocate_signature()
-rw-r--r--src/libstrongswan/crypto/aead.c5
-rw-r--r--src/libstrongswan/crypto/crypto_tester.c11
-rw-r--r--src/libstrongswan/crypto/signers/mac_signer.c3
-rw-r--r--src/libstrongswan/crypto/signers/signer.h4
-rw-r--r--src/libstrongswan/plugins/af_alg/af_alg_signer.c3
-rw-r--r--src/libtls/tls_protection.c6
6 files changed, 25 insertions, 7 deletions
diff --git a/src/libstrongswan/crypto/aead.c b/src/libstrongswan/crypto/aead.c
index 10bcfeaf7..ede2a8132 100644
--- a/src/libstrongswan/crypto/aead.c
+++ b/src/libstrongswan/crypto/aead.c
@@ -52,7 +52,10 @@ METHOD(aead_t, encrypt, bool,
if (encrypted)
{
this->crypter->encrypt(this->crypter, plain, iv, &encr);
- this->signer->allocate_signature(this->signer, encr, &sig);
+ if (!this->signer->allocate_signature(this->signer, encr, &sig))
+ {
+ return FALSE;
+ }
*encrypted = chunk_cat("cmm", iv, encr, sig);
}
else
diff --git a/src/libstrongswan/crypto/crypto_tester.c b/src/libstrongswan/crypto/crypto_tester.c
index 2b195b380..73be38484 100644
--- a/src/libstrongswan/crypto/crypto_tester.c
+++ b/src/libstrongswan/crypto/crypto_tester.c
@@ -547,7 +547,10 @@ METHOD(crypto_tester_t, test_signer, bool,
/* allocated signature */
data = chunk_create(vector->data, vector->len);
- signer->allocate_signature(signer, data, &mac);
+ if (!signer->allocate_signature(signer, data, &mac))
+ {
+ failed = TRUE;
+ }
if (mac.len != signer->get_block_size(signer))
{
failed = TRUE;
@@ -577,7 +580,11 @@ METHOD(crypto_tester_t, test_signer, bool,
/* signature to existing buffer, using append mode */
if (data.len > 2)
{
- signer->allocate_signature(signer, chunk_create(data.ptr, 1), NULL);
+ if (!signer->allocate_signature(signer,
+ chunk_create(data.ptr, 1), NULL))
+ {
+ failed = TRUE;
+ }
signer->get_signature(signer, chunk_create(data.ptr + 1, 1), NULL);
if (!signer->verify_signature(signer, chunk_skip(data, 2),
chunk_create(vector->mac, mac.len)))
diff --git a/src/libstrongswan/crypto/signers/mac_signer.c b/src/libstrongswan/crypto/signers/mac_signer.c
index 44a8e894e..05009debb 100644
--- a/src/libstrongswan/crypto/signers/mac_signer.c
+++ b/src/libstrongswan/crypto/signers/mac_signer.c
@@ -56,7 +56,7 @@ METHOD(signer_t, get_signature, void,
}
}
-METHOD(signer_t, allocate_signature, void,
+METHOD(signer_t, allocate_signature, bool,
private_signer_t *this, chunk_t data, chunk_t *chunk)
{
if (chunk == NULL)
@@ -72,6 +72,7 @@ METHOD(signer_t, allocate_signature, void,
*chunk = chunk_alloc(this->truncation);
memcpy(chunk->ptr, mac, this->truncation);
}
+ return TRUE;
}
METHOD(signer_t, verify_signature, bool,
diff --git a/src/libstrongswan/crypto/signers/signer.h b/src/libstrongswan/crypto/signers/signer.h
index c6870e475..14b65ca0d 100644
--- a/src/libstrongswan/crypto/signers/signer.h
+++ b/src/libstrongswan/crypto/signers/signer.h
@@ -102,8 +102,10 @@ struct signer_t {
*
* @param data a chunk containing the data to sign
* @param chunk chunk which will hold the allocated signature
+ * @return TRUE if signature allocated successfully
*/
- void (*allocate_signature) (signer_t *this, chunk_t data, chunk_t *chunk);
+ __attribute__((warn_unused_result))
+ bool (*allocate_signature) (signer_t *this, chunk_t data, chunk_t *chunk);
/**
* Verify a signature.
diff --git a/src/libstrongswan/plugins/af_alg/af_alg_signer.c b/src/libstrongswan/plugins/af_alg/af_alg_signer.c
index 6cd79f8f2..103baa677 100644
--- a/src/libstrongswan/plugins/af_alg/af_alg_signer.c
+++ b/src/libstrongswan/plugins/af_alg/af_alg_signer.c
@@ -113,7 +113,7 @@ METHOD(signer_t, get_signature, void,
this->ops->hash(this->ops, data, buffer, this->block_size);
}
-METHOD(signer_t, allocate_signature, void,
+METHOD(signer_t, allocate_signature, bool,
private_af_alg_signer_t *this, chunk_t data, chunk_t *chunk)
{
if (chunk)
@@ -125,6 +125,7 @@ METHOD(signer_t, allocate_signature, void,
{
get_signature(this, data, NULL);
}
+ return TRUE;
}
METHOD(signer_t, verify_signature, bool,
diff --git a/src/libtls/tls_protection.c b/src/libtls/tls_protection.c
index dc734545c..c81c0ba84 100644
--- a/src/libtls/tls_protection.c
+++ b/src/libtls/tls_protection.c
@@ -220,7 +220,11 @@ METHOD(tls_protection_t, build, status_t,
sigheader(this->signer_out, this->seq_out, *type,
this->version, data->len);
- this->signer_out->allocate_signature(this->signer_out, *data, &mac);
+ if (!this->signer_out->allocate_signature(this->signer_out,
+ *data, &mac))
+ {
+ return FAILED;
+ }
if (this->crypter_out)
{
chunk_t padding, iv;