code: async def crypto_sign(wallet_handle: int,
                        signer_vk: str,
                        msg: bytes) -> bytes:
      
  
      logger = logging.getLogger(__name__)
      logger.debug("crypto_sign: >>> wallet_handle: %r, signer_vk: %r, msg: %r",
                   wallet_handle,
                   signer_vk,
                   msg)
  
      def transform_cb(arr_ptr: POINTER(c_uint8), arr_len: c_uint32):
          return bytes(arr_ptr[:arr_len]),
  
      if not hasattr(crypto_sign, "cb"):
          logger.debug("crypto_sign: Creating callback")
          crypto_sign.cb = create_cb(CFUNCTYPE(None, c_int32, c_int32, POINTER(c_uint8), c_uint32), transform_cb)
  
      c_wallet_handle = c_int32(wallet_handle)
      c_signer_vk = c_char_p(signer_vk.encode('utf-8'))
      c_msg_len = c_uint32(len(msg))
  
      signature = await do_call('indy_crypto_sign',
                                c_wallet_handle,
                                c_signer_vk,
                                msg,
                                c_msg_len,
                                crypto_sign.cb)
  
      logger.debug("crypto_sign: <<< res: %r", signature)
      return signature
docs: Signs a message with a key.
  
      Note to use DID keys with this function you can call indy_key_for_did to get key id (verkey) for specific DID.
  
      :param wallet_handle: wallet handler (created by open_wallet).
      :param signer_vk:  id (verkey) of my key. The key must be created by calling create_key or create_and_store_my_did
      :param msg: a message to be signed
      :return: a signature string