diff options
author | Martin Willi <martin@revosec.ch> | 2012-07-05 17:26:12 +0200 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2012-07-16 14:53:32 +0200 |
commit | cbfbba7d8655fbc1feb839d240bbbace374291e3 (patch) | |
tree | e10764885e8ad14c960362c640e90d0d99fc8c77 | |
parent | ad08730a4b71594b66a5632562b7c2a22578ffeb (diff) | |
download | strongswan-cbfbba7d8655fbc1feb839d240bbbace374291e3.tar.bz2 strongswan-cbfbba7d8655fbc1feb839d240bbbace374291e3.tar.xz |
Add a return value to signer_t.allocate_signature()
-rw-r--r-- | src/libstrongswan/crypto/aead.c | 5 | ||||
-rw-r--r-- | src/libstrongswan/crypto/crypto_tester.c | 11 | ||||
-rw-r--r-- | src/libstrongswan/crypto/signers/mac_signer.c | 3 | ||||
-rw-r--r-- | src/libstrongswan/crypto/signers/signer.h | 4 | ||||
-rw-r--r-- | src/libstrongswan/plugins/af_alg/af_alg_signer.c | 3 | ||||
-rw-r--r-- | src/libtls/tls_protection.c | 6 |
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; |