static void init(struct fmt_main *self) { char *kpc; global_work_size = MAX_KEYS_PER_CRYPT; opencl_init("$JOHN/md4_kernel.cl", ocl_gpu_id, platform_id); crypt_kernel = clCreateKernel(program[ocl_gpu_id], "md4", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel. Double-check kernel name?"); if( ((kpc = getenv("LWS")) == NULL) || (atoi(kpc) == 0)) { create_clobj(MD4_NUM_KEYS); opencl_find_best_workgroup(self); release_clobj(); }else { local_work_size = atoi(kpc); } if( (kpc = getenv("GWS")) == NULL){ max_keys_per_crypt = MD4_NUM_KEYS; create_clobj(MD4_NUM_KEYS); } else { if (atoi(kpc) == 0){ //user chose to die of boredom max_keys_per_crypt = MD4_NUM_KEYS; create_clobj(MD4_NUM_KEYS); find_best_kpc(); } else { max_keys_per_crypt = atoi(kpc); create_clobj(max_keys_per_crypt); } } fprintf(stderr, "Local work size (LWS) %d, Global work size (GWS) %d\n",(int)local_work_size, max_keys_per_crypt); self->params.max_keys_per_crypt = max_keys_per_crypt; }
static void init(struct fmt_main *self) { host_pass = calloc(KEYS_PER_CRYPT, sizeof(pwsafe_pass)); host_hash = calloc(KEYS_PER_CRYPT, sizeof(pwsafe_hash)); host_salt = calloc(1, sizeof(pwsafe_salt)); opencl_init("$JOHN/pwsafe_kernel.cl", ocl_gpu_id, platform_id); ///Alocate memory on the GPU mem_salt = clCreateBuffer(context[ocl_gpu_id], CL_MEM_READ_ONLY, saltsize, NULL, &ret_code); HANDLE_CLERROR(ret_code, "Error while allocating memory for salt"); mem_in = clCreateBuffer(context[ocl_gpu_id], CL_MEM_READ_ONLY, insize, NULL, &ret_code); HANDLE_CLERROR(ret_code, "Error while allocating memory for passwords"); mem_out = clCreateBuffer(context[ocl_gpu_id], CL_MEM_WRITE_ONLY, outsize, NULL, &ret_code); HANDLE_CLERROR(ret_code, "Error while allocating memory for hashes"); ///Assign kernel parameters crypt_kernel = clCreateKernel(program[ocl_gpu_id], KERNEL_NAME, &ret_code); HANDLE_CLERROR(ret_code, "Error while creating kernel"); clSetKernelArg(crypt_kernel, 0, sizeof(mem_in), &mem_in); clSetKernelArg(crypt_kernel, 1, sizeof(mem_out), &mem_out); clSetKernelArg(crypt_kernel, 2, sizeof(mem_salt), &mem_salt); opencl_find_best_workgroup(self); //local_work_size=256; atexit(release_all); }
static void init(struct fmt_main *_self) { CRC32_t crc; char build_opts[64]; cl_int cl_error; self = _self; CRC32_Init(&crc); snprintf(build_opts, sizeof(build_opts), "-DPLAINTEXT_LENGTH=%d -DHASH_LOOPS=%d", PLAINTEXT_LENGTH, HASH_LOOPS); opencl_init("$JOHN/kernels/7z_kernel.cl", gpu_id, build_opts); sevenzip_init = clCreateKernel(program[gpu_id], "sevenzip_init", &cl_error); HANDLE_CLERROR(cl_error, "Error creating kernel"); crypt_kernel = clCreateKernel(program[gpu_id], "sevenzip_crypt", &cl_error); HANDLE_CLERROR(cl_error, "Error creating kernel"); if (pers_opts.target_enc == UTF_8) self->params.plaintext_length = MIN(125, 3 * PLAINTEXT_LENGTH); }
static void init(struct fmt_main *_self) { char build_opts[64]; static char valgo[sizeof(ALGORITHM_NAME) + 8] = ""; self = _self; opencl_preinit(); /* VLIW5 does better with just 2x vectors due to GPR pressure */ if (!options.v_width && amd_vliw5(device_info[gpu_id])) v_width = 2; else v_width = opencl_get_vector_width(gpu_id, sizeof(cl_int)); if (v_width > 1) { /* Run vectorized kernel */ snprintf(valgo, sizeof(valgo), ALGORITHM_NAME " %ux", v_width); self->params.algorithm_name = valgo; } snprintf(build_opts, sizeof(build_opts), "-DHASH_LOOPS=%u -DOUTLEN=%u " "-DPLAINTEXT_LENGTH=%u -DV_WIDTH=%u", HASH_LOOPS, OUTLEN, PLAINTEXT_LENGTH, v_width); opencl_init("$JOHN/kernels/pbkdf1_hmac_sha1_kernel.cl", gpu_id, build_opts); pbkdf1_init = clCreateKernel(program[gpu_id], "pbkdf1_init", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel"); crypt_kernel = pbkdf1_loop = clCreateKernel(program[gpu_id], "pbkdf1_loop", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel"); pbkdf1_final = clCreateKernel(program[gpu_id], "pbkdf1_final", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel"); }
static void fmt_ssha_init(struct fmt_main *pFmt) { char *kpc; opencl_init("$JOHN/ssha_opencl_kernel.cl", gpu_id); // create kernel to execute crypt_kernel = clCreateKernel(program[gpu_id], "sha1_crypt_kernel", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel. Double-check kernel name?"); if( (kpc = getenv("LWS")) == NULL){ create_clobj(SSHA_NUM_KEYS); find_best_workgroup(); release_clobj(); }else { local_work_size = atoi(kpc); } if( (kpc = getenv("KPC")) == NULL){ max_keys_per_crypt = SSHA_NUM_KEYS; create_clobj(SSHA_NUM_KEYS); } else { if (atoi(kpc) == 0){ //user chose to die of boredom max_keys_per_crypt = SSHA_NUM_KEYS; create_clobj(SSHA_NUM_KEYS); find_best_kpc(); } else { max_keys_per_crypt = atoi(kpc); create_clobj(max_keys_per_crypt); } } printf("Local work size (LWS) %d, Keys per crypt (KPC) %d\n",(int)local_work_size,max_keys_per_crypt); pFmt->params.max_keys_per_crypt = max_keys_per_crypt; }
static void init(struct fmt_main *self) { char build_opts[96]; size_t gws_limit = 4 << 20; if (pers_opts.target_enc == UTF_8) max_len = self->params.plaintext_length = MIN(125, 3 * PLAINTEXT_LENGTH); snprintf(build_opts, sizeof(build_opts), "-D%s -DPLAINTEXT_LENGTH=%u", cp_id2macro(pers_opts.target_enc), PLAINTEXT_LENGTH); opencl_init("$JOHN/kernels/oldoffice_kernel.cl", gpu_id, build_opts); /* create kernels to execute */ oldoffice_utf16 = clCreateKernel(program[gpu_id], "oldoffice_utf16", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel. Double-check kernel name?"); crypt_kernel = oldoffice_md5 = clCreateKernel(program[gpu_id], "oldoffice_md5", &ret_code); oldoffice_sha1 = clCreateKernel(program[gpu_id], "oldoffice_sha1", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel. Double-check kernel name?"); // Initialize openCL tuning (library) for this format. opencl_init_auto_setup(SEED, 0, NULL, warn, 3, self, create_clobj, release_clobj, sizeof(mid_t), gws_limit); // Auto tune execution from shared/included code. autotune_run(self, 1, gws_limit, 1000000000); }
static void init(struct fmt_main *self) { char *temp; if ((temp = getenv("LWS"))) local_work_size = atoi(temp); else local_work_size = cpu(device_info[ocl_gpu_id]) ? 1 : 64; if ((temp = getenv("GWS"))) global_work_size = atoi(temp); else global_work_size = MAX_KEYS_PER_CRYPT; opencl_init("$JOHN/kernels/sha512_kernel.cl", ocl_gpu_id); gkey = mem_calloc(global_work_size * sizeof(sha512_key)); ghash = mem_calloc(global_work_size * sizeof(sha512_hash)); ///Allocate memory on the GPU mem_in = clCreateBuffer(context[ocl_gpu_id], CL_MEM_READ_ONLY, insize, NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for passwords"); mem_out = clCreateBuffer(context[ocl_gpu_id], CL_MEM_WRITE_ONLY, outsize, NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for hashes"); mem_binary = clCreateBuffer(context[ocl_gpu_id], CL_MEM_READ_ONLY, sizeof(uint64_t), NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for binary"); mem_cmp = clCreateBuffer(context[ocl_gpu_id], CL_MEM_WRITE_ONLY, sizeof(uint32_t), NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for cmp_all result"); ///Assign crypt kernel parameters crypt_kernel = clCreateKernel(program[ocl_gpu_id], KERNEL_NAME, &ret_code); HANDLE_CLERROR(ret_code,"Error while creating crypt_kernel"); clSetKernelArg(crypt_kernel, 0, sizeof(mem_in), &mem_in); clSetKernelArg(crypt_kernel, 1, sizeof(mem_out), &mem_out); ///Assign cmp kernel parameters cmp_kernel = clCreateKernel(program[ocl_gpu_id], CMP_KERNEL_NAME, &ret_code); HANDLE_CLERROR(ret_code,"Error while creating cmp_kernel"); clSetKernelArg(cmp_kernel, 0, sizeof(mem_binary), &mem_binary); clSetKernelArg(cmp_kernel, 1, sizeof(mem_out), &mem_out); clSetKernelArg(cmp_kernel, 2, sizeof(mem_cmp), &mem_cmp); self->params.max_keys_per_crypt = global_work_size; if (!local_work_size) opencl_find_best_workgroup(self); self->params.min_keys_per_crypt = local_work_size; if (options.verbosity > 2) fprintf(stderr, "Local worksize (LWS) %d, Global worksize (GWS) %d\n",(int)local_work_size, (int)global_work_size); }
static void init(struct fmt_main *_self) { self = _self; opencl_init("$JOHN/kernels/phpass_kernel.cl", gpu_id, NULL); crypt_kernel = clCreateKernel(program[gpu_id], "phpass", &cl_error); HANDLE_CLERROR(cl_error, "Error creating kernel"); }
int main( int argc, char** argv ) { std::cout << ">>Opencl_init" << std::endl; opencl_init(); std::cout << ">>buildProgramFromFile" << std::endl; buildProgramFromFile(); std::cout << ">>calc_flow" << std::endl; calc_flow(); }
static void fmt_ssha_init(struct fmt_main *self) { char *temp; cl_ulong maxsize; global_work_size = 0; opencl_init("$JOHN/ssha_kernel.cl", ocl_gpu_id, platform_id); // create kernel to execute crypt_kernel = clCreateKernel(program[ocl_gpu_id], "sha1_crypt_kernel", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel. Double-check kernel name?"); HANDLE_CLERROR(clGetKernelWorkGroupInfo(crypt_kernel, devices[ocl_gpu_id], CL_KERNEL_WORK_GROUP_SIZE, sizeof(maxsize), &maxsize, NULL), "Query max work group size"); if ((temp = cfg_get_param(SECTION_OPTIONS, SUBSECTION_OPENCL, LWS_CONFIG))) local_work_size = atoi(temp); if ((temp = cfg_get_param(SECTION_OPTIONS, SUBSECTION_OPENCL, GWS_CONFIG))) global_work_size = atoi(temp); if ((temp = getenv("LWS"))) local_work_size = atoi(temp); if ((temp = getenv("GWS"))) global_work_size = atoi(temp); if (!local_work_size) { int temp = global_work_size; local_work_size = maxsize; global_work_size = global_work_size ? global_work_size : 4 * maxsize; create_clobj(global_work_size, self); opencl_find_best_workgroup_limit(self, maxsize); release_clobj(); global_work_size = temp; } if (local_work_size > maxsize) { fprintf(stderr, "LWS %d is too large for this GPU. Max allowed is %d, using that.\n", (int)local_work_size, (int)maxsize); local_work_size = maxsize; } if (!global_work_size) find_best_gws(getenv("GWS") == NULL ? 0 : 1, self); if (global_work_size < local_work_size) global_work_size = local_work_size; fprintf(stderr, "Local worksize (LWS) %d, Global worksize (GWS) %d\n", (int)local_work_size, (int)global_work_size); create_clobj(global_work_size, self); atexit(release_clobj); }
static void init(struct fmt_main *self) { cl_int cl_error; global_work_size = MAX_KEYS_PER_CRYPT; inbuffer = (zip_password *) malloc(sizeof(zip_password) * MAX_KEYS_PER_CRYPT); outbuffer = (zip_hash *) malloc(sizeof(zip_hash) * MAX_KEYS_PER_CRYPT); /* Zeroize the lengths in case crypt_all() is called with some keys still * not set. This may happen during self-tests. */ { int i; for (i = 0; i < MAX_KEYS_PER_CRYPT; i++) inbuffer[i].length = 0; } cracked = mem_calloc_tiny(sizeof(*cracked) * KEYS_PER_CRYPT, MEM_ALIGN_WORD); //listOpenCLdevices(); opencl_init("$JOHN/zip_kernel.cl", ocl_gpu_id, platform_id); /// Alocate memory mem_in = clCreateBuffer(context[ocl_gpu_id], CL_MEM_READ_ONLY, insize, NULL, &cl_error); HANDLE_CLERROR(cl_error, "Error allocating mem in"); mem_setting = clCreateBuffer(context[ocl_gpu_id], CL_MEM_READ_ONLY, settingsize, NULL, &cl_error); HANDLE_CLERROR(cl_error, "Error allocating mem setting"); mem_out = clCreateBuffer(context[ocl_gpu_id], CL_MEM_WRITE_ONLY, outsize, NULL, &cl_error); HANDLE_CLERROR(cl_error, "Error allocating mem out"); crypt_kernel = clCreateKernel(program[ocl_gpu_id], "zip", &cl_error); HANDLE_CLERROR(cl_error, "Error creating kernel"); HANDLE_CLERROR(clSetKernelArg(crypt_kernel, 0, sizeof(mem_in), &mem_in), "Error while setting mem_in kernel argument"); HANDLE_CLERROR(clSetKernelArg(crypt_kernel, 1, sizeof(mem_out), &mem_out), "Error while setting mem_out kernel argument"); HANDLE_CLERROR(clSetKernelArg(crypt_kernel, 2, sizeof(mem_setting), &mem_setting), "Error while setting mem_salt kernel argument"); opencl_find_best_workgroup(self); atexit(release_all); }
static void init(struct fmt_main *_self) { self = _self; opencl_init("$JOHN/kernels/pwsafe_kernel.cl", gpu_id, NULL); init_kernel = clCreateKernel(program[gpu_id], KERNEL_INIT_NAME, &ret_code); HANDLE_CLERROR(ret_code, "Error while creating init kernel"); crypt_kernel = clCreateKernel(program[gpu_id], KERNEL_RUN_NAME, &ret_code); HANDLE_CLERROR(ret_code, "Error while creating crypt kernel"); finish_kernel = clCreateKernel(program[gpu_id], KERNEL_FINISH_NAME, &ret_code); HANDLE_CLERROR(ret_code, "Error while creating finish kernel"); }
static void init(struct fmt_main *_self) { char build_opts[64]; self = _self; snprintf(build_opts, sizeof(build_opts), "-DKEYLEN=%d -DSALTLEN=%d -DOUTLEN=%d", (int)sizeof(inbuffer->v), (int)sizeof(currentsalt.salt), (int)sizeof(outbuffer->v)); opencl_init("$JOHN/kernels/pbkdf2_hmac_sha1_unsplit_kernel.cl", gpu_id, build_opts); crypt_kernel = clCreateKernel(program[gpu_id], "derive_key", &cl_error); HANDLE_CLERROR(cl_error, "Error creating kernel"); }
static void init(struct fmt_main *self) { global_work_size = MAX_KEYS_PER_CRYPT; opencl_init("$JOHN/sha512_kernel.cl", ocl_gpu_id, platform_id); ///Alocate memory on the GPU mem_in = clCreateBuffer(context[ocl_gpu_id], CL_MEM_READ_ONLY, insize, NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for passwords"); mem_out = clCreateBuffer(context[ocl_gpu_id], CL_MEM_WRITE_ONLY, outsize, NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for hashes"); mem_binary = clCreateBuffer(context[ocl_gpu_id], CL_MEM_READ_ONLY, sizeof(uint64_t), NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for binary"); mem_cmp = clCreateBuffer(context[ocl_gpu_id], CL_MEM_WRITE_ONLY, sizeof(uint32_t), NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for cmp_all result"); ///Assign crypt kernel parameters crypt_kernel = clCreateKernel(program[ocl_gpu_id], KERNEL_NAME, &ret_code); HANDLE_CLERROR(ret_code,"Error while creating crypt_kernel"); clSetKernelArg(crypt_kernel, 0, sizeof(mem_in), &mem_in); clSetKernelArg(crypt_kernel, 1, sizeof(mem_out), &mem_out); ///Assign cmp kernel parameters cmp_kernel = clCreateKernel(program[ocl_gpu_id], CMP_KERNEL_NAME, &ret_code); HANDLE_CLERROR(ret_code,"Error while creating cmp_kernel"); clSetKernelArg(cmp_kernel, 0, sizeof(mem_binary), &mem_binary); clSetKernelArg(cmp_kernel, 1, sizeof(mem_out), &mem_out); clSetKernelArg(cmp_kernel, 2, sizeof(mem_cmp), &mem_cmp); opencl_find_best_workgroup(self); fprintf(stderr, "Global work size = %lld\n",(long long)global_work_size); atexit(release_all); }
static void fmt_ssha_init(struct fmt_main *pFmt) { char *temp; opencl_init("$JOHN/ssha_kernel.cl", gpu_id, platform_id); // create kernel to execute crypt_kernel = clCreateKernel(program[gpu_id], "sha1_crypt_kernel", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel. Double-check kernel name?"); if ((temp = cfg_get_param(SECTION_OPTIONS, SUBSECTION_OPENCL, LWS_CONFIG))) local_work_size = atoi(temp); if ((temp = getenv("LWS"))) local_work_size = atoi(temp); if (!local_work_size) { create_clobj(SSHA_NUM_KEYS); find_best_workgroup(); release_clobj(); } if ((temp = cfg_get_param(SECTION_OPTIONS, SUBSECTION_OPENCL, KPC_CONFIG))) max_keys_per_crypt = atoi(temp); else max_keys_per_crypt = SSHA_NUM_KEYS; if ((temp = getenv("KPC"))) max_keys_per_crypt = atoi(temp); if (max_keys_per_crypt) { create_clobj(max_keys_per_crypt); } else { //user chose to die of boredom max_keys_per_crypt = SSHA_NUM_KEYS; create_clobj(SSHA_NUM_KEYS); find_best_kpc(); } printf("Local work size (LWS) %d, Keys per crypt (KPC) %d\n",(int)local_work_size,max_keys_per_crypt); pFmt->params.max_keys_per_crypt = max_keys_per_crypt; }
static void init(struct fmt_main *_self) { char build_opts[128]; self = _self; snprintf(build_opts, sizeof(build_opts), "-DHASH_LOOPS=%u -DPLAINTEXT_LENGTH=%d -DMAX_SALT_SIZE=%d", HASH_LOOPS, PLAINTEXT_LENGTH, MAX_SALT_SIZE); opencl_init("$JOHN/kernels/pbkdf2_hmac_sha512_kernel.cl", gpu_id, build_opts); crypt_kernel = clCreateKernel(program[gpu_id], KERNEL_NAME, &cl_error); HANDLE_CLERROR(cl_error, "Error creating kernel"); split_kernel = clCreateKernel(program[gpu_id], SPLIT_KERNEL_NAME, &cl_error); HANDLE_CLERROR(cl_error, "Error creating split kernel"); }
static void init(struct fmt_main *self) { char build_opts[64]; if (pers_opts.target_enc == UTF_8) { max_len = self->params.plaintext_length = 3 * PLAINTEXT_LENGTH; tests[1].plaintext = "\xC3\xBC"; // German u-umlaut in UTF-8 tests[1].ciphertext = "$mskrb5$$$958db4ddb514a6cc8be1b1ccf82b0191$090408357a6f41852d17f3b4bb4634adfd388db1be64d3fe1a1d75ee4338d2a4aea387e5"; tests[2].plaintext = "\xC3\x9C\xC3\x9C"; // 2x uppercase of them tests[2].ciphertext = "$mskrb5$$$057cd5cb706b3de18e059912b1f057e3$fe2e561bd4e42767e972835ea99f08582ba526e62a6a2b6f61364e30aca7c6631929d427"; } else { if (CP_to_Unicode[0xfc] == 0x00fc) { tests[1].plaintext = "\xFC"; // German u-umlaut in many ISO-8859-x tests[1].ciphertext = "$mskrb5$$$958db4ddb514a6cc8be1b1ccf82b0191$090408357a6f41852d17f3b4bb4634adfd388db1be64d3fe1a1d75ee4338d2a4aea387e5"; } if (CP_to_Unicode[0xdc] == 0x00dc) { tests[2].plaintext = "\xDC\xDC"; // 2x uppercase of them tests[2].ciphertext = "$mskrb5$$$057cd5cb706b3de18e059912b1f057e3$fe2e561bd4e42767e972835ea99f08582ba526e62a6a2b6f61364e30aca7c6631929d427"; } } snprintf(build_opts, sizeof(build_opts), "-D%s -DPLAINTEXT_LENGTH=%u", cp_id2macro(pers_opts.target_enc), PLAINTEXT_LENGTH); opencl_init("$JOHN/kernels/krb5pa-md5_kernel.cl", gpu_id, build_opts); /* create kernels to execute */ krb5pa_md5_nthash = clCreateKernel(program[gpu_id], "krb5pa_md5_nthash", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel. Double-check kernel name?"); crypt_kernel = clCreateKernel(program[gpu_id], "krb5pa_md5_final", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel. Double-check kernel name?"); //Initialize openCL tuning (library) for this format. opencl_init_auto_setup(SEED, 0, NULL, warn, 2, self, create_clobj, release_clobj, PLAINTEXT_LENGTH, 0); //Auto tune execution from shared/included code. autotune_run(self, 1, 0, 200); }
static void init(struct fmt_main *pFmt) { assert(sizeof(hccap_t) == HCCAP_SIZE); inbuffer = (wpapsk_password *) malloc(sizeof(wpapsk_password) * MAX_KEYS_PER_CRYPT); outbuffer = (wpapsk_hash *) malloc(sizeof(wpapsk_hash) * MAX_KEYS_PER_CRYPT); mic = (mic_t *) malloc(sizeof(mic_t) * MAX_KEYS_PER_CRYPT); //listOpenCLdevices(); opencl_init("$JOHN/wpapsk_kernel.cl", gpu_id, platform_id); /// Alocate memory cl_int cl_error; mem_in = clCreateBuffer(context[gpu_id], CL_MEM_READ_ONLY, insize, NULL, &cl_error); HANDLE_CLERROR(cl_error, "Error alocating mem in"); mem_setting = clCreateBuffer(context[gpu_id], CL_MEM_READ_ONLY, settingsize, NULL, &cl_error); HANDLE_CLERROR(cl_error, "Error alocating mem setting"); mem_out = clCreateBuffer(context[gpu_id], CL_MEM_WRITE_ONLY, outsize, NULL, &cl_error); HANDLE_CLERROR(cl_error, "Error alocating mem out"); crypt_kernel = clCreateKernel(program[gpu_id], "wpapsk", &cl_error); HANDLE_CLERROR(cl_error, "Error creating kernel"); clSetKernelArg(crypt_kernel, 0, sizeof(mem_in), &mem_in); clSetKernelArg(crypt_kernel, 1, sizeof(mem_out), &mem_out); clSetKernelArg(crypt_kernel, 2, sizeof(mem_setting), &mem_setting); find_best_workgroup(); atexit(release_all); }
static void init(struct fmt_main *self) { cl_ulong maxsize; opencl_init("$JOHN/kernels/pbkdf2_hmac_sha512_unsplit_kernel.cl", ocl_gpu_id); set_lws_gws(DEFAULT_LWS,DEFAULT_GWS); crypt_kernel = clCreateKernel(program[ocl_gpu_id], KERNEL_NAME, &cl_error); HANDLE_CLERROR(cl_error, "Error creating kernel"); create_clobj(global_work_size, self); /* Note: we ask for the kernels' max sizes, not the device's! */ HANDLE_CLERROR(clGetKernelWorkGroupInfo(crypt_kernel, devices[ocl_gpu_id], CL_KERNEL_WORK_GROUP_SIZE, sizeof(maxsize), &maxsize, NULL), "Query max workgroup size"); while (local_work_size > maxsize) local_work_size >>= 1; self->params.min_keys_per_crypt = local_work_size; self->params.max_keys_per_crypt = global_work_size; }
static void init(struct fmt_main *pFmt) { opencl_init("$JOHN/cryptmd5_opencl_kernel.cl", gpu_id); ///Alocate memory on the GPU cl_int cl_error; mem_in = clCreateBuffer(context[gpu_id], CL_MEM_READ_ONLY, insize, NULL, &cl_error); mem_salt = clCreateBuffer(context[gpu_id], CL_MEM_READ_ONLY, saltsize, NULL, &cl_error); mem_out = clCreateBuffer(context[gpu_id], CL_MEM_WRITE_ONLY, outsize, NULL, &cl_error); ///Assign kernel parameters crypt_kernel = clCreateKernel(program[gpu_id], KERNEL_NAME, &cl_error); clSetKernelArg(crypt_kernel, 0, sizeof(mem_in), &mem_in); clSetKernelArg(crypt_kernel, 1, sizeof(mem_out), &mem_out); clSetKernelArg(crypt_kernel, 2, sizeof(mem_salt), &mem_salt); find_best_workgroup(); //atexit(release_all); }
static void init(struct fmt_main *self) { opencl_init("$JOHN/kernels/pwsafe_kernel.cl", gpu_id, NULL); init_kernel = clCreateKernel(program[gpu_id], KERNEL_INIT_NAME, &ret_code); HANDLE_CLERROR(ret_code, "Error while creating init kernel"); crypt_kernel = clCreateKernel(program[gpu_id], KERNEL_RUN_NAME, &ret_code); HANDLE_CLERROR(ret_code, "Error while creating crypt kernel"); finish_kernel = clCreateKernel(program[gpu_id], KERNEL_FINISH_NAME, &ret_code); HANDLE_CLERROR(ret_code, "Error while creating finish kernel"); //Initialize openCL tuning (library) for this format. self->methods.crypt_all = crypt_all_benchmark; opencl_init_auto_setup(SEED, ROUNDS_DEFAULT/8, split_events, warn, 2, self, create_clobj, release_clobj, sizeof(pwsafe_pass), 0); //Auto tune execution from shared/included code. autotune_run(self, ROUNDS_DEFAULT, 0, (cpu(device_info[gpu_id]) ? 500000000ULL : 1000000000ULL)); self->methods.crypt_all = crypt_all; }
static void init(struct fmt_main *self) { size_t maxsize; /* Read LWS/GWS prefs from config or environment */ opencl_get_user_preferences(OCL_CONFIG); if (!local_work_size) local_work_size = cpu(device_info[gpu_id]) ? 1 : 64; if (!global_work_size) global_work_size = MAX_KEYS_PER_CRYPT; opencl_init("$JOHN/kernels/sha512_kernel.cl", gpu_id, NULL); gkey = mem_calloc(global_work_size * sizeof(sha512_key)); ghash = mem_calloc(global_work_size * sizeof(sha512_hash)); ///Allocate memory on the GPU mem_in = clCreateBuffer(context[gpu_id], CL_MEM_READ_ONLY, insize, NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for passwords"); mem_out = clCreateBuffer(context[gpu_id], CL_MEM_WRITE_ONLY, outsize, NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for hashes"); mem_binary = clCreateBuffer(context[gpu_id], CL_MEM_READ_ONLY, sizeof(uint64_t), NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for binary"); mem_cmp = clCreateBuffer(context[gpu_id], CL_MEM_WRITE_ONLY, sizeof(uint32_t), NULL, &ret_code); HANDLE_CLERROR(ret_code,"Error while allocating memory for cmp_all result"); ///Assign crypt kernel parameters crypt_kernel = clCreateKernel(program[gpu_id], KERNEL_NAME, &ret_code); HANDLE_CLERROR(ret_code,"Error while creating crypt_kernel"); clSetKernelArg(crypt_kernel, 0, sizeof(mem_in), &mem_in); clSetKernelArg(crypt_kernel, 1, sizeof(mem_out), &mem_out); ///Assign cmp kernel parameters cmp_kernel = clCreateKernel(program[gpu_id], CMP_KERNEL_NAME, &ret_code); HANDLE_CLERROR(ret_code,"Error while creating cmp_kernel"); clSetKernelArg(cmp_kernel, 0, sizeof(mem_binary), &mem_binary); clSetKernelArg(cmp_kernel, 1, sizeof(mem_out), &mem_out); clSetKernelArg(cmp_kernel, 2, sizeof(mem_cmp), &mem_cmp); /* Note: we ask for the kernel's max size, not the device's! */ maxsize = get_kernel_max_lws(gpu_id, crypt_kernel); if (local_work_size > maxsize) { local_work_size = maxsize; global_work_size = (global_work_size + local_work_size - 1) / local_work_size * local_work_size; } self->params.max_keys_per_crypt = global_work_size; if (!local_work_size) opencl_find_best_workgroup(self); self->params.min_keys_per_crypt = local_work_size; if (options.verbosity > 2) fprintf(stderr, "Local worksize (LWS) %d, Global worksize (GWS) %d\n",(int)local_work_size, (int)global_work_size); }
size_t select_device(int jtrUniqDevNo, struct fmt_main *fmt) { cl_int err; const char *errMsg; size_t memAllocSz; active_dev_ctr++; opencl_init("$JOHN/kernels/pbkdf2_kernel.cl", jtrUniqDevNo, NULL); globalObj[jtrUniqDevNo].krnl[0] = clCreateKernel(program[jtrUniqDevNo], "pbkdf2_preprocess_short", &err); if (err) { fprintf(stderr, "Create Kernel pbkdf2_preprocess_short FAILED\n"); return 0; } globalObj[jtrUniqDevNo].krnl[1] = clCreateKernel(program[jtrUniqDevNo], "pbkdf2_preprocess_long", &err); if (err) { fprintf(stderr, "Create Kernel pbkdf2_preprocess_long FAILED\n"); return 0; } globalObj[jtrUniqDevNo].krnl[2] = clCreateKernel(program[jtrUniqDevNo], "pbkdf2_iter", &err); if (err) { fprintf(stderr, "Create Kernel pbkdf2_iter FAILED\n"); return 0; } globalObj[jtrUniqDevNo].krnl[3] = clCreateKernel(program[jtrUniqDevNo], "pbkdf2_postprocess", &err); if (err) { fprintf(stderr, "Create Kernel pbkdf2_postprocess FAILED\n"); return 0; } errMsg = "Create Buffer FAILED"; memAllocSz = 4 * MAX_KEYS_PER_CRYPT * sizeof(cl_uint); memAllocSz = memAllocSz < get_max_mem_alloc_size(jtrUniqDevNo) ? memAllocSz : get_max_mem_alloc_size(jtrUniqDevNo) / 4 * 4; globalObj[jtrUniqDevNo].gpu_buffer.pass_gpu = clCreateBuffer(context[jtrUniqDevNo], CL_MEM_READ_ONLY, memAllocSz, NULL, &err); if (globalObj[jtrUniqDevNo].gpu_buffer.pass_gpu == (cl_mem)0) HANDLE_CLERROR(err,errMsg ); globalObj[jtrUniqDevNo].gpu_buffer.salt_gpu = clCreateBuffer(context[jtrUniqDevNo], CL_MEM_READ_ONLY, (MAX_SALT_LENGTH / 2 + 1) * sizeof(cl_uint), NULL, &err); if (globalObj[jtrUniqDevNo].gpu_buffer.salt_gpu == (cl_mem)0) HANDLE_CLERROR(err, errMsg); globalObj[jtrUniqDevNo].gpu_buffer.hash_out_gpu = clCreateBuffer(context[jtrUniqDevNo], CL_MEM_WRITE_ONLY, memAllocSz, NULL, &err); if (globalObj[jtrUniqDevNo].gpu_buffer.hash_out_gpu == (cl_mem)0) HANDLE_CLERROR(err, errMsg); memAllocSz = MAX_KEYS_PER_CRYPT * sizeof(temp_buf); memAllocSz = memAllocSz < get_max_mem_alloc_size(jtrUniqDevNo) ? memAllocSz : get_max_mem_alloc_size(jtrUniqDevNo) / 4 * 4; globalObj[jtrUniqDevNo].gpu_buffer.temp_buf_gpu = clCreateBuffer(context[jtrUniqDevNo], CL_MEM_READ_WRITE, memAllocSz, NULL, &err); if (globalObj[jtrUniqDevNo].gpu_buffer.temp_buf_gpu == (cl_mem)0) HANDLE_CLERROR(err, errMsg); memAllocSz = 5 * MAX_KEYS_PER_CRYPT * sizeof(cl_uint); memAllocSz = memAllocSz < get_max_mem_alloc_size(jtrUniqDevNo) ? memAllocSz : get_max_mem_alloc_size(jtrUniqDevNo) / 4 * 4; globalObj[jtrUniqDevNo].gpu_buffer.hmac_sha1_gpu = clCreateBuffer(context[jtrUniqDevNo], CL_MEM_READ_WRITE, memAllocSz, NULL, &err); if (globalObj[jtrUniqDevNo].gpu_buffer.temp_buf_gpu == (cl_mem)0) HANDLE_CLERROR(err, errMsg); HANDLE_CLERROR(clSetKernelArg(globalObj[jtrUniqDevNo].krnl[0], 0, sizeof(cl_mem), &globalObj[jtrUniqDevNo].gpu_buffer.pass_gpu), "Set Kernel 0 Arg 0 :FAILED"); HANDLE_CLERROR(clSetKernelArg(globalObj[jtrUniqDevNo].krnl[0], 1, sizeof(cl_mem), &globalObj[jtrUniqDevNo].gpu_buffer.salt_gpu), "Set Kernel 0 Arg 1 :FAILED"); HANDLE_CLERROR(clSetKernelArg(globalObj[jtrUniqDevNo].krnl[0], 3, sizeof(cl_mem), &globalObj[jtrUniqDevNo].gpu_buffer.temp_buf_gpu), "Set Kernel 0 Arg 3 :FAILED"); HANDLE_CLERROR(clSetKernelArg(globalObj[jtrUniqDevNo].krnl[1], 0, sizeof(cl_mem), &globalObj[jtrUniqDevNo].gpu_buffer.pass_gpu), "Set Kernel 1 Arg 0 :FAILED"); HANDLE_CLERROR(clSetKernelArg(globalObj[jtrUniqDevNo].krnl[1], 1, sizeof(cl_mem), &globalObj[jtrUniqDevNo].gpu_buffer.temp_buf_gpu), "Set Kernel 1 Arg 1 :FAILED"); HANDLE_CLERROR(clSetKernelArg(globalObj[jtrUniqDevNo].krnl[1], 2, sizeof(cl_mem), &globalObj[jtrUniqDevNo].gpu_buffer.hmac_sha1_gpu), "Set Kernel 1 Arg 2 :FAILED"); HANDLE_CLERROR(clSetKernelArg(globalObj[jtrUniqDevNo].krnl[2], 0, sizeof(cl_mem), &globalObj[jtrUniqDevNo].gpu_buffer.temp_buf_gpu), "Set Kernel 2 Arg 0 :FAILED"); HANDLE_CLERROR(clSetKernelArg(globalObj[jtrUniqDevNo].krnl[3], 0, sizeof(cl_mem), &globalObj[jtrUniqDevNo].gpu_buffer.temp_buf_gpu), "Set Kernel 3 Arg 0 :FAILED"); HANDLE_CLERROR(clSetKernelArg(globalObj[jtrUniqDevNo].krnl[3], 1, sizeof(cl_mem), &globalObj[jtrUniqDevNo].gpu_buffer.hash_out_gpu), "Set Kernel 3 Arg 1 :FAILED"); if (!local_work_size) find_best_workgroup(jtrUniqDevNo, quick_bechmark(jtrUniqDevNo)); else { size_t maxsize, maxsize2; globalObj[jtrUniqDevNo].lws = local_work_size; // Obey limits HANDLE_CLERROR(clGetKernelWorkGroupInfo(globalObj[jtrUniqDevNo].krnl[0], devices[jtrUniqDevNo], CL_KERNEL_WORK_GROUP_SIZE, sizeof(maxsize), &maxsize, NULL), "Error querying max LWS"); HANDLE_CLERROR(clGetKernelWorkGroupInfo(globalObj[jtrUniqDevNo].krnl[1], devices[jtrUniqDevNo], CL_KERNEL_WORK_GROUP_SIZE, sizeof(maxsize2), &maxsize2, NULL), "Error querying max LWS"); if (maxsize2 > maxsize) maxsize = maxsize2; HANDLE_CLERROR(clGetKernelWorkGroupInfo(globalObj[jtrUniqDevNo].krnl[2], devices[jtrUniqDevNo], CL_KERNEL_WORK_GROUP_SIZE, sizeof(maxsize2), &maxsize2, NULL), "Error querying max LWS"); if (maxsize2 > maxsize) maxsize = maxsize2; HANDLE_CLERROR(clGetKernelWorkGroupInfo(globalObj[jtrUniqDevNo].krnl[3], devices[jtrUniqDevNo], CL_KERNEL_WORK_GROUP_SIZE, sizeof(maxsize2), &maxsize2, NULL), "Error querying max LWS"); if (maxsize2 > maxsize) maxsize = maxsize2; while (globalObj[jtrUniqDevNo].lws > maxsize) globalObj[jtrUniqDevNo].lws /= 2; if (options.verbosity > 3) fprintf(stderr, "Local worksize (LWS) forced to "Zu"\n", globalObj[jtrUniqDevNo].lws); globalObj[jtrUniqDevNo].exec_time_inv = 1; } if (!global_work_size) find_best_gws(jtrUniqDevNo, fmt); else { if (options.verbosity > 3) fprintf(stderr, "Global worksize (GWS) forced to "Zu"\n", global_work_size); fmt -> params.max_keys_per_crypt = global_work_size; fmt -> params.min_keys_per_crypt = max_lws(); } return globalObj[jtrUniqDevNo].lws; }
static void init(struct fmt_main *self) { #ifdef CL_VERSION_1_0 char *temp; cl_ulong maxsize; global_work_size = 0; opencl_init("$JOHN/rar_kernel.cl", ocl_gpu_id, platform_id); // create kernel to execute crypt_kernel = clCreateKernel(program[ocl_gpu_id], "SetCryptKeys", &ret_code); HANDLE_CLERROR(ret_code, "Error creating kernel. Double-check kernel name?"); /* We mimic the lengths of cRARk for comparisons */ if (get_device_type(ocl_gpu_id) == CL_DEVICE_TYPE_GPU) { #ifndef DEBUG self->params.benchmark_comment = " (6 characters)"; #endif self->params.tests = gpu_tests; #if defined(DEBUG) && !defined(ALWAYS_OPENCL) fprintf(stderr, "Note: will use CPU for some self-tests, and Single mode.\n"); #endif } if ((temp = cfg_get_param(SECTION_OPTIONS, SUBSECTION_OPENCL, LWS_CONFIG))) local_work_size = atoi(temp); if ((temp = cfg_get_param(SECTION_OPTIONS, SUBSECTION_OPENCL, GWS_CONFIG))) global_work_size = atoi(temp); if ((temp = getenv("LWS"))) local_work_size = atoi(temp); if ((temp = getenv("GWS"))) global_work_size = atoi(temp); /* Note: we ask for this kernel's max size, not the device's! */ HANDLE_CLERROR(clGetKernelWorkGroupInfo(crypt_kernel, devices[ocl_gpu_id], CL_KERNEL_WORK_GROUP_SIZE, sizeof(maxsize), &maxsize, NULL), "Query max work group size"); #ifdef DEBUG fprintf(stderr, "Max allowed local work size %d\n", (int)maxsize); #endif if (!local_work_size) { if (get_device_type(ocl_gpu_id) == CL_DEVICE_TYPE_CPU) { if (get_platform_vendor_id(platform_id) == INTEL) local_work_size = 8; else local_work_size = 1; } else { local_work_size = 64; } } if (local_work_size > maxsize) { fprintf(stderr, "LWS %d is too large for this GPU. Max allowed is %d, using that.\n", (int)local_work_size, (int)maxsize); local_work_size = maxsize; } if (!global_work_size) find_best_gws(temp == NULL ? 0 : 1); if (global_work_size < local_work_size) global_work_size = local_work_size; fprintf(stderr, "Local worksize (LWS) %d, Global worksize (GWS) %d\n", (int)local_work_size, (int)global_work_size); create_clobj(global_work_size); #ifdef DEBUG { cl_ulong loc_mem_size; HANDLE_CLERROR(clGetKernelWorkGroupInfo(crypt_kernel, devices[ocl_gpu_id], CL_KERNEL_LOCAL_MEM_SIZE, sizeof(loc_mem_size), &loc_mem_size, NULL), "Query local memory usage"); fprintf(stderr, "Kernel using %lu bytes of local memory out of %lu available\n", loc_mem_size, get_local_memory_size(ocl_gpu_id)); } #endif atexit(release_clobj); *mkpc = VF * global_work_size; #endif /* OpenCL */ #if defined (_OPENMP) omp_t = omp_get_max_threads(); self->params.min_keys_per_crypt *= omp_t; #ifndef CL_VERSION_1_0 /* OpenCL gets to decide */ *mkpc = omp_t * OMP_SCALE * MAX_KEYS_PER_CRYPT; #endif init_locks(); #endif /* _OPENMP */ if (options.utf8) self->params.plaintext_length = PLAINTEXT_LENGTH * 3; unpack_data = mem_calloc_tiny(sizeof(unpack_data_t) * omp_t, MEM_ALIGN_WORD); cracked = mem_calloc_tiny(sizeof(*cracked) * *mkpc, MEM_ALIGN_WORD); #ifndef CL_VERSION_1_0 saved_key = mem_calloc_tiny(UNICODE_LENGTH * *mkpc, MEM_ALIGN_NONE); saved_len = mem_calloc_tiny(sizeof(*saved_len) * *mkpc, MEM_ALIGN_WORD); saved_salt = mem_calloc_tiny(8, MEM_ALIGN_NONE); aes_key = mem_calloc_tiny(16 * *mkpc, MEM_ALIGN_NONE); aes_iv = mem_calloc_tiny(16 * *mkpc, MEM_ALIGN_NONE); #endif /* OpenSSL init */ init_aesni(); SSL_load_error_strings(); SSL_library_init(); OpenSSL_add_all_algorithms(); #ifndef __APPLE__ atexit(openssl_cleanup); #endif /* CRC-32 table init, do it before we start multithreading */ { CRC32_t crc; CRC32_Init(&crc); } }