A recent password hashing competition set out the following detailed technical requirement:-
that the API should include, but may not be limited to, a function with the following prototype:
int PHS(void *out, size_t outlen, const void *in, size_t inlen, const void *salt, size_t saltlen, unsigned int t_cost, unsigned int m_cost);
adding that: the
m_cost arguments are intended to parameterize time and memory usage, respectively, however this is not a strict requirement (only one parameter may be effective,
m_cost might affect time, etc.).
The prototype does not require a parallelism parameter, yet the winner (Argon2) has such a parameter. Therefore parallel computation figures prominently in that algorithm.
Was it not possible to code a function that is not susceptible to speed up from parallel computation? So rather than accommodate multiple cores/threads, find an algorithm that is totally and mathematically immune instead. Do such functions not exist?