async def unpack_message(wallet_handle: int,
                         jwe: bytes) -> bytes:
    """
    Unpacks a JWE-like formatted message outputted by pack_message (Experimental)

    #Params
    command_handle: command handle to map callback to user context.
    wallet_handle: wallet handler (created by open_wallet)
    message: the output of a pack message

    #Returns -> See HIPE 0028 for details
    (Authcrypt mode)

    {
        "message": <decrypted message>,
        "recipient_verkey": <recipient verkey used to decrypt>,
        "sender_verkey": <sender verkey used to encrypt>
    }

    (Anoncrypt mode)

    {
        "message": <decrypted message>,
        "recipient_verkey": <recipient verkey used to decrypt>,
    }
    """

    logger = logging.getLogger(__name__)
    logger.debug("unpack_message: >>> wallet_handle: %r, jwe: %r",
                 wallet_handle,
                 jwe)

    def transform_cb(arr_ptr: POINTER(c_uint8), arr_len: c_uint32):
        return bytes(arr_ptr[:arr_len]),

    if not hasattr(unpack_message, "cb"):
        logger.debug("unpack_message: Creating callback")
        unpack_message.cb = create_cb(CFUNCTYPE(None, c_int32, c_int32, POINTER(c_uint8), c_uint32), transform_cb)

    c_wallet_handle = c_int32(wallet_handle)
    c_jwe_len = c_uint32(len(jwe))
    res = await do_call('indy_unpack_message',
                        c_wallet_handle,
                        jwe,
                        c_jwe_len,
                        unpack_message.cb)

    logger.debug("unpack_message: <<< res: %r", res)
    return res