Send error messages and other secondary output to stderr.
This commit is contained in:
301
oclvanitygen.c
301
oclvanitygen.c
@@ -204,8 +204,8 @@ vg_ocl_device_getplatform(cl_device_id did)
|
||||
ret = clGetDeviceInfo(did, CL_DEVICE_PLATFORM,
|
||||
sizeof(val), &val, &size_ret);
|
||||
if (ret != CL_SUCCESS) {
|
||||
printf("clGetDeviceInfo(CL_DEVICE_PLATFORM): %s",
|
||||
vg_ocl_strerror(ret));
|
||||
fprintf(stderr, "clGetDeviceInfo(CL_DEVICE_PLATFORM): %s",
|
||||
vg_ocl_strerror(ret));
|
||||
}
|
||||
return val;
|
||||
}
|
||||
@@ -219,8 +219,8 @@ vg_ocl_device_gettype(cl_device_id did)
|
||||
ret = clGetDeviceInfo(did, CL_DEVICE_TYPE,
|
||||
sizeof(val), &val, &size_ret);
|
||||
if (ret != CL_SUCCESS) {
|
||||
printf("clGetDeviceInfo(CL_DEVICE_TYPE): %s",
|
||||
vg_ocl_strerror(ret));
|
||||
fprintf(stderr, "clGetDeviceInfo(CL_DEVICE_TYPE): %s",
|
||||
vg_ocl_strerror(ret));
|
||||
}
|
||||
return val;
|
||||
}
|
||||
@@ -250,7 +250,8 @@ vg_ocl_device_getsizet(cl_device_id did, cl_device_info param)
|
||||
size_t size_ret;
|
||||
ret = clGetDeviceInfo(did, param, sizeof(val), &val, &size_ret);
|
||||
if (ret != CL_SUCCESS) {
|
||||
printf("clGetDeviceInfo(%d): %s", param, vg_ocl_strerror(ret));
|
||||
fprintf(stderr,
|
||||
"clGetDeviceInfo(%d): %s", param, vg_ocl_strerror(ret));
|
||||
}
|
||||
return val;
|
||||
}
|
||||
@@ -263,7 +264,8 @@ vg_ocl_device_getulong(cl_device_id did, cl_device_info param)
|
||||
size_t size_ret;
|
||||
ret = clGetDeviceInfo(did, param, sizeof(val), &val, &size_ret);
|
||||
if (ret != CL_SUCCESS) {
|
||||
printf("clGetDeviceInfo(%d): %s", param, vg_ocl_strerror(ret));
|
||||
fprintf(stderr,
|
||||
"clGetDeviceInfo(%d): %s", param, vg_ocl_strerror(ret));
|
||||
}
|
||||
return val;
|
||||
}
|
||||
@@ -276,7 +278,8 @@ vg_ocl_device_getuint(cl_device_id did, cl_device_info param)
|
||||
size_t size_ret;
|
||||
ret = clGetDeviceInfo(did, param, sizeof(val), &val, &size_ret);
|
||||
if (ret != CL_SUCCESS) {
|
||||
printf("clGetDeviceInfo(%d): %s", param, vg_ocl_strerror(ret));
|
||||
fprintf(stderr,
|
||||
"clGetDeviceInfo(%d): %s", param, vg_ocl_strerror(ret));
|
||||
}
|
||||
return val;
|
||||
}
|
||||
@@ -290,24 +293,24 @@ vg_ocl_dump_info(vg_ocl_context_t *vocp)
|
||||
if (vocp->voc_dump_done)
|
||||
return;
|
||||
did = vocp->voc_ocldid;
|
||||
printf("Device: %s\n",
|
||||
fprintf(stderr, "Device: %s\n",
|
||||
vg_ocl_device_getstr(did, CL_DEVICE_NAME));
|
||||
printf("Vendor: %s (%04x)\n",
|
||||
fprintf(stderr, "Vendor: %s (%04x)\n",
|
||||
vg_ocl_device_getstr(did, CL_DEVICE_VENDOR),
|
||||
vg_ocl_device_getuint(did, CL_DEVICE_VENDOR_ID));
|
||||
printf("Driver: %s\n",
|
||||
fprintf(stderr, "Driver: %s\n",
|
||||
vg_ocl_device_getstr(did, CL_DRIVER_VERSION));
|
||||
printf("Profile: %s\n",
|
||||
fprintf(stderr, "Profile: %s\n",
|
||||
vg_ocl_device_getstr(did, CL_DEVICE_PROFILE));
|
||||
printf("Version: %s\n",
|
||||
fprintf(stderr, "Version: %s\n",
|
||||
vg_ocl_device_getstr(did, CL_DEVICE_VERSION));
|
||||
printf("Max compute units: %"PRSIZET"d\n",
|
||||
fprintf(stderr, "Max compute units: %"PRSIZET"d\n",
|
||||
vg_ocl_device_getsizet(did, CL_DEVICE_MAX_COMPUTE_UNITS));
|
||||
printf("Max workgroup size: %"PRSIZET"d\n",
|
||||
fprintf(stderr, "Max workgroup size: %"PRSIZET"d\n",
|
||||
vg_ocl_device_getsizet(did, CL_DEVICE_MAX_WORK_GROUP_SIZE));
|
||||
printf("Global memory: %ld\n",
|
||||
fprintf(stderr, "Global memory: %ld\n",
|
||||
vg_ocl_device_getulong(did, CL_DEVICE_GLOBAL_MEM_SIZE));
|
||||
printf("Max allocation: %ld\n",
|
||||
fprintf(stderr, "Max allocation: %ld\n",
|
||||
vg_ocl_device_getulong(did, CL_DEVICE_MAX_MEM_ALLOC_SIZE));
|
||||
vocp->voc_dump_done = 1;
|
||||
}
|
||||
@@ -317,9 +320,9 @@ vg_ocl_error(vg_ocl_context_t *vocp, int code, const char *desc)
|
||||
{
|
||||
const char *err = vg_ocl_strerror(code);
|
||||
if (desc) {
|
||||
printf("%s: %s\n", desc, err);
|
||||
fprintf(stderr, "%s: %s\n", desc, err);
|
||||
} else {
|
||||
printf("%s\n", err);
|
||||
fprintf(stderr, "%s\n", err);
|
||||
}
|
||||
|
||||
if (vocp && vocp->voc_ocldid)
|
||||
@@ -346,7 +349,7 @@ vg_ocl_buildlog(vg_ocl_context_t *vocp, cl_program prog)
|
||||
|
||||
log = (char *) malloc(logbufsize);
|
||||
if (!log) {
|
||||
printf("Could not allocate build log buffer\n");
|
||||
fprintf(stderr, "Could not allocate build log buffer\n");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -377,7 +380,7 @@ vg_ocl_buildlog(vg_ocl_context_t *vocp, cl_program prog)
|
||||
break;
|
||||
}
|
||||
|
||||
printf("Build log:\n%s\n", &log[off]);
|
||||
fprintf(stderr, "Build log:\n%s\n", &log[off]);
|
||||
}
|
||||
free(log);
|
||||
}
|
||||
@@ -465,7 +468,7 @@ vg_ocl_create_kernel(vg_ocl_context_t *vocp, int knum, const char *func)
|
||||
for (i = 0; i < MAX_SLOT; i++) {
|
||||
krn = clCreateKernel(vocp->voc_oclprog, func, &ret);
|
||||
if (!krn) {
|
||||
printf("clCreateKernel(%d): ", i);
|
||||
fprintf(stderr, "clCreateKernel(%d): ", i);
|
||||
vg_ocl_error(vocp, ret, NULL);
|
||||
while (--i >= 0) {
|
||||
clReleaseKernel(vocp->voc_oclkernel[i][knum]);
|
||||
@@ -618,7 +621,7 @@ vg_ocl_amd_patch(vg_ocl_context_t *vocp, unsigned char *binary, size_t size)
|
||||
nrun = vg_ocl_amd_patch_inner(ptr, size - offset);
|
||||
npatched += nrun;
|
||||
if (vcp->vc_verbose > 1)
|
||||
printf("AMD BFI_INT: patched %d instructions "
|
||||
fprintf(stderr, "AMD BFI_INT: patched %d instructions "
|
||||
"in kernel %d\n",
|
||||
nrun, ninner);
|
||||
npatched++;
|
||||
@@ -642,18 +645,19 @@ vg_ocl_load_program(vg_context_t *vcp, vg_ocl_context_t *vocp,
|
||||
char bin_name[64];
|
||||
|
||||
if (vcp->vc_verbose > 1)
|
||||
printf("OpenCL compiler flags: %s\n", opts ? opts : "");
|
||||
fprintf(stderr,
|
||||
"OpenCL compiler flags: %s\n", opts ? opts : "");
|
||||
|
||||
sz = 128 * 1024;
|
||||
buf = (char *) malloc(sz);
|
||||
if (!buf) {
|
||||
printf("Could not allocate program buffer\n");
|
||||
fprintf(stderr, "Could not allocate program buffer\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
kfp = fopen(filename, "r");
|
||||
if (!kfp) {
|
||||
printf("Error loading kernel file '%s': %s\n",
|
||||
fprintf(stderr, "Error loading kernel file '%s': %s\n",
|
||||
filename, strerror(errno));
|
||||
free(buf);
|
||||
return 0;
|
||||
@@ -663,7 +667,7 @@ vg_ocl_load_program(vg_context_t *vcp, vg_ocl_context_t *vocp,
|
||||
fclose(kfp);
|
||||
|
||||
if (!len) {
|
||||
printf("Short read on CL kernel\n");
|
||||
fprintf(stderr, "Short read on CL kernel\n");
|
||||
free(buf);
|
||||
return 0;
|
||||
}
|
||||
@@ -680,7 +684,7 @@ vg_ocl_load_program(vg_context_t *vcp, vg_ocl_context_t *vocp,
|
||||
if (vocp->voc_quirks & VG_OCL_NO_BINARIES) {
|
||||
kfp = NULL;
|
||||
if (vcp->vc_verbose > 1)
|
||||
printf("Binary OpenCL programs disabled\n");
|
||||
fprintf(stderr, "Binary OpenCL programs disabled\n");
|
||||
} else {
|
||||
kfp = fopen(bin_name, "rb");
|
||||
}
|
||||
@@ -694,12 +698,13 @@ vg_ocl_load_program(vg_context_t *vcp, vg_ocl_context_t *vocp,
|
||||
&ret);
|
||||
} else {
|
||||
if (vcp->vc_verbose > 1)
|
||||
printf("Loading kernel binary %s\n", bin_name);
|
||||
fprintf(stderr, "Loading kernel binary %s\n", bin_name);
|
||||
szr = 0;
|
||||
while (!feof(kfp)) {
|
||||
len = fread(buf + szr, 1, sz - szr, kfp);
|
||||
if (!len) {
|
||||
printf("Short read on CL kernel binary\n");
|
||||
fprintf(stderr,
|
||||
"Short read on CL kernel binary\n");
|
||||
fclose(kfp);
|
||||
free(buf);
|
||||
return 0;
|
||||
@@ -708,8 +713,9 @@ vg_ocl_load_program(vg_context_t *vcp, vg_ocl_context_t *vocp,
|
||||
if (szr == sz) {
|
||||
tbuf = (char *) realloc(buf, sz*2);
|
||||
if (!tbuf) {
|
||||
printf("Could not expand CL kernel "
|
||||
"binary buffer\n");
|
||||
fprintf(stderr,
|
||||
"Could not expand CL kernel "
|
||||
"binary buffer\n");
|
||||
fclose(kfp);
|
||||
free(buf);
|
||||
return 0;
|
||||
@@ -735,17 +741,18 @@ vg_ocl_load_program(vg_context_t *vcp, vg_ocl_context_t *vocp,
|
||||
|
||||
if (vcp->vc_verbose > 0) {
|
||||
if (fromsource && !patched) {
|
||||
printf("Compiling kernel, can take minutes...");
|
||||
fflush(stdout);
|
||||
fprintf(stderr,
|
||||
"Compiling kernel, can take minutes...");
|
||||
fflush(stderr);
|
||||
}
|
||||
}
|
||||
ret = clBuildProgram(prog, 1, &vocp->voc_ocldid, opts, NULL, NULL);
|
||||
if (ret != CL_SUCCESS) {
|
||||
if ((vcp->vc_verbose > 0) && fromsource && !patched)
|
||||
printf("failure.\n");
|
||||
fprintf(stderr, "failure.\n");
|
||||
vg_ocl_error(NULL, ret, "clBuildProgram");
|
||||
} else if ((vcp->vc_verbose > 0) && fromsource && !patched) {
|
||||
printf("done!\n");
|
||||
fprintf(stderr, "done!\n");
|
||||
}
|
||||
if ((ret != CL_SUCCESS) ||
|
||||
((vcp->vc_verbose > 1) && fromsource && !patched)) {
|
||||
@@ -768,14 +775,16 @@ vg_ocl_load_program(vg_context_t *vcp, vg_ocl_context_t *vocp,
|
||||
goto out;
|
||||
}
|
||||
if (sz == 0) {
|
||||
printf("WARNING: zero-length CL kernel binary\n");
|
||||
fprintf(stderr,
|
||||
"WARNING: zero-length CL kernel binary\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
buf = (char *) malloc(szr);
|
||||
if (!buf) {
|
||||
printf("WARNING: Could not allocate %"PRSIZET"d bytes "
|
||||
"for CL binary\n",
|
||||
fprintf(stderr,
|
||||
"WARNING: Could not allocate %"PRSIZET"d bytes "
|
||||
"for CL binary\n",
|
||||
szr);
|
||||
goto out;
|
||||
}
|
||||
@@ -796,11 +805,13 @@ vg_ocl_load_program(vg_context_t *vcp, vg_ocl_context_t *vocp,
|
||||
(unsigned char *) buf, szr);
|
||||
if (patched > 0) {
|
||||
if (vcp->vc_verbose > 1)
|
||||
printf("AMD BFI_INT patch complete\n");
|
||||
fprintf(stderr,
|
||||
"AMD BFI_INT patch complete\n");
|
||||
clReleaseProgram(prog);
|
||||
goto rebuild;
|
||||
}
|
||||
printf("WARNING: AMD BFI_INT patching failed\n");
|
||||
fprintf(stderr,
|
||||
"WARNING: AMD BFI_INT patching failed\n");
|
||||
if (patched < 0) {
|
||||
/* Program was incompletely modified */
|
||||
free(buf);
|
||||
@@ -810,16 +821,18 @@ vg_ocl_load_program(vg_context_t *vcp, vg_ocl_context_t *vocp,
|
||||
|
||||
kfp = fopen(bin_name, "wb");
|
||||
if (!kfp) {
|
||||
printf("WARNING: could not save CL kernel binary: %s\n",
|
||||
strerror(errno));
|
||||
fprintf(stderr, "WARNING: "
|
||||
"could not save CL kernel binary: %s\n",
|
||||
strerror(errno));
|
||||
} else {
|
||||
sz = fwrite(buf, 1, szr, kfp);
|
||||
fclose(kfp);
|
||||
if (sz != szr) {
|
||||
printf("WARNING: short write on CL kernel "
|
||||
"binary file: expected "
|
||||
"%"PRSIZET"d, got %"PRSIZET"d\n",
|
||||
szr, sz);
|
||||
fprintf(stderr,
|
||||
"WARNING: short write on CL kernel "
|
||||
"binary file: expected "
|
||||
"%"PRSIZET"d, got %"PRSIZET"d\n",
|
||||
szr, sz);
|
||||
unlink(bin_name);
|
||||
}
|
||||
}
|
||||
@@ -844,7 +857,7 @@ vg_ocl_context_callback(const char *errinfo,
|
||||
size_t cb,
|
||||
void *user_data)
|
||||
{
|
||||
printf("vg_ocl_context_callback error: %s\n", errinfo);
|
||||
fprintf(stderr, "vg_ocl_context_callback error: %s\n", errinfo);
|
||||
}
|
||||
|
||||
int
|
||||
@@ -985,7 +998,7 @@ vg_ocl_kernel_arg_alloc(vg_ocl_context_t *vocp, int slot,
|
||||
NULL,
|
||||
&ret);
|
||||
if (!clbuf) {
|
||||
printf("clCreateBuffer(%d,%d): ", slot, arg);
|
||||
fprintf(stderr, "clCreateBuffer(%d,%d): ", slot, arg);
|
||||
vg_ocl_error(vocp, ret, NULL);
|
||||
return 0;
|
||||
}
|
||||
@@ -1007,7 +1020,8 @@ vg_ocl_kernel_arg_alloc(vg_ocl_context_t *vocp, int slot,
|
||||
&clbuf);
|
||||
|
||||
if (ret) {
|
||||
printf("clSetKernelArg(%d,%d): ", knum, karg);
|
||||
fprintf(stderr,
|
||||
"clSetKernelArg(%d,%d): ", knum, karg);
|
||||
vg_ocl_error(vocp, ret, NULL);
|
||||
return 0;
|
||||
}
|
||||
@@ -1038,7 +1052,7 @@ vg_ocl_copyout_arg(vg_ocl_context_t *vocp, int wslot, int arg,
|
||||
NULL);
|
||||
|
||||
if (ret) {
|
||||
printf("clEnqueueWriteBuffer(%d): ", arg);
|
||||
fprintf(stderr, "clEnqueueWriteBuffer(%d): ", arg);
|
||||
vg_ocl_error(vocp, ret, NULL);
|
||||
return 0;
|
||||
}
|
||||
@@ -1065,7 +1079,7 @@ vg_ocl_map_arg_buffer(vg_ocl_context_t *vocp, int slot,
|
||||
NULL,
|
||||
&ret);
|
||||
if (!buf) {
|
||||
printf("clEnqueueMapBuffer(%d): ", arg);
|
||||
fprintf(stderr, "clEnqueueMapBuffer(%d): ", arg);
|
||||
vg_ocl_error(vocp, ret, NULL);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1087,7 +1101,7 @@ vg_ocl_unmap_arg_buffer(vg_ocl_context_t *vocp, int slot,
|
||||
0, NULL,
|
||||
&ev);
|
||||
if (ret != CL_SUCCESS) {
|
||||
printf("clEnqueueUnmapMemObject(%d): ", arg);
|
||||
fprintf(stderr, "clEnqueueUnmapMemObject(%d): ", arg);
|
||||
vg_ocl_error(vocp, ret, NULL);
|
||||
return;
|
||||
}
|
||||
@@ -1095,7 +1109,7 @@ vg_ocl_unmap_arg_buffer(vg_ocl_context_t *vocp, int slot,
|
||||
ret = clWaitForEvents(1, &ev);
|
||||
clReleaseEvent(ev);
|
||||
if (ret != CL_SUCCESS) {
|
||||
printf("clWaitForEvent(clUnmapMemObject,%d): ", arg);
|
||||
fprintf(stderr, "clWaitForEvent(clUnmapMemObject,%d): ", arg);
|
||||
vg_ocl_error(vocp, ret, NULL);
|
||||
}
|
||||
}
|
||||
@@ -1115,7 +1129,7 @@ vg_ocl_kernel_int_arg(vg_ocl_context_t *vocp, int slot,
|
||||
sizeof(value),
|
||||
&value);
|
||||
if (ret) {
|
||||
printf("clSetKernelArg(%d): ", arg);
|
||||
fprintf(stderr, "clSetKernelArg(%d): ", arg);
|
||||
vg_ocl_error(vocp, ret, NULL);
|
||||
return 0;
|
||||
}
|
||||
@@ -1141,7 +1155,8 @@ vg_ocl_kernel_buffer_arg(vg_ocl_context_t *vocp, int slot,
|
||||
size,
|
||||
value);
|
||||
if (ret) {
|
||||
printf("clSetKernelArg(%d,%d): ", knum, karg);
|
||||
fprintf(stderr,
|
||||
"clSetKernelArg(%d,%d): ", knum, karg);
|
||||
vg_ocl_error(vocp, ret, NULL);
|
||||
return 0;
|
||||
}
|
||||
@@ -1199,7 +1214,7 @@ vg_ocl_kernel_start(vg_ocl_context_t *vocp, int slot, int ncol, int nrow,
|
||||
|
||||
if (vocp->voc_verify_func[0] &&
|
||||
!(vocp->voc_verify_func[0])(vocp, slot)) {
|
||||
printf("ERROR: Kernel 0 failed verification test\n");
|
||||
fprintf(stderr, "ERROR: Kernel 0 failed verification test\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1223,7 +1238,7 @@ vg_ocl_kernel_start(vg_ocl_context_t *vocp, int slot, int ncol, int nrow,
|
||||
|
||||
if (vocp->voc_verify_func[1] &&
|
||||
!(vocp->voc_verify_func[1])(vocp, slot)) {
|
||||
printf("ERROR: Kernel 1 failed verification test\n");
|
||||
fprintf(stderr, "ERROR: Kernel 1 failed verification test\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1381,7 +1396,8 @@ show_elapsed(struct timeval *tv, const char *place)
|
||||
struct timeval now, delta;
|
||||
gettimeofday(&now, NULL);
|
||||
timersub(&now, tv, &delta);
|
||||
printf("%s spent %ld.%06lds\n", place, delta.tv_sec, delta.tv_usec);
|
||||
fprintf(stderr,
|
||||
"%s spent %ld.%06lds\n", place, delta.tv_sec, delta.tv_usec);
|
||||
}
|
||||
|
||||
|
||||
@@ -1467,7 +1483,8 @@ vg_ocl_prefix_rekey(vg_ocl_context_t *vocp)
|
||||
/* Count number of range records */
|
||||
i = vg_context_hash160_sort(vcp, NULL);
|
||||
if (!i) {
|
||||
printf("No range records available, exiting\n");
|
||||
fprintf(stderr,
|
||||
"No range records available, exiting\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1525,12 +1542,12 @@ vg_ocl_prefix_check(vg_ocl_context_t *vocp, int slot)
|
||||
* the pattern list. Hmm.
|
||||
*/
|
||||
tablesize = ocl_found_out[2];
|
||||
printf("Match idx: %d\n", ocl_found_out[1]);
|
||||
printf("CPU hash: ");
|
||||
fprintf(stderr, "Match idx: %d\n", ocl_found_out[1]);
|
||||
fprintf(stderr, "CPU hash: ");
|
||||
dumphex(vxcp->vxc_binres + 1, 20);
|
||||
printf("GPU hash: ");
|
||||
fprintf(stderr, "GPU hash: ");
|
||||
dumphex((unsigned char *) (ocl_found_out + 2), 20);
|
||||
printf("Found delta: %d "
|
||||
fprintf(stderr, "Found delta: %d "
|
||||
"Start delta: %d\n",
|
||||
found_delta, orig_delta);
|
||||
res = 1;
|
||||
@@ -1573,13 +1590,13 @@ vg_ocl_config_pattern(vg_ocl_context_t *vocp)
|
||||
i = vg_context_hash160_sort(vcp, NULL);
|
||||
if (i > 0) {
|
||||
if (vcp->vc_verbose > 1)
|
||||
printf("Using OpenCL prefix matcher\n");
|
||||
fprintf(stderr, "Using OpenCL prefix matcher\n");
|
||||
/* Configure for prefix matching */
|
||||
return vg_ocl_prefix_init(vocp);
|
||||
}
|
||||
|
||||
if (vcp->vc_verbose > 0)
|
||||
printf("WARNING: Using CPU pattern matcher\n");
|
||||
fprintf(stderr, "WARNING: Using CPU pattern matcher\n");
|
||||
return vg_ocl_gethash_init(vocp);
|
||||
}
|
||||
|
||||
@@ -1623,7 +1640,7 @@ vg_ocl_verify_temporary(vg_ocl_context_t *vocp, int slot, int z_inverted)
|
||||
ppt = EC_POINT_new(pgroup);
|
||||
|
||||
if (!bnctx || !bnmont || !ppr || !ppc || !pps || !ppt) {
|
||||
printf("ERROR: out of memory\n");
|
||||
fprintf(stderr, "ERROR: out of memory\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1646,7 +1663,7 @@ vg_ocl_verify_temporary(vg_ocl_context_t *vocp, int slot, int z_inverted)
|
||||
vg_ocl_map_arg_buffer(vocp, slot, 4, 0);
|
||||
|
||||
if (!z_heap || !point_tmp || !ocl_points_in || !ocl_strides_in) {
|
||||
printf("ERROR: could not map OpenCL point buffers\n");
|
||||
fprintf(stderr, "ERROR: could not map OpenCL point buffers\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1670,39 +1687,44 @@ vg_ocl_verify_temporary(vg_ocl_context_t *vocp, int slot, int z_inverted)
|
||||
if (BN_cmp(&ppt->X, &pps->X) ||
|
||||
BN_cmp(&ppt->Y, &pps->Y) ||
|
||||
BN_cmp(&bnz, bnzc)) {
|
||||
if (!mismatches) {
|
||||
fprintf(stderr, "Base privkey: ");
|
||||
dumpbn(EC_KEY_get0_private_key(
|
||||
vxcp->vxc_key));
|
||||
}
|
||||
mismatches++;
|
||||
printf("Mismatch for kernel %d, "
|
||||
fprintf(stderr, "Mismatch for kernel %d, "
|
||||
"offset %d (%d,%d)\n",
|
||||
z_inverted, bx + x, y, x);
|
||||
if (!mm_r) {
|
||||
mm_r = 1;
|
||||
printf("Row X : ");
|
||||
fprintf(stderr, "Row X : ");
|
||||
dumpbn(&ppr->X);
|
||||
printf("Row Y : ");
|
||||
fprintf(stderr, "Row Y : ");
|
||||
dumpbn(&ppr->Y);
|
||||
}
|
||||
|
||||
printf("Column X: ");
|
||||
fprintf(stderr, "Column X: ");
|
||||
dumpbn(&ppc->X);
|
||||
printf("Column Y: ");
|
||||
fprintf(stderr, "Column Y: ");
|
||||
dumpbn(&ppc->Y);
|
||||
|
||||
if (BN_cmp(&ppt->X, &pps->X)) {
|
||||
printf("Expect X: ");
|
||||
fprintf(stderr, "Expect X: ");
|
||||
dumpbn(&pps->X);
|
||||
printf("Device X: ");
|
||||
fprintf(stderr, "Device X: ");
|
||||
dumpbn(&ppt->X);
|
||||
}
|
||||
if (BN_cmp(&ppt->Y, &pps->Y)) {
|
||||
printf("Expect Y: ");
|
||||
fprintf(stderr, "Expect Y: ");
|
||||
dumpbn(&pps->Y);
|
||||
printf("Device Y: ");
|
||||
fprintf(stderr, "Device Y: ");
|
||||
dumpbn(&ppt->Y);
|
||||
}
|
||||
if (BN_cmp(&bnz, bnzc)) {
|
||||
printf("Expect Z: ");
|
||||
fprintf(stderr, "Expect Z: ");
|
||||
dumpbn(bnzc);
|
||||
printf("Device Z: ");
|
||||
fprintf(stderr, "Device Z: ");
|
||||
dumpbn(&bnz);
|
||||
}
|
||||
}
|
||||
@@ -1816,7 +1838,7 @@ vg_opencl_thread(void *arg)
|
||||
pidle = ((double) idleu) / (idleu + busyu);
|
||||
|
||||
if (pidle > 0.01) {
|
||||
printf("\rGPU idle: %.2f%%"
|
||||
fprintf(stderr, "\rGPU idle: %.2f%%"
|
||||
" "
|
||||
" \n",
|
||||
100 * pidle);
|
||||
@@ -1870,7 +1892,8 @@ vg_opencl_loop(vg_context_t *vcp, cl_device_id did, int safe_mode, int verify,
|
||||
|
||||
if (verify) {
|
||||
if (vcp->vc_verbose > 0) {
|
||||
printf("WARNING: Hardware verification mode enabled\n");
|
||||
fprintf(stderr, "WARNING: "
|
||||
"Hardware verification mode enabled\n");
|
||||
}
|
||||
if (!nthreads)
|
||||
nthreads = 1;
|
||||
@@ -1943,7 +1966,7 @@ vg_opencl_loop(vg_context_t *vcp, cl_device_id did, int safe_mode, int verify,
|
||||
CL_DEVICE_MAX_MEM_ALLOC_SIZE);
|
||||
memsize /= 2;
|
||||
ncols = full_threads;
|
||||
nrows = 1;
|
||||
nrows = 2;
|
||||
/* Find row and column counts close to sqrt(full_threads) */
|
||||
while ((ncols > nrows) && !(ncols & 1)) {
|
||||
ncols /= 2;
|
||||
@@ -1976,23 +1999,26 @@ vg_opencl_loop(vg_context_t *vcp, cl_device_id did, int safe_mode, int verify,
|
||||
}
|
||||
|
||||
if (vcp->vc_verbose > 1) {
|
||||
printf("Grid size: %dx%d\n", ncols, nrows);
|
||||
printf("Modular inverse: %d threads, %d ops each\n",
|
||||
round/invsize, invsize);
|
||||
fprintf(stderr, "Grid size: %dx%d\n", ncols, nrows);
|
||||
fprintf(stderr, "Modular inverse: %d threads, %d ops each\n",
|
||||
round/invsize, invsize);
|
||||
}
|
||||
|
||||
if ((round % invsize) || !is_pow2(invsize) || (invsize < 2)) {
|
||||
if (vcp->vc_verbose <= 1) {
|
||||
printf("Grid size: %dx%d\n", ncols, nrows);
|
||||
printf("Modular inverse: %d threads, %d ops each\n",
|
||||
round/invsize, invsize);
|
||||
fprintf(stderr, "Grid size: %dx%d\n", ncols, nrows);
|
||||
fprintf(stderr,
|
||||
"Modular inverse: %d threads, %d ops each\n",
|
||||
round/invsize, invsize);
|
||||
}
|
||||
if (round % invsize)
|
||||
printf("Modular inverse work size must "
|
||||
"evenly divide points\n");
|
||||
fprintf(stderr,
|
||||
"Modular inverse work size must "
|
||||
"evenly divide points\n");
|
||||
else
|
||||
printf("Modular inverse work per task (%d) "
|
||||
"must be a power of 2\n", invsize);
|
||||
fprintf(stderr,
|
||||
"Modular inverse work per task (%d) "
|
||||
"must be a power of 2\n", invsize);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -2000,9 +2026,10 @@ vg_opencl_loop(vg_context_t *vcp, cl_device_id did, int safe_mode, int verify,
|
||||
(vcp->vc_chance >= 1.0f) &&
|
||||
(vcp->vc_chance < round) &&
|
||||
(vcp->vc_verbose > 0)) {
|
||||
printf("WARNING: low pattern difficulty\n");
|
||||
printf("WARNING: better match throughput is possible "
|
||||
"using vanitygen on the CPU\n");
|
||||
fprintf(stderr, "WARNING: low pattern difficulty\n");
|
||||
fprintf(stderr,
|
||||
"WARNING: better match throughput is possible "
|
||||
"using vanitygen on the CPU\n");
|
||||
}
|
||||
|
||||
nslots = 2;
|
||||
@@ -2232,13 +2259,15 @@ l_rekey:
|
||||
|
||||
if (0) {
|
||||
enomem:
|
||||
printf("ERROR: allocation failure?\n");
|
||||
fprintf(stderr, "ERROR: allocation failure?\n");
|
||||
}
|
||||
|
||||
out:
|
||||
if (halt) {
|
||||
if (vcp->vc_verbose > 1)
|
||||
if (vcp->vc_verbose > 1) {
|
||||
printf("Halting...");
|
||||
fflush(stdout);
|
||||
}
|
||||
pthread_mutex_lock(&vocp->voc_lock);
|
||||
vocp->voc_halt = 1;
|
||||
pthread_cond_signal(&vocp->voc_wait);
|
||||
@@ -2290,7 +2319,7 @@ get_device_list(cl_platform_id pid, cl_device_id **list_out)
|
||||
if (nd) {
|
||||
ids = (cl_device_id *) malloc(nd * sizeof(*ids));
|
||||
if (ids == NULL) {
|
||||
printf("Could not allocate device ID list\n");
|
||||
fprintf(stderr, "Could not allocate device ID list\n");
|
||||
*list_out = NULL;
|
||||
return -1;
|
||||
}
|
||||
@@ -2330,7 +2359,7 @@ show_devices(cl_platform_id pid, cl_device_id *ids, int nd, int base)
|
||||
if (len >= sizeof(vbuf))
|
||||
len = sizeof(vbuf) - 1;
|
||||
vbuf[len] = '\0';
|
||||
printf(" %d: [%s] %s\n", i + base, vbuf, nbuf);
|
||||
fprintf(stderr, " %d: [%s] %s\n", i + base, vbuf, nbuf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2344,7 +2373,7 @@ get_device(cl_platform_id pid, int num)
|
||||
if (nd < 0)
|
||||
return NULL;
|
||||
if (!nd) {
|
||||
printf("No OpenCL devices found\n");
|
||||
fprintf(stderr, "No OpenCL devices found\n");
|
||||
return NULL;
|
||||
}
|
||||
if (num < 0) {
|
||||
@@ -2377,7 +2406,8 @@ get_platform_list(cl_platform_id **list_out)
|
||||
if (np) {
|
||||
ids = (cl_platform_id *) malloc(np * sizeof(*ids));
|
||||
if (ids == NULL) {
|
||||
printf("Could not allocate platform ID list\n");
|
||||
fprintf(stderr,
|
||||
"Could not allocate platform ID list\n");
|
||||
*list_out = NULL;
|
||||
return -1;
|
||||
}
|
||||
@@ -2421,7 +2451,7 @@ show_platforms(cl_platform_id *ids, int np, int base)
|
||||
if (len >= sizeof(vbuf))
|
||||
len = sizeof(vbuf) - 1;
|
||||
vbuf[len] = '\0';
|
||||
printf("%d: [%s] %s\n", i + base, vbuf, nbuf);
|
||||
fprintf(stderr, "%d: [%s] %s\n", i + base, vbuf, nbuf);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2435,7 +2465,7 @@ get_platform(int num)
|
||||
if (np < 0)
|
||||
return NULL;
|
||||
if (!np) {
|
||||
printf("No OpenCL platforms available\n");
|
||||
fprintf(stderr, "No OpenCL platforms available\n");
|
||||
return NULL;
|
||||
}
|
||||
if (num < 0) {
|
||||
@@ -2462,15 +2492,15 @@ enumerate_opencl(void)
|
||||
|
||||
np = get_platform_list(&pids);
|
||||
if (!np) {
|
||||
printf("No OpenCL platforms available\n");
|
||||
fprintf(stderr, "No OpenCL platforms available\n");
|
||||
return;
|
||||
}
|
||||
printf("Available OpenCL platforms:\n");
|
||||
fprintf(stderr, "Available OpenCL platforms:\n");
|
||||
for (i = 0; i < np; i++) {
|
||||
show_platforms(&pids[i], 1, i);
|
||||
nd = get_device_list(pids[i], &dids);
|
||||
if (!nd) {
|
||||
printf(" -- No devices\n");
|
||||
fprintf(stderr, " -- No devices\n");
|
||||
} else {
|
||||
show_devices(pids[i], dids, nd, 0);
|
||||
}
|
||||
@@ -2498,7 +2528,7 @@ get_opencl_device(int platformidx, int deviceidx)
|
||||
void
|
||||
usage(const char *name)
|
||||
{
|
||||
printf(
|
||||
fprintf(stderr,
|
||||
"oclVanitygen %s (" OPENSSL_VERSION_TEXT ")\n"
|
||||
"Usage: %s [-vqrikNTS] [-d <device>] [-f <filename>|-] [<pattern>...]\n"
|
||||
"Generates a bitcoin receiving address matching <pattern>, and outputs the\n"
|
||||
@@ -2607,14 +2637,16 @@ main(int argc, char **argv)
|
||||
case 'w':
|
||||
worksize = atoi(optarg);
|
||||
if (worksize == 0) {
|
||||
printf("Invalid work size '%s'\n", optarg);
|
||||
fprintf(stderr,
|
||||
"Invalid work size '%s'\n", optarg);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case 't':
|
||||
nthreads = atoi(optarg);
|
||||
if (nthreads == 0) {
|
||||
printf("Invalid thread count '%s'\n", optarg);
|
||||
fprintf(stderr,
|
||||
"Invalid thread count '%s'\n", optarg);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
@@ -2625,20 +2657,23 @@ main(int argc, char **argv)
|
||||
nrows = strtol(pend+1, NULL, 0);
|
||||
}
|
||||
if (!nrows || !ncols) {
|
||||
printf("Invalid grid size '%s'\n", optarg);
|
||||
fprintf(stderr,
|
||||
"Invalid grid size '%s'\n", optarg);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case 'b':
|
||||
invsize = atoi(optarg);
|
||||
if (!invsize) {
|
||||
printf("Invalid modular inverse size '%s'\n",
|
||||
optarg);
|
||||
fprintf(stderr,
|
||||
"Invalid modular inverse size '%s'\n",
|
||||
optarg);
|
||||
return 1;
|
||||
}
|
||||
if (invsize & (invsize - 1)) {
|
||||
printf("Modular inverse size must be "
|
||||
"a power of 2\n");
|
||||
fprintf(stderr,
|
||||
"Modular inverse size must be "
|
||||
"a power of 2\n");
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
@@ -2650,7 +2685,7 @@ main(int argc, char **argv)
|
||||
break;
|
||||
case 'f':
|
||||
if (fp) {
|
||||
printf("Multiple files specified\n");
|
||||
fprintf(stderr, "Multiple files specified\n");
|
||||
return 1;
|
||||
}
|
||||
if (!strcmp(optarg, "-")) {
|
||||
@@ -2658,22 +2693,25 @@ main(int argc, char **argv)
|
||||
} else {
|
||||
fp = fopen(optarg, "r");
|
||||
if (!fp) {
|
||||
printf("Could not open %s: %s\n",
|
||||
optarg, strerror(errno));
|
||||
fprintf(stderr,
|
||||
"Could not open %s: %s\n",
|
||||
optarg, strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'o':
|
||||
if (result_file) {
|
||||
printf("Multiple output files specified\n");
|
||||
fprintf(stderr,
|
||||
"Multiple output files specified\n");
|
||||
return 1;
|
||||
}
|
||||
result_file = optarg;
|
||||
break;
|
||||
case 's':
|
||||
if (seedfile != NULL) {
|
||||
printf("Multiple RNG seeds specified\n");
|
||||
fprintf(stderr,
|
||||
"Multiple RNG seeds specified\n");
|
||||
return 1;
|
||||
}
|
||||
seedfile = optarg;
|
||||
@@ -2687,14 +2725,16 @@ main(int argc, char **argv)
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10000000L
|
||||
/* Complain about older versions of OpenSSL */
|
||||
if (verbose > 0) {
|
||||
printf("WARNING: Built with " OPENSSL_VERSION_TEXT "\n"
|
||||
"WARNING: Use OpenSSL 1.0.0d+ for best performance\n");
|
||||
fprintf(stderr,
|
||||
"WARNING: Built with " OPENSSL_VERSION_TEXT "\n"
|
||||
"WARNING: Use OpenSSL 1.0.0d+ for best performance\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (caseinsensitive && regex)
|
||||
printf("WARNING: case insensitive mode incompatible with "
|
||||
"regular expressions\n");
|
||||
fprintf(stderr,
|
||||
"WARNING: case insensitive mode incompatible with "
|
||||
"regular expressions\n");
|
||||
|
||||
if (seedfile) {
|
||||
opt = -1;
|
||||
@@ -2707,17 +2747,18 @@ main(int argc, char **argv)
|
||||
#endif
|
||||
opt = RAND_load_file(seedfile, opt);
|
||||
if (!opt) {
|
||||
printf("Could not load RNG seed %s\n", optarg);
|
||||
fprintf(stderr, "Could not load RNG seed %s\n", optarg);
|
||||
return 1;
|
||||
}
|
||||
if (verbose > 0) {
|
||||
printf("Read %d bytes from RNG seed file\n", opt);
|
||||
fprintf(stderr,
|
||||
"Read %d bytes from RNG seed file\n", opt);
|
||||
}
|
||||
}
|
||||
|
||||
if (fp) {
|
||||
if (!vg_read_file(fp, &patterns, &npatterns)) {
|
||||
printf("Failed to load pattern file\n");
|
||||
fprintf(stderr, "Failed to load pattern file\n");
|
||||
return 1;
|
||||
}
|
||||
if (fp != stdin)
|
||||
@@ -2748,7 +2789,7 @@ main(int argc, char **argv)
|
||||
return 1;
|
||||
|
||||
if (!vcp->vc_npatterns) {
|
||||
printf("No patterns to search\n");
|
||||
fprintf(stderr, "No patterns to search\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -2760,12 +2801,14 @@ main(int argc, char **argv)
|
||||
vcp->vc_key_protect_pass = key_password;
|
||||
if (key_password) {
|
||||
if (!vg_check_password_complexity(key_password, verbose))
|
||||
printf("WARNING: Protecting private keys with "
|
||||
"weak password\n");
|
||||
fprintf(stderr,
|
||||
"WARNING: Protecting private keys with "
|
||||
"weak password\n");
|
||||
}
|
||||
|
||||
if ((verbose > 0) && regex && (vcp->vc_npatterns > 1))
|
||||
printf("Regular expressions: %ld\n", vcp->vc_npatterns);
|
||||
fprintf(stderr,
|
||||
"Regular expressions: %ld\n", vcp->vc_npatterns);
|
||||
|
||||
did = get_opencl_device(platformidx, deviceidx);
|
||||
if (!did) {
|
||||
|
||||
66
pattern.c
66
pattern.c
@@ -320,7 +320,8 @@ vg_output_match(vg_context_t *vcp, EC_KEY *pkey, const char *pattern)
|
||||
if (len) {
|
||||
keytype = "Protkey";
|
||||
} else {
|
||||
printf("ERROR: could not password-protect key\n");
|
||||
fprintf(stderr,
|
||||
"ERROR: could not password-protect key\n");
|
||||
vcp->vc_key_protect_pass = NULL;
|
||||
}
|
||||
}
|
||||
@@ -357,8 +358,9 @@ vg_output_match(vg_context_t *vcp, EC_KEY *pkey, const char *pattern)
|
||||
if (vcp->vc_result_file) {
|
||||
FILE *fp = fopen(vcp->vc_result_file, "a");
|
||||
if (!fp) {
|
||||
printf("ERROR: could not open result file: %s\n",
|
||||
strerror(errno));
|
||||
fprintf(stderr,
|
||||
"ERROR: could not open result file: %s\n",
|
||||
strerror(errno));
|
||||
} else {
|
||||
fprintf(fp,
|
||||
"Pattern: %s\n"
|
||||
@@ -427,8 +429,9 @@ get_prefix_ranges(int addrtype, const char *pfx, BIGNUM **result,
|
||||
for (i = 0; i < p; i++) {
|
||||
c = vg_b58_reverse_map[(int)pfx[i]];
|
||||
if (c == -1) {
|
||||
printf("Invalid character '%c' in prefix '%s'\n",
|
||||
pfx[i], pfx);
|
||||
fprintf(stderr,
|
||||
"Invalid character '%c' in prefix '%s'\n",
|
||||
pfx[i], pfx);
|
||||
goto out;
|
||||
}
|
||||
if (i == zero_prefix) {
|
||||
@@ -436,7 +439,8 @@ get_prefix_ranges(int addrtype, const char *pfx, BIGNUM **result,
|
||||
/* Add another zero prefix */
|
||||
zero_prefix++;
|
||||
if (zero_prefix > 19) {
|
||||
printf("Prefix '%s' is too long\n",
|
||||
fprintf(stderr,
|
||||
"Prefix '%s' is too long\n",
|
||||
pfx);
|
||||
goto out;
|
||||
}
|
||||
@@ -487,7 +491,7 @@ get_prefix_ranges(int addrtype, const char *pfx, BIGNUM **result,
|
||||
* Do not allow the prefix to constrain the
|
||||
* check value, this is ridiculous.
|
||||
*/
|
||||
printf("Prefix '%s' is too long\n", pfx);
|
||||
fprintf(stderr, "Prefix '%s' is too long\n", pfx);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1163,8 +1167,9 @@ vg_prefix_add(avl_root_t *rootp, const char *pattern, BIGNUM *low, BIGNUM *high)
|
||||
vp->vp_high = high;
|
||||
vp2 = vg_prefix_avl_insert(rootp, vp);
|
||||
if (vp2 != NULL) {
|
||||
printf("Prefix '%s' ignored, overlaps '%s'\n",
|
||||
pattern, vp2->vp_pattern);
|
||||
fprintf(stderr,
|
||||
"Prefix '%s' ignored, overlaps '%s'\n",
|
||||
pattern, vp2->vp_pattern);
|
||||
vg_prefix_free(vp);
|
||||
vp = NULL;
|
||||
}
|
||||
@@ -1343,10 +1348,11 @@ vg_prefix_context_next_difficulty(vg_prefix_context_t *vcpp,
|
||||
dbuf = BN_bn2dec(bntmp2);
|
||||
if (vcpp->base.vc_verbose > 0) {
|
||||
if (vcpp->base.vc_npatterns > 1)
|
||||
printf("Next match difficulty: %s (%ld prefixes)\n",
|
||||
dbuf, vcpp->base.vc_npatterns);
|
||||
fprintf(stderr,
|
||||
"Next match difficulty: %s (%ld prefixes)\n",
|
||||
dbuf, vcpp->base.vc_npatterns);
|
||||
else
|
||||
printf("Difficulty: %s\n", dbuf);
|
||||
fprintf(stderr, "Difficulty: %s\n", dbuf);
|
||||
}
|
||||
vcpp->base.vc_chance = atof(dbuf);
|
||||
OPENSSL_free(dbuf);
|
||||
@@ -1389,15 +1395,17 @@ vg_prefix_context_add_patterns(vg_context_t *vcp,
|
||||
} else {
|
||||
/* Case-enumerate the prefix */
|
||||
if (!prefix_case_iter_init(&caseiter, patterns[i])) {
|
||||
printf("Prefix '%s' is too long\n",
|
||||
patterns[i]);
|
||||
fprintf(stderr,
|
||||
"Prefix '%s' is too long\n",
|
||||
patterns[i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (caseiter.ci_nbits > 16) {
|
||||
printf("WARNING: Prefix '%s' has "
|
||||
"2^%d case-varied derivitives\n",
|
||||
patterns[i], caseiter.ci_nbits);
|
||||
fprintf(stderr,
|
||||
"WARNING: Prefix '%s' has "
|
||||
"2^%d case-varied derivitives\n",
|
||||
patterns[i], caseiter.ci_nbits);
|
||||
}
|
||||
|
||||
case_impossible = 0;
|
||||
@@ -1436,7 +1444,8 @@ vg_prefix_context_add_patterns(vg_context_t *vcp,
|
||||
}
|
||||
|
||||
if (ret == -2) {
|
||||
printf("Prefix '%s' not possible\n", patterns[i]);
|
||||
fprintf(stderr,
|
||||
"Prefix '%s' not possible\n", patterns[i]);
|
||||
impossible++;
|
||||
}
|
||||
|
||||
@@ -1456,8 +1465,9 @@ vg_prefix_context_add_patterns(vg_context_t *vcp,
|
||||
BN_div(&bntmp3, NULL, &bntmp2, &bntmp, bnctx);
|
||||
|
||||
dbuf = BN_bn2dec(&bntmp3);
|
||||
printf("Prefix difficulty: %20s %s\n",
|
||||
dbuf, patterns[i]);
|
||||
fprintf(stderr,
|
||||
"Prefix difficulty: %20s %s\n",
|
||||
dbuf, patterns[i]);
|
||||
OPENSSL_free(dbuf);
|
||||
}
|
||||
}
|
||||
@@ -1479,7 +1489,8 @@ vg_prefix_context_add_patterns(vg_context_t *vcp,
|
||||
default:
|
||||
break;
|
||||
}
|
||||
printf("Hint: valid %s addresses begin with %s\n", ats, bw);
|
||||
fprintf(stderr,
|
||||
"Hint: valid %s addresses begin with %s\n", ats, bw);
|
||||
}
|
||||
|
||||
if (npfx)
|
||||
@@ -1677,20 +1688,21 @@ vg_regex_context_add_patterns(vg_context_t *vcp,
|
||||
&pcre_errptr, &pcre_erroffset, NULL);
|
||||
if (!vcrp->vcr_regex[nres]) {
|
||||
const char *spaces = " ";
|
||||
printf("%s\n", patterns[i]);
|
||||
fprintf(stderr, "%s\n", patterns[i]);
|
||||
while (pcre_erroffset > 16) {
|
||||
printf("%s", spaces);
|
||||
fprintf(stderr, "%s", spaces);
|
||||
pcre_erroffset -= 16;
|
||||
}
|
||||
if (pcre_erroffset > 0)
|
||||
printf("%s", &spaces[16 - pcre_erroffset]);
|
||||
printf("^\nRegex error: %s\n", pcre_errptr);
|
||||
fprintf(stderr,
|
||||
"%s", &spaces[16 - pcre_erroffset]);
|
||||
fprintf(stderr, "^\nRegex error: %s\n", pcre_errptr);
|
||||
continue;
|
||||
}
|
||||
vcrp->vcr_regex_extra[nres] =
|
||||
pcre_study(vcrp->vcr_regex[nres], 0, &pcre_errptr);
|
||||
if (pcre_errptr) {
|
||||
printf("Regex error: %s\n", pcre_errptr);
|
||||
fprintf(stderr, "Regex error: %s\n", pcre_errptr);
|
||||
pcre_free(vcrp->vcr_regex[nres]);
|
||||
continue;
|
||||
}
|
||||
@@ -1782,7 +1794,7 @@ restart_loop:
|
||||
|
||||
if (d <= 0) {
|
||||
if (d != PCRE_ERROR_NOMATCH) {
|
||||
printf("PCRE error: %d\n", d);
|
||||
fprintf(stderr, "PCRE error: %d\n", d);
|
||||
res = 2;
|
||||
goto out;
|
||||
}
|
||||
|
||||
55
vanitygen.c
55
vanitygen.c
@@ -240,13 +240,13 @@ vg_thread_loop(void *arg)
|
||||
for (i = 0; i < ptarraysize; i++) {
|
||||
ppnt[i] = EC_POINT_new(pgroup);
|
||||
if (!ppnt[i]) {
|
||||
printf("ERROR: out of memory?\n");
|
||||
fprintf(stderr, "ERROR: out of memory?\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
pbatchinc = EC_POINT_new(pgroup);
|
||||
if (!pbatchinc) {
|
||||
printf("ERROR: out of memory?\n");
|
||||
fprintf(stderr, "ERROR: out of memory?\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -408,13 +408,14 @@ start_threads(vg_context_t *vcp, int nthreads)
|
||||
/* Determine the number of threads */
|
||||
nthreads = count_processors();
|
||||
if (nthreads <= 0) {
|
||||
printf("ERROR: could not determine processor count\n");
|
||||
fprintf(stderr,
|
||||
"ERROR: could not determine processor count\n");
|
||||
nthreads = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (vcp->vc_verbose > 1) {
|
||||
printf("Using %d worker thread(s)\n", nthreads);
|
||||
fprintf(stderr, "Using %d worker thread(s)\n", nthreads);
|
||||
}
|
||||
|
||||
while (--nthreads) {
|
||||
@@ -430,7 +431,7 @@ start_threads(vg_context_t *vcp, int nthreads)
|
||||
void
|
||||
usage(const char *name)
|
||||
{
|
||||
printf(
|
||||
fprintf(stderr,
|
||||
"Vanitygen %s (" OPENSSL_VERSION_TEXT ")\n"
|
||||
"Usage: %s [-vqrikNT] [-t <threads>] [-f <filename>|-] [<pattern>...]\n"
|
||||
"Generates a bitcoin receiving address matching <pattern>, and outputs the\n"
|
||||
@@ -518,13 +519,15 @@ main(int argc, char **argv)
|
||||
case 't':
|
||||
nthreads = atoi(optarg);
|
||||
if (nthreads == 0) {
|
||||
printf("Invalid thread count '%s'\n", optarg);
|
||||
fprintf(stderr,
|
||||
"Invalid thread count '%s'\n", optarg);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case 'f':
|
||||
if (fp) {
|
||||
printf("Multiple files specified\n");
|
||||
fprintf(stderr,
|
||||
"Multiple files specified\n");
|
||||
return 1;
|
||||
}
|
||||
if (!strcmp(optarg, "-")) {
|
||||
@@ -532,22 +535,25 @@ main(int argc, char **argv)
|
||||
} else {
|
||||
fp = fopen(optarg, "r");
|
||||
if (!fp) {
|
||||
printf("Could not open %s: %s\n",
|
||||
optarg, strerror(errno));
|
||||
fprintf(stderr,
|
||||
"Could not open %s: %s\n",
|
||||
optarg, strerror(errno));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'o':
|
||||
if (result_file) {
|
||||
printf("Multiple output files specified\n");
|
||||
fprintf(stderr,
|
||||
"Multiple output files specified\n");
|
||||
return 1;
|
||||
}
|
||||
result_file = optarg;
|
||||
break;
|
||||
case 's':
|
||||
if (seedfile != NULL) {
|
||||
printf("Multiple RNG seeds specified\n");
|
||||
fprintf(stderr,
|
||||
"Multiple RNG seeds specified\n");
|
||||
return 1;
|
||||
}
|
||||
seedfile = optarg;
|
||||
@@ -561,14 +567,16 @@ main(int argc, char **argv)
|
||||
#if OPENSSL_VERSION_NUMBER < 0x10000000L
|
||||
/* Complain about older versions of OpenSSL */
|
||||
if (verbose > 0) {
|
||||
printf("WARNING: Built with " OPENSSL_VERSION_TEXT "\n"
|
||||
"WARNING: Use OpenSSL 1.0.0d+ for best performance\n");
|
||||
fprintf(stderr,
|
||||
"WARNING: Built with " OPENSSL_VERSION_TEXT "\n"
|
||||
"WARNING: Use OpenSSL 1.0.0d+ for best performance\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (caseinsensitive && regex)
|
||||
printf("WARNING: case insensitive mode incompatible with "
|
||||
"regular expressions\n");
|
||||
fprintf(stderr,
|
||||
"WARNING: case insensitive mode incompatible with "
|
||||
"regular expressions\n");
|
||||
|
||||
if (seedfile) {
|
||||
opt = -1;
|
||||
@@ -581,17 +589,18 @@ main(int argc, char **argv)
|
||||
#endif
|
||||
opt = RAND_load_file(seedfile, opt);
|
||||
if (!opt) {
|
||||
printf("Could not load RNG seed %s\n", optarg);
|
||||
fprintf(stderr, "Could not load RNG seed %s\n", optarg);
|
||||
return 1;
|
||||
}
|
||||
if (verbose > 0) {
|
||||
printf("Read %d bytes from RNG seed file\n", opt);
|
||||
fprintf(stderr,
|
||||
"Read %d bytes from RNG seed file\n", opt);
|
||||
}
|
||||
}
|
||||
|
||||
if (fp) {
|
||||
if (!vg_read_file(fp, &patterns, &npatterns)) {
|
||||
printf("Failed to load pattern file\n");
|
||||
fprintf(stderr, "Failed to load pattern file\n");
|
||||
return 1;
|
||||
}
|
||||
if (fp != stdin)
|
||||
@@ -622,7 +631,7 @@ main(int argc, char **argv)
|
||||
return 1;
|
||||
|
||||
if (!vcp->vc_npatterns) {
|
||||
printf("No patterns to search\n");
|
||||
fprintf(stderr, "No patterns to search\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -634,12 +643,14 @@ main(int argc, char **argv)
|
||||
vcp->vc_key_protect_pass = key_password;
|
||||
if (key_password) {
|
||||
if (!vg_check_password_complexity(key_password, verbose))
|
||||
printf("WARNING: Protecting private keys with "
|
||||
"weak password\n");
|
||||
fprintf(stderr,
|
||||
"WARNING: Protecting private keys with "
|
||||
"weak password\n");
|
||||
}
|
||||
|
||||
if ((verbose > 0) && regex && (vcp->vc_npatterns > 1))
|
||||
printf("Regular expressions: %ld\n", vcp->vc_npatterns);
|
||||
fprintf(stderr,
|
||||
"Regular expressions: %ld\n", vcp->vc_npatterns);
|
||||
|
||||
if (!start_threads(vcp, nthreads))
|
||||
return 1;
|
||||
|
||||
Reference in New Issue
Block a user