Skip to content

Commit 9aabdb0

Browse files
committed
initial
0 parents  commit 9aabdb0

File tree

12 files changed

+2143
-0
lines changed

12 files changed

+2143
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.DS_Store
2+
*.out
3+
ecloop
4+
bench

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2024 vladkens
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

Makefile

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
CLANG_FLAGS ?= -O3
2+
3+
ifeq ($(shell uname -m),x86_64)
4+
CLANG_FLAGS += -msse4.1 -msha
5+
endif
6+
7+
default:
8+
@make build
9+
./ecloop -i data/btc-puzzles-hash -t 1 -r 800000:ffffff
10+
11+
build: clean
12+
@clang $(CLANG_FLAGS) main.c -o ecloop
13+
14+
bench: clean
15+
@clang $(CLANG_FLAGS) bench.c -o ./bench && ./bench
16+
17+
clean:
18+
@rm -rf ecloop bench main a.out *.profraw *.profdata

bench.c

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <time.h>
4+
5+
#include "lib/addr.c"
6+
#include "lib/ec64.c"
7+
8+
void print_res(char *label, clock_t stime, u64 iters) {
9+
double dt = ((double)(clock() - stime)) / CLOCKS_PER_SEC;
10+
printf("%20s: %.2fM it/s ~ %.2f s\n", label, iters / dt / 1000000, dt);
11+
}
12+
13+
int main() {
14+
clock_t stime;
15+
u64 iters;
16+
pe g;
17+
fe f;
18+
19+
// jacobian coordinates
20+
iters = 1000 * 1000 * 10;
21+
22+
pe_clone(&g, &G2);
23+
stime = clock();
24+
for (u64 i = 0; i < iters; ++i) _ec_jacobi_add1(&g, &g, &G1);
25+
print_res("_ec_jacobi_add1", stime, iters);
26+
27+
pe_clone(&g, &G2);
28+
stime = clock();
29+
for (u64 i = 0; i < iters; ++i) _ec_jacobi_add2(&g, &g, &G1);
30+
print_res("_ec_jacobi_add2", stime, iters);
31+
32+
pe_clone(&g, &G2);
33+
stime = clock();
34+
for (u64 i = 0; i < iters; ++i) _ec_jacobi_dbl1(&g, &g);
35+
print_res("_ec_jacobi_dbl1", stime, iters);
36+
37+
pe_clone(&g, &G2);
38+
stime = clock();
39+
for (u64 i = 0; i < iters; ++i) _ec_jacobi_dbl2(&g, &g);
40+
print_res("_ec_jacobi_dbl2", stime, iters);
41+
42+
// montgomery ladder
43+
iters = 1000 * 50;
44+
45+
pe_clone(&g, &G2);
46+
fe_set64(f, 0);
47+
f[0] = ((u64)2 << 63) - 1;
48+
f[2] = ((u64)2 << 31) - 1;
49+
stime = clock();
50+
for (u64 i = 0; i < iters; ++i) ec_jacobi_mul(&g, &g, f);
51+
print_res("ec_jacobi_mul", stime, iters);
52+
53+
// affine coordinates
54+
iters = 1000 * 500;
55+
56+
pe_clone(&g, &G2);
57+
stime = clock();
58+
for (u64 i = 0; i < iters; ++i) ec_affine_add(&g, &g, &G1);
59+
print_res("ec_affine_add", stime, iters);
60+
61+
pe_clone(&g, &G2);
62+
stime = clock();
63+
for (u64 i = 0; i < iters; ++i) ec_affine_dbl(&g, &g);
64+
print_res("ec_affine_dbl", stime, iters);
65+
66+
// modular inversion
67+
iters = 1000 * 100;
68+
69+
for (u64 i = 0; i < iters; ++i) _fe_modinv_binpow(f, g.x);
70+
print_res("_fe_modinv_binpow", stime, iters);
71+
72+
for (u64 i = 0; i < iters; ++i) _fe_modinv_addchn(f, g.x);
73+
print_res("_fe_modinv_addchn", stime, iters);
74+
}

data/btc-puzzles-addr

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
1BgGZ9tcN4rm9KBzDn7KprQz87SZ26SAMH
2+
1CUNEBjYrCn2y1SdiUMohaKUi4wpP326Lb
3+
19ZewH8Kk1PDbSNdJ97FP4EiCjTRaZMZQA
4+
1EhqbyUMvvs7BfL8goY6qcPbD6YKfPqb7e
5+
1E6NuFjCi27W5zoXg8TRdcSRq84zJeBW3k
6+
1PitScNLyp2HCygzadCh7FveTnfmpPbfp8
7+
1McVt1vMtCC7yn5b9wgX1833yCcLXzueeC
8+
1M92tSqNmQLYw33fuBvjmeadirh1ysMBxK
9+
1CQFwcjw1dwhtkVWBttNLDtqL7ivBonGPV
10+
1LeBZP5QCwwgXRtmVUvTVrraqPUokyLHqe
11+
1PgQVLmst3Z314JrQn5TNiys8Hc38TcXJu
12+
1DBaumZxUkM4qMQRt2LVWyFJq5kDtSZQot
13+
1Pie8JkxBT6MGPz9Nvi3fsPkr2D8q3GBc1
14+
1ErZWg5cFCe4Vw5BzgfzB74VNLaXEiEkhk
15+
1QCbW9HWnwQWiQqVo5exhAnmfqKRrCRsvW
16+
1BDyrQ6WoF8VN3g9SAS1iKZcPzFfnDVieY
17+
1HduPEXZRdG26SUT5Yk83mLkPyjnZuJ7Bm
18+
1GnNTmTVLZiqQfLbAdp9DVdicEnB5GoERE
19+
1NWmZRpHH4XSPwsW6dsS3nrNWfL1yrJj4w
20+
1HsMJxNiV7TLxmoF6uJNkydxPFDog4NQum
21+
14oFNXucftsHiUMY8uctg6N487riuyXs4h
22+
1CfZWK1QTQE3eS9qn61dQjV89KDjZzfNcv
23+
1L2GM8eE7mJWLdo3HZS6su1832NX2txaac
24+
1rSnXMr63jdCuegJFuidJqWxUPV7AtUf7
25+
15JhYXn6Mx3oF4Y7PcTAv2wVVAuCFFQNiP
26+
1JVnST957hGztonaWK6FougdtjxzHzRMMg
27+
128z5d7nN7PkCuX5qoA4Ys6pmxUYnEy86k
28+
12jbtzBb54r97TCwW3G1gCFoumpckRAPdY
29+
19EEC52krRUK1RkUAEZmQdjTyHT7Gp1TYT
30+
1LHtnpd8nU5VHEMkG2TMYYNUjjLc992bps
31+
1LhE6sCTuGae42Axu1L1ZB7L96yi9irEBE
32+
1FRoHA9xewq7DjrZ1psWJVeTer8gHRqEvR
33+
187swFMjz1G54ycVU56B7jZFHFTNVQFDiu
34+
1PWABE7oUahG2AFFQhhvViQovnCr4rEv7Q
35+
1PWCx5fovoEaoBowAvF5k91m2Xat9bMgwb
36+
1Be2UF9NLfyLFbtm3TCbmuocc9N1Kduci1
37+
14iXhn8bGajVWegZHJ18vJLHhntcpL4dex
38+
1HBtApAFA9B2YZw3G2YKSMCtb3dVnjuNe2
39+
122AJhKLEfkFBaGAd84pLp1kfE7xK3GdT8
40+
1EeAxcprB2PpCnr34VfZdFrkUWuxyiNEFv
41+
1L5sU9qvJeuwQUdt4y1eiLmquFxKjtHr3E
42+
1E32GPWgDyeyQac4aJxm9HVoLrrEYPnM4N
43+
1PiFuqGpG8yGM5v6rNHWS3TjsG6awgEGA1
44+
1CkR2uS7LmFwc3T2jV8C1BhWb5mQaoxedF
45+
1NtiLNGegHWE3Mp9g2JPkgx6wUg4TW7bbk
46+
1F3JRMWudBaj48EhwcHDdpeuy2jwACNxjP
47+
1Pd8VvT49sHKsmqrQiP61RsVwmXCZ6ay7Z
48+
1DFYhaB2J9q1LLZJWKTnscPWos9VBqDHzv
49+
12CiUhYVTTH33w3SPUBqcpMoqnApAV4WCF
50+
1MEzite4ReNuWaL5Ds17ePKt2dCxWEofwk
51+
1NpnQyZ7x24ud82b7WiRNvPm6N8bqGQnaS
52+
15z9c9sVpu6fwNiK7dMAFgMYSK4GqsGZim
53+
15K1YKJMiJ4fpesTVUcByoz334rHmknxmT
54+
1KYUv7nSvXx4642TKeuC2SNdTk326uUpFy
55+
1LzhS3k3e9Ub8i2W1V8xQFdB8n2MYCHPCa
56+
17aPYR1m6pVAacXg1PTDDU7XafvK1dxvhi
57+
15c9mPGLku1HuW9LRtBf4jcHVpBUt8txKz
58+
1Dn8NF8qDyyfHMktmuoQLGyjWmZXgvosXf
59+
1HAX2n9Uruu9YDt4cqRgYcvtGvZj1rbUyt
60+
1Kn5h2qpgw9mWE5jKpk8PP4qvvJ1QVy8su
61+
1AVJKwzs9AskraJLGHAZPiaZcrpDr1U6AB
62+
1Me6EfpwZK5kQziBwBfvLiHjaPGxCKLoJi
63+
1NpYjtLira16LfGbGwZJ5JbDPh3ai9bjf4
64+
16jY7qLJnxb7CHZyqBP8qca9d51gAjyXQN
65+
18ZMbwUFLMHoZBbfpCjUJQTCMCbktshgpe
66+
13zb1hQbWVsc2S7ZTZnP2G4undNNpdh5so
67+
1BY8GQbnueYofwSuFAT3USAhGjPrkxDdW9
68+
1MVDYgVaSN6iKKEsbzRUAYFrYJadLYZvvZ
69+
19vkiEajfhuZ8bs8Zu2jgmC6oqZbWqhxhG
70+
19YZECXj3SxEZMoUeJ1yiPsw8xANe7M7QR
71+
1PWo3JeB9jrGwfHDNpdGK54CRas7fsVzXU
72+
1JTK7s9YVYywfm5XUH7RNhHJH1LshCaRFR
73+
12VVRNPi4SJqUTsp6FmqDqY5sGosDtysn4
74+
1FWGcVDK3JGzCC3WtkYetULPszMaK2Jksv
75+
1J36UjUByGroXcCvmj13U6uwaVv9caEeAt
76+
1DJh2eHFYQfACPmrvpyWc8MSTYKh7w9eRF
77+
1Bxk4CQdqL9p22JEtDfdXMsng1XacifUtE
78+
15qF6X51huDjqTmF9BJgxXdt1xcj46Jmhb
79+
1ARk8HWJMn8js8tQmGUJeQHjSE7KRkn2t8
80+
1BCf6rHUW6m3iH2ptsvnjgLruAiPQQepLe
81+
15qsCm78whspNQFydGJQk5rexzxTQopnHZ
82+
13zYrYhhJxp6Ui1VV7pqa5WDhNWM45ARAC
83+
14MdEb4eFcT3MVG5sPFG4jGLuHJSnt1Dk2
84+
1CMq3SvFcVEcpLMuuH8PUcNiqsK1oicG2D
85+
1Kh22PvXERd2xpTQk3ur6pPEqFeckCJfAr
86+
1K3x5L6G57Y494fDqBfrojD28UJv4s5JcK
87+
1PxH3K1Shdjb7gSEoTX7UPDZ6SH4qGPrvq
88+
16AbnZjZZipwHMkYKBSfswGWKDmXHjEpSf
89+
19QciEHbGVNY4hrhfKXmcBBCrJSBZ6TaVt
90+
1L12FHH2FHjvTviyanuiFVfmzCy46RRATU
91+
1EzVHtmbN4fs4MiNk3ppEnKKhsmXYJ4s74
92+
1AE8NzzgKE7Yhz7BWtAcAAxiFMbPo82NB5
93+
17Q7tuG2JwFFU9rXVj3uZqRtioH3mx2Jad
94+
1K6xGMUbs6ZTXBnhw1pippqwK6wjBWtNpL
95+
19eVSDuizydXxhohGh8Ki9WY9KsHdSwoQC
96+
15ANYzzCp5BFHcCnVFzXqyibpzgPLWaD8b
97+
18ywPwj39nGjqBrQJSzZVq2izR12MDpDr8
98+
1CaBVPrwUxbQYYswu32w7Mj4HR4maNoJSX
99+
1JWnE6p6UN7ZJBN7TtcbNDoRcjFtuDWoNL
100+
1KCgMv8fo2TPBpddVi9jqmMmcne9uSNJ5F
101+
1CKCVdbDJasYmhswB6HKZHEAnNaDpK7W4n
102+
1PXv28YxmYMaB8zxrKeZBW8dt2HK7RkRPX
103+
1AcAmB6jmtU6AiEcXkmiNE9TNVPsj9DULf
104+
1EQJvpsmhazYCcKX5Au6AZmZKRnzarMVZu
105+
1CMjscKB3QW7SDyQ4c3C3DEUHiHRhiZVib
106+
18KsfuHuzQaBTNLASyj15hy4LuqPUo1FNB
107+
15EJFC5ZTs9nhsdvSUeBXjLAuYq3SWaxTc
108+
1HB1iKUqeffnVsvQsbpC6dNi1XKbyNuqao
109+
1GvgAXVCbA8FBjXfWiAms4ytFeJcKsoyhL
110+
12JzYkkN76xkwvcPT6AWKZtGX6w2LAgsJg
111+
1824ZJQ7nKJ9QFTRBqn7z7dHV5EGpzUpH3
112+
18A7NA9FTsnJxWgkoFfPAFbQzuQxpRtCos
113+
1NeGn21dUDDeqFQ63xb2SpgUuXuBLA4WT4
114+
174SNxfqpdMGYy5YQcfLbSTK3MRNZEePoy
115+
1NLbHuJebVwUZ1XqDjsAyfTRUPwDQbemfv
116+
1MnJ6hdhvK37VLmqcdEwqC3iFxyWH2PHUV
117+
1KNRfGWw7Q9Rmwsc6NT5zsdvEb9M2Wkj5Z
118+
1PJZPzvGX19a7twf5HyD2VvNiPdHLzm9F6
119+
1GuBBhf61rnvRe4K8zu8vdQB3kHzwFqSy7
120+
17s2b9ksz5y7abUm92cHwG8jEPCzK3dLnT
121+
1GDSuiThEV64c166LUFC9uDcVdGjqkxKyh
122+
1Me3ASYt5JCTAK2XaC32RMeH34PdprrfDx
123+
1CdufMQL892A69KXgv6UNBD17ywWqYpKut
124+
1BkkGsX9ZM6iwL3zbqs7HWBV7SvosR6m8N
125+
1PXAyUB8ZoH3WD8n5zoAthYjN15yN5CVq5
126+
1AWCLZAjKbV1P7AHvaPNCKiB7ZWVDMxFiz
127+
1G6EFyBRU86sThN3SSt3GrHu1sA7w7nzi4
128+
1MZ2L1gFrCtkkn6DnTT2e4PFUTHw9gNwaj
129+
1Hz3uv3nNZzBVMXLGadCucgjiCs5W9vaGz
130+
1Fo65aKq8s8iquMt6weF1rku1moWVEd5Ua
131+
16zRPnT8znwq42q7XeMkZUhb1bKqgRogyy
132+
1KrU4dHE5WrW8rhWDsTRjR21r8t3dsrS3R
133+
17uDfp5r4n441xkgLFmhNoSW1KWp6xVLD
134+
13A3JrvXmvg5w9XGvyyR4JEJqiLz8ZySY3
135+
16RGFo6hjq9ym6Pj7N5H7L1NR1rVPJyw2v
136+
1UDHPdovvR985NrWSkdWQDEQ1xuRiTALq
137+
15nf31J46iLuK1ZkTnqHo7WgN5cARFK3RA
138+
1Ab4vzG6wEQBDNQM1B2bvUz4fqXXdFk2WT
139+
1Fz63c775VV9fNyj25d9Xfw3YHE6sKCxbt
140+
1QKBaU6WAeycb3DbKbLBkX7vJiaS8r42Xo
141+
1CD91Vm97mLQvXhrnoMChhJx4TP9MaQkJo
142+
15MnK2jXPqTMURX4xC3h4mAZxyCcaWWEDD
143+
13N66gCzWWHEZBxhVxG18P8wyjEWF9Yoi1
144+
1NevxKDYuDcCh1ZMMi6ftmWwGrZKC6j7Ux
145+
19GpszRNUej5yYqxXoLnbZWKew3KdVLkXg
146+
1M7ipcdYHey2Y5RZM34MBbpugghmjaV89P
147+
18aNhurEAJsw6BAgtANpexk5ob1aGTwSeL
148+
1FwZXt6EpRT7Fkndzv6K4b4DFoT4trbMrV
149+
1CXvTzR6qv8wJ7eprzUKeWxyGcHwDYP1i2
150+
1MUJSJYtGPVGkBCTqGspnxyHahpt5Te8jy
151+
13Q84TNNvgcL3HJiqQPvyBb9m4hxjS3jkV
152+
1LuUHyrQr8PKSvbcY1v1PiuGuqFjWpDumN
153+
18192XpzzdDi2K11QVHR7td2HcPS6Qs5vg
154+
1NgVmsCCJaKLzGyKLFJfVequnFW9ZvnMLN
155+
1AoeP37TmHdFh8uN72fu9AqgtLrUwcv2wJ
156+
1FTpAbQa4h8trvhQXjXnmNhqdiGBd1oraE
157+
14JHoRAdmJg3XR4RjMDh6Wed6ft6hzbQe9
158+
19z6waranEf8CcP8FqNgdwUe1QRxvUNKBG
159+
14u4nA5sugaswb6SZgn5av2vuChdMnD9E5
160+
1NBC8uXJy1GiJ6drkiZa1WuKn51ps7EPTv

0 commit comments

Comments
 (0)