Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated speedup scripts to latest btclib #6

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 31 additions & 31 deletions py-scripts/speedup_curvemult.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,21 @@
import random
import time

from btclib.ecc.curve import secp256k1 as ec
from btclib.curvegroup import (
from btclib.ec.curve import secp256k1 as ec
from btclib.ec.curve_group import (
_mult,
_mult_base_3,
_mult_fixed_window,
_mult_fixed_window_cached,
_mult_jac,
_mult_mont_ladder,
mult_base_3,
mult_fixed_window,
mult_fixed_window_cached,
mult_jac,
mult_mont_ladder,
cached_multiples,
cached_multiples_fixwind,
)
from btclib.curvegroup2 import (
_mult_endomorphism_secp256k1,
_mult_sliding_window,
_mult_w_NAF,
from btclib.ec.curve_group_2 import (
mult_endomorphism_secp256k1,
mult_sliding_window,
mult_w_NAF,
)

# setup
Expand All @@ -47,14 +47,14 @@
T = ec.GJ
start = time.time()
for q in qs:
T = _mult_jac(q, ec.GJ, ec) if gen_only else _mult_jac(q, T, ec)
T = mult_jac(q, ec.GJ, ec) if gen_only else mult_jac(q, T, ec)
double_and_add = time.time() - start
print(f"Double & add : {double_and_add / benchmark:.0%}")

T = ec.GJ
start = time.time()
for q in qs:
T = _mult_mont_ladder(q, ec.GJ, ec) if gen_only else _mult_mont_ladder(q, T, ec)
T = mult_mont_ladder(q, ec.GJ, ec) if gen_only else mult_mont_ladder(q, T, ec)
montgomery = time.time() - start
print(f"Montgomery ladder: {montgomery / benchmark:.0%}")

Expand All @@ -63,7 +63,7 @@
T = ec.GJ
start = time.time()
for q in qs:
T = _mult_base_3(q, ec.GJ, ec) if gen_only else _mult_base_3(q, T, ec)
T = mult_base_3(q, ec.GJ, ec) if gen_only else mult_base_3(q, T, ec)
base3 = time.time() - start
print(f"Base 3 : {base3 / benchmark:.0%}", cached_multiples.cache_info())

Expand All @@ -75,9 +75,9 @@
start = time.time()
for q in qs:
T = (
_mult_fixed_window(q, ec.GJ, ec, w, cached)
mult_fixed_window(q, ec.GJ, ec, w, cached)
if gen_only
else _mult_fixed_window(q, T, ec, w, cached)
else mult_fixed_window(q, T, ec, w, cached)
)
fixed_window_4 = time.time() - start
print(
Expand All @@ -93,9 +93,9 @@
start = time.time()
for q in qs:
T = (
_mult_fixed_window(q, ec.GJ, ec, w, cached)
mult_fixed_window(q, ec.GJ, ec, w, cached)
if gen_only
else _mult_fixed_window(q, T, ec, w, cached)
else mult_fixed_window(q, T, ec, w, cached)
)
fixed_window_5 = time.time() - start
print(
Expand All @@ -111,9 +111,9 @@
start = time.time()
for q in qs:
T = (
_mult_fixed_window(q, ec.GJ, ec, w, cached)
mult_fixed_window(q, ec.GJ, ec, w, cached)
if gen_only
else _mult_fixed_window(q, T, ec, w, cached)
else mult_fixed_window(q, T, ec, w, cached)
)
fixed_window_4_ca = time.time() - start
print(
Expand All @@ -129,9 +129,9 @@
start = time.time()
for q in qs:
T = (
_mult_fixed_window(q, ec.GJ, ec, w, cached)
mult_fixed_window(q, ec.GJ, ec, w, cached)
if gen_only
else _mult_fixed_window(q, T, ec, w, cached)
else mult_fixed_window(q, T, ec, w, cached)
)
fixed_window_5_ca = time.time() - start
print(
Expand All @@ -145,9 +145,9 @@
start = time.time()
for q in qs:
T = (
_mult_fixed_window_cached(q, ec.GJ, ec)
mult_fixed_window_cached(q, ec.GJ, ec)
if gen_only
else _mult_fixed_window_cached(q, T, ec)
else mult_fixed_window_cached(q, T, ec)
)
fixed_window_cached = time.time() - start
print(
Expand All @@ -162,9 +162,9 @@
start = time.time()
for q in qs:
T = (
_mult_sliding_window(q, ec.GJ, ec, 5)
mult_sliding_window(q, ec.GJ, ec, 5)
if gen_only
else _mult_sliding_window(q, T, ec, w)
else mult_sliding_window(q, T, ec, w)
)
sliding_window_4 = time.time() - start
print(
Expand All @@ -179,9 +179,9 @@
start = time.time()
for q in qs:
T = (
_mult_sliding_window(q, ec.GJ, ec, 5)
mult_sliding_window(q, ec.GJ, ec, 5)
if gen_only
else _mult_sliding_window(q, T, ec, w)
else mult_sliding_window(q, T, ec, w)
)
sliding_window_5 = time.time() - start
print(
Expand All @@ -195,7 +195,7 @@
w = 4
start = time.time()
for q in qs:
T = _mult_w_NAF(q, ec.GJ, ec, 4) if gen_only else _mult_w_NAF(q, T, ec, w)
T = mult_w_NAF(q, ec.GJ, ec, 4) if gen_only else _mult_w_NAF(q, T, ec, w)
wNAF_4 = time.time() - start
print(f"wNAF 4 : {wNAF_4 / benchmark:.0%}", cached_multiples.cache_info())

Expand All @@ -205,7 +205,7 @@
w = 5
start = time.time()
for q in qs:
T = _mult_w_NAF(q, ec.GJ, ec, 4) if gen_only else _mult_w_NAF(q, T, ec, w)
T = mult_w_NAF(q, ec.GJ, ec, 4) if gen_only else mult_w_NAF(q, T, ec, w)
wNAF_5 = time.time() - start
print(f"wNAF 5 : {wNAF_5 / benchmark:.0%}", cached_multiples.cache_info())

Expand All @@ -214,7 +214,7 @@
start = time.time()
for q in qs:
T = (
_mult_endomorphism_secp256k1(q, ec.GJ, ec)
mult_endomorphism_secp256k1(q, ec.GJ, ec)
if gen_only
else _mult_endomorphism_secp256k1(q, T, ec)
)
Expand Down
24 changes: 12 additions & 12 deletions py-scripts/speedup_doubleandadd.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,45 +11,45 @@
import random
import time

from btclib.ecc.curve import secp256k1 as ec
from btclib.curvegroup import (
_mult_aff,
_mult_jac,
_mult_recursive_aff,
_mult_recursive_jac,
from btclib.ec.curve import secp256k1 as ec
from btclib.ec.curve_group import (
mult_aff,
mult_jac,
mult_recursive_aff,
mult_recursive_jac,
)

# setup
random.seed(42)
random.seed(350746)
qs = [random.getrandbits(ec.nlen) % ec.n for _ in range(100)]

start = time.time()
for q in qs:
# starts from affine coordinates, ends with affine coordinates
ec._aff_from_jac(_mult_jac(q, ec.GJ, ec))
ec.aff_from_jac(mult_jac(q, ec.GJ, ec))
benchmark = time.time() - start
print("Benchmark completed")

start = time.time()
for q in qs:
_mult_recursive_aff(q, ec.G, ec)
mult_recursive_aff(q, ec.G, ec)
recursive_aff = time.time() - start
print(f"Recursive aff : {recursive_aff / benchmark:.0%}")

start = time.time()
for q in qs:
ec._aff_from_jac(_mult_recursive_jac(q, ec.GJ, ec))
ec.aff_from_jac(mult_recursive_jac(q, ec.GJ, ec))
recursive_jac = time.time() - start
print(f"Recursive jac : {recursive_jac / benchmark:.0%}")

start = time.time()
for q in qs:
_mult_aff(q, ec.G, ec)
mult_aff(q, ec.G, ec)
double_add_aff = time.time() - start
print(f"Double and add aff : {double_add_aff / benchmark:.0%}")

start = time.time()
for q in qs:
ec._aff_from_jac(_mult_jac(q, ec.GJ, ec))
ec.aff_from_jac(mult_jac(q, ec.GJ, ec))
double_add_jac = time.time() - start
print(f"Double and add jac : {double_add_jac / benchmark:.0%}")
24 changes: 12 additions & 12 deletions py-scripts/speedup_fixwind.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
import random
import time

from btclib.ecc.curve import secp256k1 as ec
from btclib.curvegroup import (
_mult_base_3,
_mult_fixed_window,
_mult_jac,
_mult_mont_ladder,
from btclib.ec.curve import secp256k1 as ec
from btclib.ec.curve_group import (
mult_base_3,
mult_fixed_window,
mult_jac,
mult_mont_ladder,
)

# setup
Expand All @@ -27,43 +27,43 @@
T = ec.GJ
start = time.time()
for q in qs:
T = _mult_jac(q, T, ec)
T = mult_jac(q, T, ec)
benchmark = time.time() - start
print("Benchmark completed")

T = ec.GJ
start = time.time()
for q in qs:
T = _mult_jac(q, T, ec)
T = mult_jac(q, T, ec)
double_and_add = time.time() - start
print(f"Double & add : {double_and_add / benchmark:.0%}")

T = ec.GJ
start = time.time()
for q in qs:
T = _mult_mont_ladder(q, T, ec)
T = mult_mont_ladder(q, T, ec)
montgomery = time.time() - start
print(f"Montgomery ladder: {montgomery / benchmark:.0%}")

T = ec.GJ
start = time.time()
for q in qs:
T = _mult_base_3(q, T, ec)
T = mult_base_3(q, T, ec)
base3 = time.time() - start
print(f"Base 3 : {base3 / benchmark:.0%}")

T = ec.GJ
w = 4
start = time.time()
for q in qs:
T = _mult_fixed_window(q, T, ec, w)
T = mult_fixed_window(q, T, ec, w)
fixed_window_4 = time.time() - start
print(f"Fixed window 4 : {fixed_window_4 / benchmark:.0%}")

T = ec.GJ
w = 5
start = time.time()
for q in qs:
T = _mult_fixed_window(q, T, ec, w)
T = mult_fixed_window(q, T, ec, w)
fixed_window_5 = time.time() - start
print(f"Fixed window 5 : {fixed_window_5 / benchmark:.0%}")
8 changes: 4 additions & 4 deletions py-scripts/speedup_jacobian.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,22 @@
import random
import time

from btclib.ecc.curve import secp256k1 as ec
from btclib.curvegroup import _mult_aff, _mult_jac
from btclib.ec.curve import secp256k1 as ec
from btclib.ec.curve_group import mult_aff, mult_jac

random.seed(42)

# setup
qs = [random.getrandbits(ec.nlen) % ec.n for _ in range(50)]
start = time.time()
for q in qs:
_mult_aff(q, ec.G, ec)
mult_aff(q, ec.G, ec)
elapsed1 = time.time() - start

start = time.time()
for q in qs:
# starts from affine coordinates, ends with affine coordinates
ec._aff_from_jac(_mult_jac(q, ec.GJ, ec))
ec.aff_from_jac(mult_jac(q, ec.GJ, ec))
elapsed2 = time.time() - start

print(elapsed2 / elapsed1)
7 changes: 4 additions & 3 deletions py-scripts/speedup_shamir.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@
import random
import time

from btclib.ecc.curve import secp256k1 as ec
from btclib.curvegroup import _double_mult, _mult
from btclib.ec.curve import secp256k1 as ec
from btclib.ec.curve_group import _mult, _double_mult
from btclib.ec.curve import mult, double_mult

random.seed(42)

Expand All @@ -35,7 +36,7 @@

start = time.time()
for u, v, QJ in zip(us, vs, QJs):
ec._add_jac(_mult(u, ec.GJ, ec), _mult(v, QJ, ec))
ec.add_jac(_mult(u, ec.GJ, ec), _mult(v, QJ, ec))
elapsed1 = time.time() - start

start = time.time()
Expand Down