Skip to content

Instantly share code, notes, and snippets.

@ZenulAbidin
Last active July 11, 2023 13:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save ZenulAbidin/e8687d9e16189c99d192e97d37e71dbe to your computer and use it in GitHub Desktop.
Save ZenulAbidin/e8687d9e16189c99d192e97d37e71dbe to your computer and use it in GitHub Desktop.
Brainless' <any>-range keysplitter as reverse-engineered by NotATether (v3)
# apt-get install libgmp-dev (ubuntu/debian)
# pip install fastecdsa bit
from fastecdsa import curve
from fastecdsa.point import Point
import bit
import os
G = curve.secp256k1.G
N = curve.secp256k1.q
def pub2point(pub_hex):
x = int(pub_hex[2:66], 16)
if len(pub_hex) < 70:
y = bit.format.x_to_y(x, int(pub_hex[:2], 16) % 2)
else:
y = int(pub_hex[66:], 16)
return Point(x, y, curve=curve.secp256k1)
def point2pub(R):
if (R.y % 2 == 0):
prefix = "02"
else:
prefix = "03"
hx = hex(R.x)[2:].zfill(64)
return prefix + hx
def egcd(a, b):
if a == 0:
return (b, 0, 1)
else:
g, y, x = egcd(b % a, a)
return (g, x - (b // a) * y, y)
def modinv(a, m):
g, x, y = egcd(a, m)
if g != 1:
raise Exception('modular inverse does not exist')
else:
return x % m
p = int("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", 16)
n = int("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", 16)
max_ = int("0xFFFFFFFF", 16) # Replace this with end range of your privkey
def partition(P, sections, f):
_sections = modinv(sections, n)
psections = G*_sections
i = 1
delta = max_ // sections
while i <= sections:
Pkey = P*i
_start = (_sections*(i)) % n
_end = _start + delta
if _start < _end:
f.write(" i : {}".format(i) + os.linesep)
f.write(" pub : {}".format(point2pub(Pkey)) + os.linesep)
f.write(" start: {}".format(hex(_start)[2:].zfill(64)) + os.linesep)
f.write(" end : {}".format(hex(_end)[2:].zfill(64)) + os.linesep)
else:
f.write(" i : {}".format(i) + os.linesep)
f.write(" pub : {}".format(point2pub(Pkey)) + os.linesep)
f.write(" start: {}".format(hex(_start)[2:].zfill(64)) + os.linesep)
f.write(" end : {}".format(hex(n-1)[2:].zfill(64)) + os.linesep)
f.write(" start: {}".format(hex(1)[2:].zfill(64)) + os.linesep)
f.write(" end : {}".format(hex(_end)[2:].zfill(64)) + os.linesep)
i+=1
def main():
npartitions = 32 # or 720, or anything > 0
with open("input.txt", "r") as f, open("output.txt", "w") as outf:
line = f.readline().strip()
while line != '':
P = pub2point(line);
outf.write("SECTIONS OF PUBKEY: " + line + os.linesep)
partition(P, npartitions, outf)
line = f.readline().strip()
if __name__ == "__main__":
main()
@ZenulAbidin
Copy link
Author

ZenulAbidin commented Sep 1, 2021

Example input:
03bb2228d3ea32cb3c1eb160cc824a4ba8115f9a7f415d18ddcaac8193defc2c47

@ZenulAbidin
Copy link
Author

ZenulAbidin commented Sep 1, 2021

Example output:
SECTIONS OF PUBKEY: 03bb2228d3ea32cb3c1eb160cc824a4ba8115f9a7f415d18ddcaac8193defc2c47
i : 1
pub : 03bb2228d3ea32cb3c1eb160cc824a4ba8115f9a7f415d18ddcaac8193defc2c47
start: f7fffffffffffffffffffffffffffffec4d965ff79ce5b39e1d3cb9869b48f37
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : effffffffffffffffffffffffffffffecf03ef184454163803d538a40332dd2d
i : 2
pub : 03f978b7a80b10554c847ef8b259857af1cd5060fe394894f17a5cd815f896d363
start: effffffffffffffffffffffffffffffecf03ef184454163803d538a40332dd2d
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : e7fffffffffffffffffffffffffffffed92e78310ed9d13625d6a5af9cb12b23
i : 3
pub : 039f98fa5b52010058eb547341bc241d27489ff1f1d9350854c691c66744241d7a
start: e7fffffffffffffffffffffffffffffed92e78310ed9d13625d6a5af9cb12b23
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : dffffffffffffffffffffffffffffffee3590149d95f8c3447d812bb362f7919
i : 4
pub : 0216f9a89d6da61f39bdbd7aa1d99d6c4fe7d35c91ae777df739678098dcdf2247
start: dffffffffffffffffffffffffffffffee3590149d95f8c3447d812bb362f7919
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : d7fffffffffffffffffffffffffffffeed838a62a3e5473269d97fc6cfadc70f
i : 5
pub : 0354a6c6a85e4bbc1330659b4a216b1a58571ae41a94c14faa83fa61deec492a7a
start: d7fffffffffffffffffffffffffffffeed838a62a3e5473269d97fc6cfadc70f
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : cffffffffffffffffffffffffffffffef7ae137b6e6b02308bdaecd2692c1505
i : 6
pub : 02fba63347d6fb476b6999c3f706d020e1b8fedf3af082b6738efefae2b9921b7b
start: cffffffffffffffffffffffffffffffef7ae137b6e6b02308bdaecd2692c1505
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : c7ffffffffffffffffffffffffffffff01d89c9438f0bd2eaddc59de02aa62fb
i : 7
pub : 02ae44b652b04ba34fbbf4eabea170a09f2dd2683ffe08fea4577fb2081ef2562b
start: c7ffffffffffffffffffffffffffffff01d89c9438f0bd2eaddc59de02aa62fb
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : bfffffffffffffffffffffffffffffff0c0325ad0376782ccfddc6e99c28b0f1
i : 8
pub : 02a6b594b38fb3e77c6edf78161fade2041f4e09fd8497db776e546c41567feb3c
start: bfffffffffffffffffffffffffffffff0c0325ad0376782ccfddc6e99c28b0f1
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : b7ffffffffffffffffffffffffffffff162daec5cdfc332af1df33f535a6fee7
i : 9
pub : 028b38d0d9e6ccefb8a4e19905407a3ec21f19cdc946452085ceedbc82c394830e
start: b7ffffffffffffffffffffffffffffff162daec5cdfc332af1df33f535a6fee7
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : afffffffffffffffffffffffffffffff205837de9881ee2913e0a100cf254cdd
i : 10
pub : 028e5dd0d2021801270d94be920564400f4f22562f7fca413385d57099887f80fd
start: afffffffffffffffffffffffffffffff205837de9881ee2913e0a100cf254cdd
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : a7ffffffffffffffffffffffffffffff2a82c0f76307a92735e20e0c68a39ad3
i : 11
pub : 03c91f72e19cf9ffccfd7ece90f89486e523da3bdf61d0599f74b9f09083c1253d
start: a7ffffffffffffffffffffffffffffff2a82c0f76307a92735e20e0c68a39ad3
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 9fffffffffffffffffffffffffffffff34ad4a102d8d642557e37b180221e8c9
i : 12
pub : 0368b8cfe7f38486869f6bb730d38c66527ced6896c5d1e7bc68ad3c13acbd349b
start: 9fffffffffffffffffffffffffffffff34ad4a102d8d642557e37b180221e8c9
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 97ffffffffffffffffffffffffffffff3ed7d328f8131f2379e4e8239ba036bf
i : 13
pub : 02e25c8567f2298daefed61e544dd391a23a9a0b8f8f72386681ac6b2c430f58bf
start: 97ffffffffffffffffffffffffffffff3ed7d328f8131f2379e4e8239ba036bf
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 8fffffffffffffffffffffffffffffff49025c41c298da219be6552f351e84b5
i : 14
pub : 036d37a55f7a4be6da4747e263982fb992b4b5679d48baa1516dd989f4e0d5bc4a
start: 8fffffffffffffffffffffffffffffff49025c41c298da219be6552f351e84b5
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 87ffffffffffffffffffffffffffffff532ce55a8d1e951fbde7c23ace9cd2ab
i : 15
pub : 0278afc2d86f2171db41a1b1ec171b373f4bd0e4ff316b93d4216699635ea193e6
start: 87ffffffffffffffffffffffffffffff532ce55a8d1e951fbde7c23ace9cd2ab
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1
i : 16
pub : 0200000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63
start: 7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 77ffffffffffffffffffffffffffffff6781f78c222a0b1c01ea9c5201996e97
i : 17
pub : 028a2adab50d1aff48350b2432c67f3b353862e8b4b27db2ad6dea5b30e4c971e2
start: 77ffffffffffffffffffffffffffffff6781f78c222a0b1c01ea9c5201996e97
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 6fffffffffffffffffffffffffffffff71ac80a4ecafc61a23ec095d9b17bc8d
i : 18
pub : 0327ba95b74c76d4ba01dcfe47cedb3d6fee0cd94080f0cc1d30d83acf1fbe1617
start: 6fffffffffffffffffffffffffffffff71ac80a4ecafc61a23ec095d9b17bc8d
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 67ffffffffffffffffffffffffffffff7bd709bdb735811845ed766934960a83
i : 19
pub : 0384066ccede3822f281787b468917566e3bcd1403d18853a3ccec4e0694399d46
start: 67ffffffffffffffffffffffffffffff7bd709bdb735811845ed766934960a83
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 5fffffffffffffffffffffffffffffff860192d681bb3c1667eee374ce145879
i : 20
pub : 03d06a2686686048a42f1df9f46d376deec6f22d3decf7659137fb02f779cab2b8
start: 5fffffffffffffffffffffffffffffff860192d681bb3c1667eee374ce145879
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 57ffffffffffffffffffffffffffffff902c1bef4c40f71489f050806792a66f
i : 21
pub : 0201b68c34a4776db0a697eac772ed5baa3d43b4c9649274623be117aa0cf56202
start: 57ffffffffffffffffffffffffffffff902c1bef4c40f71489f050806792a66f
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 4fffffffffffffffffffffffffffffff9a56a50816c6b212abf1bd8c0110f465
i : 22
pub : 02344548eb425f0fa566060aef0276046265269f4f8eddeea41d705d5fd8f9e14f
start: 4fffffffffffffffffffffffffffffff9a56a50816c6b212abf1bd8c0110f465
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 47ffffffffffffffffffffffffffffffa4812e20e14c6d10cdf32a979a8f425b
i : 23
pub : 02a4ff012f9d057af74b51dad993173df71fb0274910fb0b6d41b654877fc77cda
start: 47ffffffffffffffffffffffffffffffa4812e20e14c6d10cdf32a979a8f425b
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 3fffffffffffffffffffffffffffffffaeabb739abd2280eeff497a3340d9051
i : 24
pub : 03e24ce4beee294aa6350faa67512b99d388693ae4e7f53d19882a6ea169fc1ce1
start: 3fffffffffffffffffffffffffffffffaeabb739abd2280eeff497a3340d9051
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 37ffffffffffffffffffffffffffffffb8d640527657e30d11f604aecd8bde47
i : 25
pub : 02eef3b2a1312770d7242eba387fcc7c23439dc23b8df3bcb16f195424cc1e2a35
start: 37ffffffffffffffffffffffffffffffb8d640527657e30d11f604aecd8bde47
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 2fffffffffffffffffffffffffffffffc300c96b40dd9e0b33f771ba670a2c3d
i : 26
pub : 024348a558c6b6482cced5efd7fbb2e2ffb2156bc1a27faff17d6ad60eb99b8957
start: 2fffffffffffffffffffffffffffffffc300c96b40dd9e0b33f771ba670a2c3d
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 27ffffffffffffffffffffffffffffffcd2b52840b63590955f8dec600887a33
i : 27
pub : 0213d21583b69d28cee13ed09d895e1cd867563e618e1a92063fb4426463fd5548
start: 27ffffffffffffffffffffffffffffffcd2b52840b63590955f8dec600887a33
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 1fffffffffffffffffffffffffffffffd755db9cd5e9140777fa4bd19a06c829
i : 28
pub : 02913b812c20c94eb1a43ba66296780a96e34af270eeec4a7a8da0a673558ea169
start: 1fffffffffffffffffffffffffffffffd755db9cd5e9140777fa4bd19a06c829
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 17ffffffffffffffffffffffffffffffe18064b5a06ecf0599fbb8dd3385161f
i : 29
pub : 0338e7ed7008011115933419d55d19bfa4adf435f38f832025c56e138e4aedf210
start: 17ffffffffffffffffffffffffffffffe18064b5a06ecf0599fbb8dd3385161f
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415
i : 30
pub : 03c1b28d3a5e420ded1d6138b0ce5ba340f38eb7d4af891823565d4069c80f8cc9
start: 0fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036415
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 07fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20b
i : 31
pub : 02d3293e485c44f18284a72c0da8538ac09e8574c7736a75a9c69a75710961cb8d
start: 07fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20b
end : fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364140
start: 0000000000000000000000000000000000000000000000000000000000000001
end : 0000000000000000000000000000000000000000000000000000000000000001
i : 32
pub : 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798
start: 0000000000000000000000000000000000000000000000000000000000000001
end : f7fffffffffffffffffffffffffffffec4d965ff79ce5b39e1d3cb9869b48f38

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment