Allow loading PEM from strings (not just bytes), closes issue #49
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index c305b36..63ddcf2 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -13,7 +13,7 @@
 - Deprecated the old rsa._version133 and rsa._version200 submodules, they will be
   completely removed in version 4.0.
 - Add an 'exponent' argument to key.newkeys()
-- Fixed bugs #12, #14, #27, #30
+- Fixed bugs #12, #14, #27, #30, #49
 - Switched from Solovay-Strassen to Miller-Rabin primality testing, to
   comply with NIST FIPS 186-4 [4] as probabilistic primality test
   (Appendix C, subsection C.3):
diff --git a/rsa/pem.py b/rsa/pem.py
index 32a9706..0f68cb2 100644
--- a/rsa/pem.py
+++ b/rsa/pem.py
@@ -47,6 +47,10 @@
 
     """
 
+    # We want bytes, not text. If it's text, it can be converted to ASCII bytes.
+    if not is_bytes(contents):
+        contents = contents.encode('ascii')
+
     (pem_start, pem_end) = _markers(pem_marker)
 
     pem_lines = []
diff --git a/tests/test_pem.py b/tests/test_pem.py
index 05bbb9b..952ec79 100644
--- a/tests/test_pem.py
+++ b/tests/test_pem.py
@@ -16,12 +16,59 @@
 #  limitations under the License.
 
 import unittest
+
 from rsa._compat import b
 from rsa.pem import _markers
+import rsa.key
+
+# 512-bit key. Too small for practical purposes, but good enough for testing with.
+public_key_pem = '''
+-----BEGIN PUBLIC KEY-----
+MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKH0aYP9ZFuctlPnXhEyHjgc8ltKKx9M
+0c+h4sKMXwjhjbQAZdtWIw8RRghpUJnKj+6bN2XzZDazyULxgPhtax0CAwEAAQ==
+-----END PUBLIC KEY-----
+'''
+
+private_key_pem = '''
+-----BEGIN RSA PRIVATE KEY-----
+MIIBOwIBAAJBAKH0aYP9ZFuctlPnXhEyHjgc8ltKKx9M0c+h4sKMXwjhjbQAZdtW
+Iw8RRghpUJnKj+6bN2XzZDazyULxgPhtax0CAwEAAQJADwR36EpNzQTqDzusCFIq
+ZS+h9X8aIovgBK3RNhMIGO2ThpsnhiDTcqIvgQ56knbl6B2W4iOl54tJ6CNtf6l6
+zQIhANTaNLFGsJfOvZHcI0WL1r89+1A4JVxR+lpslJJwAvgDAiEAwsjqqZ2wY2F0
+F8p1J98BEbtjU2mEZIVCMn6vQuhWdl8CIDRL4IJl4eGKlB0QP0JJF1wpeGO/R76l
+DaPF5cMM7k3NAiEAss28m/ck9BWBfFVdNjx/vsdFZkx2O9AX9EJWoBSnSgECIQCa
++sVQMUVJFGsdE/31C7wCIbE3IpB7ziABZ7mN+V3Dhg==
+-----END RSA PRIVATE KEY-----
+'''
+
+# Private key components
+prime1 = 96275860229939261876671084930484419185939191875438854026071315955024109172739
+prime2 = 88103681619592083641803383393198542599284510949756076218404908654323473741407
 
 
 class TestMarkers(unittest.TestCase):
     def test_values(self):
         self.assertEqual(_markers('RSA PRIVATE KEY'),
-            (b('-----BEGIN RSA PRIVATE KEY-----'),
-             b('-----END RSA PRIVATE KEY-----')))
+                         (b('-----BEGIN RSA PRIVATE KEY-----'),
+                          b('-----END RSA PRIVATE KEY-----')))
+
+
+class TestBytesAndStrings(unittest.TestCase):
+    """Test that we can use PEM in both Unicode strings and bytes."""
+
+    def test_unicode_public(self):
+        key = rsa.key.PublicKey.load_pkcs1_openssl_pem(public_key_pem)
+        self.assertEqual(prime1 * prime2, key.n)
+
+    def test_bytes_public(self):
+        key = rsa.key.PublicKey.load_pkcs1_openssl_pem(public_key_pem.encode('ascii'))
+        self.assertEqual(prime1 * prime2, key.n)
+
+    def test_unicode_private(self):
+        key = rsa.key.PrivateKey.load_pkcs1(private_key_pem)
+        self.assertEqual(prime1 * prime2, key.n)
+
+    def test_bytes_private(self):
+        key = rsa.key.PrivateKey.load_pkcs1(private_key_pem.encode('ascii'))
+        self.assertEqual(prime1, key.p)
+        self.assertEqual(prime2, key.q)