reimplemented scrypt