-
-
Save ZenulAbidin/e8687d9e16189c99d192e97d37e71dbe to your computer and use it in GitHub Desktop.
Brainless' <any>-range keysplitter as reverse-engineered by NotATether (v3)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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