1. Switches to 32-bit based calculation throughout. This is faster and
less error-prone as we only byte-swap once when reading and writing.
2. Removes global state from Diablo-SHA implementation.
* Hardcode the key and ensure buffers are appropriately sized.
If you do want to build the key at runtime the following initial state gets the right sequence:
```cpp
std::linear_congruential_engine<uint32_t, 214013, 2531011, 0> engine(3193970784);
for (auto ¬ch: key)
notch = static_cast<byte>(engine() >> 16);
```
* Move public defines into sha.h, move private struct into .cpp
* Remove unused count member, clarify loop in SHA1Input
* Update circular shift to indicate desired behaviour, remove unnecessary negation.
The parameters are also reordered to match C++20 rotl/rotr and the usual order for shift operators.
Prior to this commit, the following error was encountered when compiling
as C using Clang:
Source/codec.cpp:20:2: error: must use 'struct' tag to refer to type 'CodecSignature'
CodecSignature *sig;
^
struct
- Add file documentation to about 1/4 of the files in Source
- Copy over a lot of the documentation from the sanctuary/notes repo
- Standardise all the existing documentation
- Create a configuration for Doxygen
- Add more documentation (engine.cpp is now fully documented)
Now diablo.h is treated in the same way as all other header files of
Source, as it only contains the declarations of global variables and
functions of diablo.cpp.
Besides consistency, this also enables mods to include diablo.h just
like any other header file without having to include every header file
(and without having to include C++ specific aspects of the now all.h).