This is the EuCrypt library that Eulora server (S.MG) uses for its communication needs. To compile the whole EuCrypt library, simply run in the eucrypt folder (the -O3 switch is needed for specifying optimisation level for Serpent - if you don't care about that, you can skip this switch): gprbuild -O3 To cleanup (recursively), simply run in the eucrypt folder: gprclean -r To understand EuCrypt, start from http://www.dianacoman.com/2017/12/07/introducing-eucrypt/ NB: EuCrypt aims to *keep trying* to accomplish a task. In particular, when entropy is needed, it will keep asking for as many random bits as it needs from the configured entropy source and it will not proceed unless those are provided. Components: 1. mpi Arbitrary length integers and operations. Implemented in C. 2. smg_bit_keccak Bit-level implementation of the Keccak sponge according to The Keccak Reference v 3.0. Implemented in Ada. 3. smg_keccak Word (64 bits) level implementation of the Keccak sponge according to The Keccak Reference v 3.0. NOTE: Keccak rate has its own type (Keccak_Rate) that makes clear the valid range (1 to width of state). Calling Keccak sponge with a bitrate outside the valid range will CORRECTLY cause the execution to abort with a constraint_error. Implemented in Ada. 4. smg_serpent Serpent hash method. Implemented in Ada. 5. smg_rsa RSA implementation using TMSR specification. Implemented in C.