parameters: (s, private=False, public=False, passwordCallback=None,
                  implementations=["openssl", "python"])
return_statement: return _parseKeyHelper(key, private, public)
docstring: Parse a PEM-format key.
  
      The PEM format is used by OpenSSL and other tools.  The
      format is typically used to store both the public and private
      components of a key.  For example::
  
         -----BEGIN RSA PRIVATE KEY-----
          MIICXQIBAAKBgQDYscuoMzsGmW0pAYsmyHltxB2TdwHS0dImfjCMfaSDkfLdZY5+
          dOWORVns9etWnr194mSGA1F0Pls/VJW8+cX9+3vtJV8zSdANPYUoQf0TP7VlJxkH
          dSRkUbEoz5bAAs/+970uos7n7iXQIni+3erUTdYEk2iWnMBjTljfgbK/dQIDAQAB
          AoGAJHoJZk75aKr7DSQNYIHuruOMdv5ZeDuJvKERWxTrVJqE32/xBKh42/IgqRrc
          esBN9ZregRCd7YtxoL+EVUNWaJNVx2mNmezEznrc9zhcYUrgeaVdFO2yBF1889zO
          gCOVwrO8uDgeyj6IKa25H6c1N13ih/o7ZzEgWbGG+ylU1yECQQDv4ZSJ4EjSh/Fl
          aHdz3wbBa/HKGTjC8iRy476Cyg2Fm8MZUe9Yy3udOrb5ZnS2MTpIXt5AF3h2TfYV
          VoFXIorjAkEA50FcJmzT8sNMrPaV8vn+9W2Lu4U7C+K/O2g1iXMaZms5PC5zV5aV
          CKXZWUX1fq2RaOzlbQrpgiolhXpeh8FjxwJBAOFHzSQfSsTNfttp3KUpU0LbiVvv
          i+spVSnA0O4rq79KpVNmK44Mq67hsW1P11QzrzTAQ6GVaUBRv0YS061td1kCQHnP
          wtN2tboFR6lABkJDjxoGRvlSt4SOPr7zKGgrWjeiuTZLHXSAnCY+/hr5L9Q3ZwXG
          6x6iBdgLjVIe4BZQNtcCQQDXGv/gWinCNTN3MPWfTW/RGzuMYVmyBFais0/VrgdH
          h1dLpztmpQqfyH/zrBXQ9qL/zR4ojS6XYneO/U18WpEe
          -----END RSA PRIVATE KEY-----
  
      To generate a key like this with OpenSSL, run::
  
          openssl genrsa 2048 > key.pem
  
      This format also supports password-encrypted private keys.  TLS
      Lite can only handle password-encrypted private keys when OpenSSL
      and M2Crypto are installed.  In this case, passwordCallback will be
      invoked to query the user for the password.
  
      @type s: str
      @param s: A string containing a PEM-encoded public or private key.
  
      @type private: bool
      @param private: If True, a L{SyntaxError} will be raised if the
      private key component is not present.
  
      @type public: bool
      @param public: If True, the private key component (if present) will
      be discarded, so this function will always return a public key.
  
      @type passwordCallback: callable
      @param passwordCallback: This function will be called, with no
      arguments, if the PEM-encoded private key is password-encrypted.
      The callback should return the password string.  If the password is
      incorrect, SyntaxError will be raised.  If no callback is passed
      and the key is password-encrypted, a prompt will be displayed at
      the console.
  
      @rtype: L{tlslite.utils.RSAKey.RSAKey}
      @return: An RSA key.
  
      @raise SyntaxError: If the key is not properly formatted.
docstring_summary: Parse a PEM-format key.
docstring_tokens: Parse a PEM - format key .
function: def parsePEMKey(s, private=False, public=False, passwordCallback=None,
                  implementations=["openssl", "python"]):
      """Parse a PEM-format key.
  
      The PEM format is used by OpenSSL and other tools.  The
      format is typically used to store both the public and private
      components of a key.  For example::
  
         -----BEGIN RSA PRIVATE KEY-----
          MIICXQIBAAKBgQDYscuoMzsGmW0pAYsmyHltxB2TdwHS0dImfjCMfaSDkfLdZY5+
          dOWORVns9etWnr194mSGA1F0Pls/VJW8+cX9+3vtJV8zSdANPYUoQf0TP7VlJxkH
          dSRkUbEoz5bAAs/+970uos7n7iXQIni+3erUTdYEk2iWnMBjTljfgbK/dQIDAQAB
          AoGAJHoJZk75aKr7DSQNYIHuruOMdv5ZeDuJvKERWxTrVJqE32/xBKh42/IgqRrc
          esBN9ZregRCd7YtxoL+EVUNWaJNVx2mNmezEznrc9zhcYUrgeaVdFO2yBF1889zO
          gCOVwrO8uDgeyj6IKa25H6c1N13ih/o7ZzEgWbGG+ylU1yECQQDv4ZSJ4EjSh/Fl
          aHdz3wbBa/HKGTjC8iRy476Cyg2Fm8MZUe9Yy3udOrb5ZnS2MTpIXt5AF3h2TfYV
          VoFXIorjAkEA50FcJmzT8sNMrPaV8vn+9W2Lu4U7C+K/O2g1iXMaZms5PC5zV5aV
          CKXZWUX1fq2RaOzlbQrpgiolhXpeh8FjxwJBAOFHzSQfSsTNfttp3KUpU0LbiVvv
          i+spVSnA0O4rq79KpVNmK44Mq67hsW1P11QzrzTAQ6GVaUBRv0YS061td1kCQHnP
          wtN2tboFR6lABkJDjxoGRvlSt4SOPr7zKGgrWjeiuTZLHXSAnCY+/hr5L9Q3ZwXG
          6x6iBdgLjVIe4BZQNtcCQQDXGv/gWinCNTN3MPWfTW/RGzuMYVmyBFais0/VrgdH
          h1dLpztmpQqfyH/zrBXQ9qL/zR4ojS6XYneO/U18WpEe
          -----END RSA PRIVATE KEY-----
  
      To generate a key like this with OpenSSL, run::
  
          openssl genrsa 2048 > key.pem
  
      This format also supports password-encrypted private keys.  TLS
      Lite can only handle password-encrypted private keys when OpenSSL
      and M2Crypto are installed.  In this case, passwordCallback will be
      invoked to query the user for the password.
  
      @type s: str
      @param s: A string containing a PEM-encoded public or private key.
  
      @type private: bool
      @param private: If True, a L{SyntaxError} will be raised if the
      private key component is not present.
  
      @type public: bool
      @param public: If True, the private key component (if present) will
      be discarded, so this function will always return a public key.
  
      @type passwordCallback: callable
      @param passwordCallback: This function will be called, with no
      arguments, if the PEM-encoded private key is password-encrypted.
      The callback should return the password string.  If the password is
      incorrect, SyntaxError will be raised.  If no callback is passed
      and the key is password-encrypted, a prompt will be displayed at
      the console.
  
      @rtype: L{tlslite.utils.RSAKey.RSAKey}
      @return: An RSA key.
  
      @raise SyntaxError: If the key is not properly formatted.
      """
      for implementation in implementations:
          if implementation == "openssl" and cryptomath.m2cryptoLoaded:
              key = OpenSSL_RSAKey.parse(s, passwordCallback)
              break
          elif implementation == "python":
              key = Python_RSAKey.parsePEM(s)
              break
      else:
          raise ValueError("No acceptable implementations")
  
      return _parseKeyHelper(key, private, public)
function_tokens: def parsePEMKey ( s , private = False , public = False , passwordCallback = None , implementations = [ "openssl" , "python" ] ) : for implementation in implementations : if implementation == "openssl" and cryptomath . m2cryptoLoaded : key = OpenSSL_RSAKey . parse ( s , passwordCallback ) break elif implementation == "python" : key = Python_RSAKey . parsePEM ( s ) break else : raise ValueError ( "No acceptable implementations" ) return _parseKeyHelper ( key , private , public )