mirror of
https://github.com/GOSTSec/vanitygen
synced 2025-02-07 12:24:20 +00:00
Use strings to compare public keys instead of EC_POINT_cmp().
Fix another bug in the bounty list parser.
This commit is contained in:
parent
7c93e8de60
commit
f95e89020f
@ -156,6 +156,7 @@ server_workitem_free(workitem_t *wip)
|
|||||||
typedef struct pubkeybatch_s {
|
typedef struct pubkeybatch_s {
|
||||||
avl_item_t avlent;
|
avl_item_t avlent;
|
||||||
EC_POINT *pubkey;
|
EC_POINT *pubkey;
|
||||||
|
const char *pubkey_hex;
|
||||||
avl_root_t items;
|
avl_root_t items;
|
||||||
int nitems;
|
int nitems;
|
||||||
double total_value;
|
double total_value;
|
||||||
@ -173,41 +174,49 @@ server_batch_free(pubkeybatch_t *pbatch)
|
|||||||
}
|
}
|
||||||
if (pbatch->pubkey)
|
if (pbatch->pubkey)
|
||||||
EC_POINT_free(pbatch->pubkey);
|
EC_POINT_free(pbatch->pubkey);
|
||||||
|
if (pbatch->pubkey_hex)
|
||||||
|
free((char*)pbatch->pubkey_hex);
|
||||||
free(pbatch);
|
free(pbatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pubkeybatch_cmp(pubkeybatch_t *a, pubkeybatch_t *b, const EC_GROUP *pgroup)
|
pubkeybatch_cmp(pubkeybatch_t *a, pubkeybatch_t *b)
|
||||||
{
|
{
|
||||||
return EC_POINT_cmp(pgroup, a->pubkey, b->pubkey, NULL);
|
return strcmp(a->pubkey_hex, b->pubkey_hex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static pubkeybatch_t *
|
static pubkeybatch_t *
|
||||||
pubkeybatch_avl_search(avl_root_t *rootp, const EC_POINT *pubkey,
|
pubkeybatch_avl_search(avl_root_t *rootp, const EC_POINT *pubkey,
|
||||||
const EC_GROUP *pgroup)
|
const EC_GROUP *pgroup)
|
||||||
{
|
{
|
||||||
|
char *pubkey_hex;
|
||||||
pubkeybatch_t *vp;
|
pubkeybatch_t *vp;
|
||||||
avl_item_t *itemp = rootp->ar_root;
|
avl_item_t *itemp = rootp->ar_root;
|
||||||
|
pubkey_hex = EC_POINT_point2hex(pgroup,
|
||||||
|
pubkey,
|
||||||
|
POINT_CONVERSION_UNCOMPRESSED,
|
||||||
|
NULL);
|
||||||
while (itemp) {
|
while (itemp) {
|
||||||
int cmpres;
|
int cmpres;
|
||||||
vp = avl_item_entry(itemp, pubkeybatch_t, avlent);
|
vp = avl_item_entry(itemp, pubkeybatch_t, avlent);
|
||||||
cmpres = EC_POINT_cmp(pgroup, vp->pubkey, pubkey, NULL);
|
cmpres = strcmp(pubkey_hex, vp->pubkey_hex);
|
||||||
if (cmpres > 0) {
|
if (cmpres > 0) {
|
||||||
itemp = itemp->ai_left;
|
itemp = itemp->ai_left;
|
||||||
} else {
|
} else {
|
||||||
if (cmpres < 0) {
|
if (cmpres < 0) {
|
||||||
itemp = itemp->ai_right;
|
itemp = itemp->ai_right;
|
||||||
} else
|
} else {
|
||||||
|
free(pubkey_hex);
|
||||||
return vp;
|
return vp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
free(pubkey_hex);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static pubkeybatch_t *
|
static pubkeybatch_t *
|
||||||
pubkeybatch_avl_insert(avl_root_t *rootp, pubkeybatch_t *vpnew,
|
pubkeybatch_avl_insert(avl_root_t *rootp, pubkeybatch_t *vpnew)
|
||||||
const EC_GROUP *pgroup)
|
|
||||||
{
|
{
|
||||||
pubkeybatch_t *vp;
|
pubkeybatch_t *vp;
|
||||||
avl_item_t *itemp = NULL;
|
avl_item_t *itemp = NULL;
|
||||||
@ -216,7 +225,7 @@ pubkeybatch_avl_insert(avl_root_t *rootp, pubkeybatch_t *vpnew,
|
|||||||
int cmpres;
|
int cmpres;
|
||||||
itemp = *ptrp;
|
itemp = *ptrp;
|
||||||
vp = avl_item_entry(itemp, pubkeybatch_t, avlent);
|
vp = avl_item_entry(itemp, pubkeybatch_t, avlent);
|
||||||
cmpres = pubkeybatch_cmp(vpnew, vp, pgroup);
|
cmpres = pubkeybatch_cmp(vpnew, vp);
|
||||||
if (cmpres > 0) {
|
if (cmpres > 0) {
|
||||||
ptrp = &itemp->ai_left;
|
ptrp = &itemp->ai_left;
|
||||||
} else {
|
} else {
|
||||||
@ -414,7 +423,11 @@ server_workitem_add(server_request_t *reqp, workitem_t *wip)
|
|||||||
avl_root_init(&pbatch->items);
|
avl_root_init(&pbatch->items);
|
||||||
pbatch->total_value = 0;
|
pbatch->total_value = 0;
|
||||||
pbatch->pubkey = wip->pubkey;
|
pbatch->pubkey = wip->pubkey;
|
||||||
pubkeybatch_avl_insert(&reqp->items, pbatch, reqp->group);
|
pbatch->pubkey_hex = EC_POINT_point2hex(reqp->group,
|
||||||
|
wip->pubkey,
|
||||||
|
POINT_CONVERSION_UNCOMPRESSED,
|
||||||
|
NULL);
|
||||||
|
pubkeybatch_avl_insert(&reqp->items, pbatch);
|
||||||
reqp->nitems++;
|
reqp->nitems++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -443,7 +456,7 @@ server_body_reader(const char *buf, size_t elemsize, size_t len, void *param)
|
|||||||
if (!len)
|
if (!len)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if ((reqp->part_size < (reqp->part_end + len)) &&
|
if ((reqp->part_size < (reqp->part_end + len + 1)) &&
|
||||||
(reqp->part_off > 0)) {
|
(reqp->part_off > 0)) {
|
||||||
memmove(reqp->part_buf,
|
memmove(reqp->part_buf,
|
||||||
reqp->part_buf + reqp->part_off,
|
reqp->part_buf + reqp->part_off,
|
||||||
@ -452,10 +465,10 @@ server_body_reader(const char *buf, size_t elemsize, size_t len, void *param)
|
|||||||
reqp->part_off = 0;
|
reqp->part_off = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reqp->part_size < (reqp->part_end + len)) {
|
if (reqp->part_size < (reqp->part_end + len + 1)) {
|
||||||
if (reqp->part_size == 0)
|
if (reqp->part_size == 0)
|
||||||
reqp->part_size = 4096;
|
reqp->part_size = 4096;
|
||||||
while (reqp->part_size < (reqp->part_end + len)) {
|
while (reqp->part_size < (reqp->part_end + len + 1)) {
|
||||||
reqp->part_size *= 2;
|
reqp->part_size *= 2;
|
||||||
if (reqp->part_size > (1024*1024)) {
|
if (reqp->part_size > (1024*1024)) {
|
||||||
fprintf(stderr, "Line too long from server");
|
fprintf(stderr, "Line too long from server");
|
||||||
@ -473,6 +486,7 @@ server_body_reader(const char *buf, size_t elemsize, size_t len, void *param)
|
|||||||
|
|
||||||
memcpy(reqp->part_buf + reqp->part_end, buf, len);
|
memcpy(reqp->part_buf + reqp->part_end, buf, len);
|
||||||
reqp->part_end += len;
|
reqp->part_end += len;
|
||||||
|
reqp->part_buf[reqp->part_end] = '\0';
|
||||||
|
|
||||||
line = reqp->part_buf + reqp->part_off;
|
line = reqp->part_buf + reqp->part_off;
|
||||||
while (1) {
|
while (1) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user