crypto-algorithms icon indicating copy to clipboard operation
crypto-algorithms copied to clipboard

There is no 32-bit WORD. That's called a DWORD

Open danielmarschall opened this issue 1 year ago • 2 comments

I noticed that I can't build sha256.c and sha256.h in Windows, because WORD is redefined with different data types.

There is no 32-bit WORD. A WORD is always 16-bit, and a DWORD would be 32-bit.

~~To fix this issue:~~

~~Change~~ typedef unsigned int WORD; // 32-bit word, change to "long" for 16-bit machines

~~To:~~ typedef unsigned long DWORD;

~~Then, change all WORD to DWORD in the code.~~


This does not only affect SHA256, but most of the other files too.

danielmarschall avatar Aug 17 '24 10:08 danielmarschall

~~Actually, this is the correct definition. Now it also works on macOS:~~

#include <stdint.h>
typedef uint32_t DWORD;

danielmarschall avatar Aug 18 '24 21:08 danielmarschall

Errata 2, now, after changing it to uint32_t, it compiles on MacOS, but now doesn't compile on Win32, because there is an incompatibility with LPDWORD*.

So, the correct and ONLY fix is to change sha256.h and sha256.c (and other files) to replace WORD with uint32_t. WORD and DWORD are reserved by the Microsoft API.

danielmarschall avatar Aug 19 '24 18:08 danielmarschall