code: async def get_creds(self, proof_req_json: str, filt: dict = None, filt_dflt_incl: bool = False) -> (Set[str], str):
          LOGGER.debug('HolderProver.get_creds >>> proof_req_json: %s, filt: %s', proof_req_json, filt)
          if filt is None:
              filt = {}
          rv = None
          creds_json = await anoncreds.prover_get_credentials_for_proof_req(self.wallet.handle, proof_req_json)
          creds = json.loads(creds_json)
          cred_ids = set()
          if filt:
              for cd_id in filt:
                  try:
                      json.loads(await self.get_cred_def(cd_id))
                  except AbsentCredDef:
                      LOGGER.warning('HolderProver.get_creds: ignoring filter criterion, no cred def on %s', cd_id)
                      filt.pop(cd_id)
          for inner_creds in {**creds['attrs'], **creds['predicates']}.values():
              for cred in inner_creds:
                  cred_info = cred['cred_info']
                  if filt:
                      cred_cd_id = cred_info['cred_def_id']
                      if cred_cd_id not in filt:
                          if filt_dflt_incl:
                              cred_ids.add(cred_info['referent'])
                          continue
                      if 'attr-match' in (filt[cred_cd_id] or {}):
                          if not {k: str(filt[cred_cd_id].get('attr-match', {})[k])
                                  for k in filt[cred_cd_id].get('attr-match', {})}.items() <= cred_info['attrs'].items():
                              continue
                      if 'minima' in (filt[cred_cd_id] or {}):
                          minima = filt[cred_cd_id].get('minima', {})
                          try:
                              if any((attr not in cred_info['attrs'])
                                  or (int(cred_info['attrs'][attr]) < int(minima[attr]))
                                      for attr in minima):
                                  continue
                          except ValueError:
                              continue
                      cred_ids.add(cred_info['referent'])
                  else:
                      cred_ids.add(cred_info['referent'])
          if filt:
              creds = json.loads(prune_creds_json(creds, cred_ids))
          rv = (cred_ids, json.dumps(creds))
          LOGGER.debug('HolderProver.get_creds <<< %s', rv)
          return rv