My claim about portability issues was wrong (sorry): The C-standard ensures 
that positive values are handled in the two's complement system, indeed.

However, inl % block_size == inl & (block_size-1) is true if and only if 
block_size is a power of two, which happens to be true under the current 
implementation, but may change in the future.

If block_size should be 48, then 48 % block_size == 0, but 48 & (block_size-1) 
== 32.

For this reason and for stylistic reasons, it may be worth considering to use 
consistently inl % ctx->block_size instead of inl & ctx->block_mask and int & 
(bl-1). Then the member block_mask could probably be removed.

Otherwise, an OPENSSL_assert or an appropriate comment may document the 
essential precondition that block_size is a power of two.

Cheers, Loic


________________________________
From: Matt Caswell via RT <r...@openssl.org>
Sent: Friday, June 10, 2016 12:16:02 AM
To: Loic Etienne
Cc: openssl-dev@openssl.org
Subject: [openssl.org #4561] BUG: openssl-1.0.2h, evp_enc.c, non-portable 
bitwise operation

On Mon Jun 06 18:26:50 2016, loic.etie...@qnective.com wrote:
> crypto/evp/evp_enc.c, EVP_EncryptUpdate
> line 337: inl & (ctx->block_mask)
> line 367: inl & (bl - 1) /* with bl = ctx->cipher->block_size */

Why do you consider this a problem?

Matt

--
Ticket here: http://rt.openssl.org/Ticket/Display.html?id=4561
Please log in as guest with password guest if prompted


-- 
Ticket here: http://rt.openssl.org/Ticket/Display.html?id=4561
Please log in as guest with password guest if prompted

-- 
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev

Reply via email to