Optimized MGF1 implementation

This commit is contained in:
Andreas Steffen
2013-12-07 23:29:04 +01:00
parent abd4797dc1
commit 5da659523e
+13 -8
View File
@@ -68,7 +68,9 @@ METHOD(ntru_mgf1_t, get_mask, bool,
private_ntru_mgf1_t *this, size_t mask_len, u_char *mask) private_ntru_mgf1_t *this, size_t mask_len, u_char *mask)
{ {
u_char buf[HASH_SIZE_SHA512]; 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) while (mask_len > 0)
{ {
@@ -83,17 +85,20 @@ METHOD(ntru_mgf1_t, get_mask, bool,
this->overflow = TRUE; 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; return FALSE;
} }
if (mask_len < hash_len)
len = min(mask_len, this->hasher->get_hash_size(this->hasher)); {
memcpy(mask, buf, len); memcpy(mask, buf, mask_len);
mask_len -= len; return TRUE;
mask += len; }
mask_len -= hash_len;
mask += hash_len;
} }
return TRUE; return TRUE;
} }