Skip to content

Commit 95138ca

Browse files
fixup! Add secp256k1_pubkey_sort
1 parent 4520d75 commit 95138ca

File tree

2 files changed

+24
-9
lines changed

2 files changed

+24
-9
lines changed

src/hsort_impl.h

+11-9
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,22 @@ static SECP256K1_INLINE size_t secp256k1_heap_child2(size_t i) {
2323
return secp256k1_heap_child1(i)+1;
2424
}
2525

26-
static SECP256K1_INLINE void secp256k1_heap_swap64(unsigned char *a, size_t i, size_t j, size_t stride) {
26+
static SECP256K1_INLINE void secp256k1_heap_swap64(unsigned char *a, size_t i, size_t j, size_t stride, size_t swap_size) {
2727
unsigned char tmp[64];
28-
VERIFY_CHECK(stride <= 64);
29-
memcpy(tmp, a + i*stride, stride);
30-
memmove(a + i*stride, a + j*stride, stride);
31-
memcpy(a + j*stride, tmp, stride);
28+
VERIFY_CHECK(swap_size <= 64);
29+
memcpy(tmp, a + i*stride, swap_size);
30+
memmove(a + i*stride, a + j*stride, swap_size);
31+
memcpy(a + j*stride, tmp, swap_size);
3232
}
3333

34+
/* Swap the elements of a at indices i and j, assuming that the size of each element is stride. */
3435
static SECP256K1_INLINE void secp256k1_heap_swap(unsigned char *a, size_t i, size_t j, size_t stride) {
35-
while (64 < stride) {
36-
secp256k1_heap_swap64(a + (stride - 64), i, j, 64);
37-
stride -= 64;
36+
size_t remaining = stride;
37+
while (64 < remaining) {
38+
secp256k1_heap_swap64(a + (remaining - 64), i, j, stride, 64);
39+
remaining -= 64;
3840
}
39-
secp256k1_heap_swap64(a, i, j, stride);
41+
secp256k1_heap_swap64(a, i, j, stride, remaining);
4042
}
4143

4244
static SECP256K1_INLINE void secp256k1_heap_down(unsigned char *a, size_t i, size_t heap_size, size_t stride,

src/tests.c

+13
Original file line numberDiff line numberDiff line change
@@ -6607,6 +6607,18 @@ static void run_pubkey_comparison(void) {
66076607
CHECK(secp256k1_ec_pubkey_cmp(CTX, &pk2, &pk1) > 0);
66086608
}
66096609

6610+
static void test_heap_swap(void) {
6611+
unsigned char a[600];
6612+
unsigned char e[sizeof(a)];
6613+
memset(a, 21, 200);
6614+
memset(a + 200, 99, 200);
6615+
memset(a + 400, 42, 200);
6616+
memset(e, 42, 200);
6617+
memset(e + 200, 99, 200);
6618+
memset(e + 400, 21, 200);
6619+
secp256k1_heap_swap(a, 0, 2, 200);
6620+
CHECK(secp256k1_memcmp_var(a, e, sizeof(a)) == 0);
6621+
}
66106622

66116623
static void test_hsort_is_sorted(int *ints, size_t n) {
66126624
size_t i;
@@ -6801,6 +6813,7 @@ static void run_pubkey_sort(void) {
68016813
test_sort_api();
68026814
test_sort();
68036815
test_sort_vectors();
6816+
test_heap_swap();
68046817
}
68056818

68066819

0 commit comments

Comments
 (0)