aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2013-12-07 23:29:04 +0100
committerAndreas Steffen <andreas.steffen@strongswan.org>2013-12-07 23:29:04 +0100
commit5da659523eb09f340a4c42393c4ff5ec3b052a6f (patch)
tree2167a87e62aea8406ed6a4a6d53b2987644e6558
parentabd4797dc1f7f3021a27e2dec932050778de4577 (diff)
downloadstrongswan-5da659523eb09f340a4c42393c4ff5ec3b052a6f.tar.bz2
strongswan-5da659523eb09f340a4c42393c4ff5ec3b052a6f.tar.xz
Optimized MGF1 implementation
-rw-r--r--src/libstrongswan/plugins/ntru/ntru_mgf1.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/libstrongswan/plugins/ntru/ntru_mgf1.c b/src/libstrongswan/plugins/ntru/ntru_mgf1.c
index 5a1770363..2338db208 100644
--- a/src/libstrongswan/plugins/ntru/ntru_mgf1.c
+++ b/src/libstrongswan/plugins/ntru/ntru_mgf1.c
@@ -68,7 +68,9 @@ METHOD(ntru_mgf1_t, get_mask, bool,
private_ntru_mgf1_t *this, size_t mask_len, u_char *mask)
{
u_char buf[HASH_SIZE_SHA512];
- size_t len;
+ size_t hash_len;
+
+ hash_len = this->hasher->get_hash_size(this->hasher);
while (mask_len > 0)
{
@@ -83,17 +85,20 @@ METHOD(ntru_mgf1_t, get_mask, bool,
this->overflow = TRUE;
}
- if (!this->hasher->get_hash(this->hasher, this->state, buf))
+ /* get the next or final mask block from the hash function */
+ if (!this->hasher->get_hash(this->hasher, this->state,
+ (mask_len < hash_len) ? buf : mask))
{
return FALSE;
}
-
- len = min(mask_len, this->hasher->get_hash_size(this->hasher));
- memcpy(mask, buf, len);
- mask_len -= len;
- mask += len;
+ if (mask_len < hash_len)
+ {
+ memcpy(mask, buf, mask_len);
+ return TRUE;
+ }
+ mask_len -= hash_len;
+ mask += hash_len;
}
-
return TRUE;
}