Exemple #1
0
def _CKD_priv(k, c, s, is_prime):
    keypair = ecc.ECPrivkey(k)
    cK = keypair.get_public_key_bytes(compressed=True)
    data = bytes([0]) + k + s if is_prime else cK + s
    I = hmac.new(c, data, hashlib.sha512).digest()
    k_n = ecc.number_to_string(
        (ecc.string_to_number(I[0:32]) + ecc.string_to_number(k)) %
        ecc.CURVE_ORDER, ecc.CURVE_ORDER)
    c_n = I[32:]
    return k_n, c_n
Exemple #2
0
def _CKD_priv(k, c, s, is_prime):
    try:
        keypair = ecc.ECPrivkey(k)
    except ecc.InvalidECPointException as e:
        raise BitcoinException(
            'Impossible xprv (not within curve order)') from e
    cK = keypair.get_public_key_bytes(compressed=True)
    data = bytes([0]) + k + s if is_prime else cK + s
    I = hmac_oneshot(c, data, hashlib.sha512)
    I_left = ecc.string_to_number(I[0:32])
    k_n = (I_left + ecc.string_to_number(k)) % ecc.CURVE_ORDER
    if I_left >= ecc.CURVE_ORDER or k_n == 0:
        raise ecc.InvalidECPointException()
    k_n = ecc.number_to_string(k_n, ecc.CURVE_ORDER)
    c_n = I[32:]
    return k_n, c_n
Exemple #3
0
 def get_sequence(self, mpk, for_change, n):
     return string_to_number(
         Hash(("%d:%d:" % (n, for_change)).encode('ascii') + bfh(mpk)))
Exemple #4
0
 def stretch_key(self, seed):
     x = seed
     for i in range(100000):
         x = hashlib.sha256(x + seed).digest()
     return string_to_number(x)