Created
July 25, 2018 03:46
-
-
Save ryancdotorg/79a6ab14dd4c84849bc50ee950e43b40 to your computer and use it in GitHub Desktop.
incomplete attempt to implement bitfi's key derivation algorithm
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
#!/usr/bin/env python | |
import sys | |
import hmac | |
import hashlib | |
import binascii | |
import scrypt | |
import pycoin | |
from pybitcointools import * | |
def mkd(password, salt): | |
return scrypt.hash(password, salt, N=32768, p=4, r=8, buflen=64) | |
def ci(s): | |
acc = "" | |
for c in s.upper(): | |
acc += str(ord(c)-64) | |
# XXX overflow behaviour is... questionable | |
return int(acc) | |
def idx(s): | |
return ci(s) | 0x8000000 | |
def b2long(b): | |
return long(binascii.hexlify(b), 16) | |
def masterkey(password, salt, coin): | |
k_par = mkd(password, salt) | |
c_par = hashlib.sha256(salt).digest() | |
# XXX k_par and c_par may need to be swapped | |
param = hmac.new(c_par, k_par, hashlib.sha512).digest() | |
msk = param[0:32] | |
mcc = param[32:64] | |
xprv = bip32_serialize((PRIVATE, 0, b'\x00'*4, 0, mcc, msk+b'\x01')) | |
print xprv | |
print bip32_serialize((PRIVATE, 0, b'\x00'*4, idx(coin), mcc, msk+b'\x01')) | |
return bip32_ckd(xprv, idx(coin)) | |
p = sys.argv[1] | |
s = sys.argv[2] | |
c = sys.argv[3] | |
print masterkey(p, s, c) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment