#include #include #include #include typedef union uwb { unsigned w; unsigned char b[4]; } WBunion; typedef unsigned Digest[4]; unsigned f0( unsigned abcd[] ){ return ( abcd[1] & abcd[2]) | (~abcd[1] & abcd[3]);} unsigned f1( unsigned abcd[] ){ return ( abcd[3] & abcd[1]) | (~abcd[3] & abcd[2]);} unsigned f2( unsigned abcd[] ){ return abcd[1] ^ abcd[2] ^ abcd[3];} unsigned f3( unsigned abcd[] ){ return abcd[2] ^ (abcd[1] |~ abcd[3]);} typedef unsigned (*DgstFctn)(unsigned a[]); unsigned *calcKs( unsigned *k) { double s, pwr; int i; pwr = pow( 2, 32); for (i=0; i<64; i++) { s = fabs(sin(1+i)); k[i] = (unsigned)( s * pwr ); } return k; } // ROtate v Left by amt bits unsigned rol( unsigned v, short amt ) { unsigned msk1 = (1<>(32-amt)) & msk1) | ((v<