[openssl-users] CBC ciphers + TLS 1.0 protocol does not work in OpenSSL 1.0.2d

Viktor Dukhovni openssl-users at dukhovni.org
Thu Dec 10 04:47:18 UTC 2015

On Wed, Dec 09, 2015 at 11:04:35PM +0000, Matt Caswell wrote:

>     unsigned char c = op(a, b);
>     if (is_true && c != CONSTTIME_TRUE_8) {
>         printf( "Test failed for %s(%du, %du): expected %u "
>                 "(TRUE), got %u at line %d\n", op_name, a, b,

It is best to not leave "c" to the vagaries of stdarg argument
handling.  Rather, it would better to explicitly convert it to an
unsigned long, and print that.

> Test failed for constant_time_eq_8(0u, 0u): expected 255 (TRUE), got
> 4294967295 at line 85

> That big number in the output is actually 0x7FFFFFFF in hex.

Actually it is 0xffffffff, that is a 32-bit "-1".

> Please someone correct me if I'm wrong but doesn't the C spec guarantee
> that a "char" is 8 bits? In which case how can the value of "c" be
> greater than 255?????

Well, it isn't greater, but the integral promotion for printf seems
to forget that c is unsigned.

> BTW can we modify the code above to print the value of sizeof(c)?

That is 1 by definition.  What we don't know on sufficiently odd
systems is whether a char is 8 bits or not.  The unit for sizeof
is chars not bytes.  So there's no point printing that.  You might
be interested in the CHAR_BIT macro from <limits.h> instead, but
I don't think that's relevant at this time.


More information about the openssl-users mailing list