@cryptopal2: this is a copy