code: def verify_multisig(address, hash_hex, scriptSig):
      
      script_parts = virtualchain.btc_script_deserialize(scriptSig)
      if len(script_parts) < 2:
          log.warn("Verfiying multisig failed, couldn't grab script parts")
          return False
  
      redeem_script = script_parts[-1]
      script_sigs = script_parts[1:-1]
  
      if virtualchain.address_reencode(virtualchain.btc_make_p2sh_address(redeem_script)) != virtualchain.address_reencode(address):
          log.warn(("Address {} does not match redeem script {}".format(address, redeem_script)))
          return False
  
      m, pubk_hexes = virtualchain.parse_multisig_redeemscript(redeem_script)
      if len(script_sigs) != m:
          log.warn("Failed to validate multi-sig, not correct number of signatures: have {}, require {}".format(
              len(script_sigs), m))
          return False
  
      cur_pubk = 0
      for cur_sig in script_sigs:
          sig64 = base64.b64encode(binascii.unhexlify(cur_sig))
          sig_passed = False
          while not sig_passed:
              if cur_pubk >= len(pubk_hexes):
                  log.warn("Failed to validate multi-signature, ran out of public keys to check")
                  return False
              sig_passed = virtualchain.ecdsalib.verify_digest(hash_hex, pubk_hexes[cur_pubk], sig64)
              cur_pubk += 1
  
      return True
docs: verify that a p2sh address is signed by the given scriptsig