def gpg_profile_get_key( blockchain_id, keyname, key_id=None, proxy=None, wallet_keys=None, config_dir=None, gpghome=None ):
    """
    Get the profile key
    Return {'status': True, 'key_data': ..., 'key_id': ...} on success
    Return {'error': ...} on error
    """
    
    assert is_valid_keyname( keyname )
    if config_dir is None:
        config_dir = get_config_dir()

    if gpghome is None:
        gpghome = get_default_gpg_home()

    accounts = blockstack_client.list_accounts( blockchain_id, proxy=proxy )
    if 'error' in accounts:
        return accounts

    accounts = accounts.pop('accounts')

    if len(accounts) == 0:
        return {'error': 'No accounts in this profile'}

    all_gpg_accounts = filter( lambda a: a['service'] == 'pgp', accounts )
    if len(all_gpg_accounts) == 0:
        return {'error': 'No GPG accounts in this profile'}
    
    # find the one with this key name 
    gpg_accounts = filter( lambda ga: (ga.has_key('keyName') and ga['keyName'] == keyname) or (key_id is not None and ga['identifier'] == key_id), all_gpg_accounts )
    if len(gpg_accounts) == 0:
        return {'error': 'No such GPG key found'}

    if len(gpg_accounts) > 1:
        return {'error': 'Multiple keys with that name'}

    key_url = gpg_accounts[0].get('contentUrl', DEFAULT_KEY_SERVER)

    # go get the key 
    key_data = gpg_fetch_key( key_url, key_id=gpg_accounts[0]['identifier'], config_dir=config_dir )
    if key_data is None:
        return {'error': 'Failed to download and verify key'}

    ret = {
        'status': True,
        'key_id': gpg_accounts[0]['identifier'],
        'key_data': key_data
    }

    return ret
Get the profile key
    Return {'status': True, 'key_data': ..., 'key_id': ...} on success
    Return {'error': ...} on error