diff options
author | Andreas Steffen <andreas.steffen@strongswan.org> | 2013-12-07 23:29:04 +0100 |
---|---|---|
committer | Andreas Steffen <andreas.steffen@strongswan.org> | 2013-12-07 23:29:04 +0100 |
commit | 5da659523eb09f340a4c42393c4ff5ec3b052a6f (patch) | |
tree | 2167a87e62aea8406ed6a4a6d53b2987644e6558 | |
parent | abd4797dc1f7f3021a27e2dec932050778de4577 (diff) | |
download | strongswan-5da659523eb09f340a4c42393c4ff5ec3b052a6f.tar.bz2 strongswan-5da659523eb09f340a4c42393c4ff5ec3b052a6f.tar.xz |
Optimized MGF1 implementation
-rw-r--r-- | src/libstrongswan/plugins/ntru/ntru_mgf1.c | 21 |
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; } |