Paul Eggert wrote on 2016-10-20:
> I'll leave rijndael-api-fst.c for Simon.
I'm still seeing the warnings with gcc-7.1:
rijndael-api-fst.c: In function 'rijndaelBlockEncrypt':
rijndael-api-fst.c:234:11: warning: dereferencing type-punned pointer will
break strict-aliasing rules [-Wstrict-aliasing]
((uint32_t *) block)[0] = ((uint32_t *) input)[0] ^
^
rijndael-api-fst.c: In function 'rijndaelPadEncrypt':
rijndael-api-fst.c:317:11: warning: dereferencing type-punned pointer will
break strict-aliasing rules [-Wstrict-aliasing]
((uint32_t *) block)[0] = ((uint32_t *) input)[0] ^
^
rijndael-api-fst.c: In function 'rijndaelBlockDecrypt':
rijndael-api-fst.c:390:11: warning: dereferencing type-punned pointer will
break strict-aliasing rules [-Wstrict-aliasing]
((uint32_t *) block)[0] ^= ((uint32_t *) iv)[0];
^
rijndael-api-fst.c: In function 'rijndaelPadDecrypt':
rijndael-api-fst.c:484:11: warning: dereferencing type-punned pointer will
break strict-aliasing rules [-Wstrict-aliasing]
((uint32_t *) block)[0] ^= ((uint32_t *) cipher->IV)[0];
^
rijndael-api-fst.c:484:11: warning: dereferencing type-punned pointer will
break strict-aliasing rules [-Wstrict-aliasing]
rijndael-api-fst.c:495:7: warning: dereferencing type-punned pointer will break
strict-aliasing rules [-Wstrict-aliasing]
((uint32_t *) block)[0] ^= ((uint32_t *) cipher->IV)[0];
^
rijndael-api-fst.c:495:7: warning: dereferencing type-punned pointer will break
strict-aliasing rules [-Wstrict-aliasing]
In gnupg's libgcrypt, Werner fixed it like this:
https://dev.gnupg.org/rCf17d50bbd31b1faa24af1e46c10bba845becf585
https://dev.gnupg.org/rCdfb4673da8ee52d95e0a62c9f49ca8599943f22e
But this fix is only effective for GCC. How could a compiler-independent fix
look like?
Bruno