docs: def ParseSignedData(signed_data, result):
      """Parses signed certificate data and updates result rdfvalue."""
      try:
        auth_data
      except NameError:
        # Verify_sigs is not available so we can't parse signatures. If you want
        # this functionality, please install the verify-sigs package:
        # https://github.com/anthrotype/verify-sigs
        # TODO(amoser): Make verify-sigs a pip package and add a dependency.
        return
  
      try:
        try:
          auth = auth_data.AuthData(signed_data.certificate)
        except Exception as e:  # pylint: disable=broad-except
          # If we failed to parse the certificate, we want the user to know it.
          result.cert_hasher_name = "Error parsing certificate: %s" % str(e)
          raise
  
        result.cert_hasher_name = auth.digest_algorithm().name
        result.cert_program_name = str(auth.program_name)
        result.cert_program_url = str(auth.program_url)
        result.cert_signing_id = str(auth.signing_cert_id)
  
        try:
          # This fills in auth.cert_chain_head. We ignore Asn1Error because
          # we want to extract as much data as possible, no matter if the
          # certificate has expired or not.
          auth.ValidateCertChains(time.gmtime())
        except auth_data.Asn1Error:
          pass
        result.cert_chain_head_issuer = str(auth.cert_chain_head[2])
  
        if auth.has_countersignature:
          result.cert_countersignature_chain_head_issuer = str(
              auth.counter_chain_head[2])
  
        certs = []
        for (issuer, serial), cert in iteritems(auth.certificates):
          subject = cert[0][0]["subject"]
          subject_dn = str(dn.DistinguishedName.TraverseRdn(subject[0]))
          not_before = cert[0][0]["validity"]["notBefore"]
          not_after = cert[0][0]["validity"]["notAfter"]
          not_before_time = not_before.ToPythonEpochTime()
          not_after_time = not_after.ToPythonEpochTime()
          not_before_time_str = time.asctime(time.gmtime(not_before_time))
          not_after_time_str = time.asctime(time.gmtime(not_after_time))
  
          certs.append(
              dict(
                  issuer=issuer,
                  serial=serial,
                  subject=subject_dn,
                  not_before_time=not_before_time_str,
                  not_after_time=not_after_time_str))
        result.cert_certificates = str(certs)
  
      # Verify_sigs library can basically throw all kinds of exceptions so
      # we have to use broad except here.
      except Exception as e:  # pylint: disable=broad-except
        logging.error(e)