def FromSeed(seed_bytes, key_net_ver=Bip32Conf.KEY_NET_VER.Main()): """ Create a Bip32 object from the specified seed (e.g. BIP39 seed). Args: seed_bytes (bytes) : Seed bytes key_net_ver (KeyNetVersions object, optional): Key net version object (Bip32 main net version by default) Returns: Bip32 object: Bip32 object Raises: ValueError: If the seed is too short Bip32KeyError: If the seed is not suitable for master key generation """ # Check seed length if len(seed_bytes) * 8 < Bip32Const.SEED_MIN_BIT_LEN: raise ValueError( "Seed length is too small, it shall be at least %d bit" % Bip32Const.SEED_MIN_BIT_LEN) # Compute HMAC hmac = CryptoUtils.HmacSha512(Bip32Const.MASTER_KEY_HMAC_KEY, seed_bytes) # Create BIP32 by splitting the HMAC into two 32-byte sequences return Bip32(secret=hmac[:32], chain=hmac[32:], key_net_ver=key_net_ver)
def __HmacHalves(self, data_bytes): """ Calculate the HMAC-SHA512 of input data using the chain code as key and returns a tuple of the left and right halves of the HMAC. Args: data_bytes (bytes): Data bytes Returns: tuple: Left and right halves of the HMAC """ # Use chain as HMAC key hmac = CryptoUtils.HmacSha512(self.m_chain, data_bytes) return (hmac[:32], hmac[32:])