Merge pull request #1645 from reaperhulk/x509-attrs

add attribute and objectidentifier classes for x509 name
diff --git a/docs/hazmat/primitives/asymmetric/serialization.rst b/docs/hazmat/primitives/asymmetric/serialization.rst
index f63455e..7ff4ce3 100644
--- a/docs/hazmat/primitives/asymmetric/serialization.rst
+++ b/docs/hazmat/primitives/asymmetric/serialization.rst
@@ -24,6 +24,14 @@
     7SGRS1DTUGX4Y70m9dQpguy6Zg+gpHC+o+ERZR06uEQr+w==
     -----END RSA PRIVATE KEY-----
     """.strip()
+    public_pem_data = b"""
+    -----BEGIN PUBLIC KEY-----
+    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDn09PV9KPE7Q+N5K5UtNLT1DLl
+    8z/pKM2pP5tXqWx2OsEw00lCkDHdHESwzS050s/8rtkERKKyusCzCm9+vC1pQzUl
+    mtibfF4PQAQc1pJL6KHqlidgHw49atYmnC25CaeXt65pAYXoIacOZ8k5X7FW3Eag
+    ex8nG0iMw4ObOtg6CwIDAQAB
+    -----END PUBLIC KEY-----
+    """.strip()
     message = b""
 
     def sign_with_rsa_key(key, message):
@@ -63,6 +71,14 @@
 all begin with ``-----BEGIN {format}-----`` and end with ``-----END
 {format}-----``.
 
+.. note::
+
+    A PEM block which starts with ``-----BEGIN CERTIFICATE-----`` is not a
+    public or private key, it's an :doc:`X.509 Certificate </x509>`. You can
+    load it using :func:`~cryptography.x509.load_pem_x509_certificate` and
+    extract the public key with
+    :meth:`Certificate.public_key <cryptography.x509.Certificate.public_key>`.
+
 .. function:: load_pem_private_key(data, password, backend)
 
     .. versionadded:: 0.6
@@ -99,6 +115,13 @@
     Deserialize a public key from PEM encoded data to one of the supported
     asymmetric public key types.
 
+    .. doctest::
+
+        >>> from cryptography.hazmat.primitives.serialization import load_pem_public_key
+        >>> key = load_pem_public_key(public_pem_data, backend=default_backend())
+        >>> isinstance(key, rsa.RSAPublicKey)
+        True
+
     :param bytes data: The PEM encoded key data.
 
     :param backend: A