diff --git a/src/opencl_nsldaps_fmt.c b/src/opencl_nsldaps_fmt.c index 3f967cf..150de47 100644 --- a/src/opencl_nsldaps_fmt.c +++ b/src/opencl_nsldaps_fmt.c @@ -71,7 +71,7 @@ static cl_uint *outbuffer2; static char *saved_plain; static char saved_salt[SALT_SIZE]; static unsigned int datai[2]; -static int have_full_hashes; +static int have_full_hashes, new_keys; static size_t global_work_size = SSHA_NUM_KEYS; static int max_keys_per_crypt = SSHA_NUM_KEYS; @@ -393,6 +393,7 @@ static int salt_hash(void *salt){ static void set_key(char *key, int index){ memcpy(&(saved_plain[index*PLAINTEXT_LENGTH]), key, PLAINTEXT_LENGTH); + new_keys = 1; } static void set_salt(void *salt){ @@ -452,9 +453,11 @@ static void crypt_all(int count) { cl_int code; - code = clEnqueueWriteBuffer(queue[gpu_id], buffer_keys, CL_TRUE, 0, - (PLAINTEXT_LENGTH) * max_keys_per_crypt, saved_plain, 0, NULL, NULL); - HANDLE_CLERROR(code, "failed in clEnqueueWriteBuffer saved_plain"); + if (new_keys) + HANDLE_CLERROR(clEnqueueWriteBuffer(queue[gpu_id], buffer_keys, + CL_TRUE, 0, (PLAINTEXT_LENGTH) * max_keys_per_crypt, + saved_plain, 0, NULL, NULL), + "failed in clEnqueueWriteBuffer saved_plain"); code = clEnqueueNDRangeKernel(queue[gpu_id], crypt_kernel, 1, NULL, &global_work_size, &local_work_size, 0, NULL, NULL); @@ -465,7 +468,7 @@ static void crypt_all(int count) code = clEnqueueReadBuffer(queue[gpu_id], buffer_out, CL_TRUE, 0, sizeof(cl_uint) * max_keys_per_crypt, outbuffer, 0, NULL, NULL); HANDLE_CLERROR(code, "failed in clEnqueueReadBuffer -reading partial hashes"); - have_full_hashes = 0; + have_full_hashes = new_keys = 0; } struct fmt_main fmt_opencl_NSLDAPS = {