code: def validate_metadata_sign(xml, cert=None, fingerprint=None, fingerprintalg='sha1', validatecert=False, debug=False):
          
          if xml is None or xml == '':
              raise Exception('Empty string supplied as input')
  
          elem = OneLogin_Saml2_XML.to_etree(xml)
          xmlsec.enable_debug_trace(debug)
          xmlsec.tree.add_ids(elem, ["ID"])
  
          signature_nodes = OneLogin_Saml2_XML.query(elem, '/md:EntitiesDescriptor/ds:Signature')
  
          if len(signature_nodes) == 0:
              signature_nodes += OneLogin_Saml2_XML.query(elem, '/md:EntityDescriptor/ds:Signature')
  
              if len(signature_nodes) == 0:
                  signature_nodes += OneLogin_Saml2_XML.query(elem, '/md:EntityDescriptor/md:SPSSODescriptor/ds:Signature')
                  signature_nodes += OneLogin_Saml2_XML.query(elem, '/md:EntityDescriptor/md:IDPSSODescriptor/ds:Signature')
  
          if len(signature_nodes) > 0:
              for signature_node in signature_nodes:
                  # Raises expection if invalid
                  OneLogin_Saml2_Utils.validate_node_sign(signature_node, elem, cert, fingerprint, fingerprintalg, validatecert, debug, raise_exceptions=True)
              return True
          else:
              raise Exception('Could not validate metadata signature: No signature nodes found.')
docs: Validates a signature of a EntityDescriptor.
  
          :param xml: The element we should validate
          :type: string | Document
  
          :param cert: The public cert
          :type: string
  
          :param fingerprint: The fingerprint of the public cert
          :type: string
  
          :param fingerprintalg: The algorithm used to build the fingerprint
          :type: string
  
          :param validatecert: If true, will verify the signature and if the cert is valid.
          :type: bool
  
          :param debug: Activate the xmlsec debug
          :type: bool
  
          :param raise_exceptions: Whether to return false on failure or raise an exception
          :type raise_exceptions: Boolean