code: def calculate_x509_fingerprint(x509_cert, alg='sha1'):
          
          assert isinstance(x509_cert, compat.str_type)
  
          lines = x509_cert.split('\n')
          data = ''
          inData = False
  
          for line in lines:
              # Remove '\r' from end of line if present.
              line = line.rstrip()
              if not inData:
                  if line == '-----BEGIN CERTIFICATE-----':
                      inData = True
                  elif line == '-----BEGIN PUBLIC KEY-----' or line == '-----BEGIN RSA PRIVATE KEY-----':
                      # This isn't an X509 certificate.
                      return None
              else:
                  if line == '-----END CERTIFICATE-----':
                      break
  
                  # Append the current line to the certificate data.
                  data += line
  
          if not data:
              return None
  
          decoded_data = base64.b64decode(compat.to_bytes(data))
  
          if alg == 'sha512':
              fingerprint = sha512(decoded_data)
          elif alg == 'sha384':
              fingerprint = sha384(decoded_data)
          elif alg == 'sha256':
              fingerprint = sha256(decoded_data)
          else:
              fingerprint = sha1(decoded_data)
  
          return fingerprint.hexdigest().lower()
docs: Calculates the fingerprint of a formatted x509cert.
  
          :param x509_cert: x509 cert formatted
          :type: string
  
          :param alg: The algorithm to build the fingerprint
          :type: string
  
          :returns: fingerprint
          :rtype: string