Get the address for a given private key info bundle
    (be it multisig or singlesig)

    Return the address on success
    Raise exception on error

def btc_get_privkey_address(privkey_info, **blockchain_opts):
    """
    Get the address for a given private key info bundle
    (be it multisig or singlesig)

    Return the address on success
    Raise exception on error
    """
    
    from .multisig import make_multisig_segwit_address_from_witness_script

    if btc_is_singlesig(privkey_info):
        return btc_address_reencode( ecdsalib.ecdsa_private_key(privkey_info).public_key().address() )
    
    if btc_is_multisig(privkey_info) or btc_is_singlesig_segwit(privkey_info):
        redeem_script = str(privkey_info['redeem_script'])
        return btc_make_p2sh_address(redeem_script)
    
    if btc_is_multisig_segwit(privkey_info):
        return make_multisig_segwit_address_from_witness_script(str(privkey_info['redeem_script']))

    raise ValueError("Invalid private key info")