Merge branch 'master' into examplespython3

Conflicts:
	examples/mk_simple_certs.py
diff --git a/examples/certgen.py b/examples/certgen.py
index 28bdf80..89c7ca4 100644
--- a/examples/certgen.py
+++ b/examples/certgen.py
@@ -45,14 +45,14 @@
     req = crypto.X509Req()
     subj = req.get_subject()
 
-    for (key,value) in name.items():
+    for (key,value) in list(name.items()):
         setattr(subj, key, value)
 
     req.set_pubkey(pkey)
     req.sign(pkey, digest)
     return req
 
-def createCertificate(req, (issuerCert, issuerKey), serial, (notBefore, notAfter), digest="md5"):
+def createCertificate(req, issuerCertKey, serial, validityPeriod, digest="sha256"):
     """
     Generate a certificate given a certificate request.
 
@@ -67,6 +67,8 @@
                digest     - Digest method to use for signing, default is md5
     Returns:   The signed certificate in an X509 object
     """
+    (issuerCert, issuerKey) = issuerCertKey
+    (notBefore, notAfter) = validityPeriod
     cert = crypto.X509()
     cert.set_serial_number(serial)
     cert.gmtime_adj_notBefore(notBefore)
diff --git a/examples/mk_simple_certs.py b/examples/mk_simple_certs.py
index ed2a53d..7a24a4f 100644
--- a/examples/mk_simple_certs.py
+++ b/examples/mk_simple_certs.py
@@ -7,15 +7,18 @@
 cakey = createKeyPair(TYPE_RSA, 2048)
 careq = createCertRequest(cakey, CN='Certificate Authority')
 cacert = createCertificate(careq, (careq, cakey), 0, (0, 60*60*24*365*5)) # five years
+
 print('Creating Certificate Authority private key in "simple/CA.pkey"')
-open('simple/CA.pkey', 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, cakey))
+open('simple/CA.pkey', 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, cakey).decode('utf-8'))
 print('Creating Certificate Authority certificate in "simple/CA.cert"')
-open('simple/CA.cert', 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cacert))
+open('simple/CA.cert', 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cacert).decode('utf-8'))
+
 for (fname, cname) in [('client', 'Simple Client'), ('server', 'Simple Server')]:
     pkey = createKeyPair(TYPE_RSA, 2048)
     req = createCertRequest(pkey, CN=cname)
     cert = createCertificate(req, (cacert, cakey), 1, (0, 60*60*24*365*5)) # five years
+
     print('Creating Certificate %s private key in "simple/%s.pkey"' % (fname, fname))
-    open('simple/%s.pkey' % (fname,), 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey))
+    open('simple/%s.pkey' % (fname,), 'w').write(crypto.dump_privatekey(crypto.FILETYPE_PEM, pkey).decode('utf-8'))
     print('Creating Certificate %s certificate in "simple/%s.cert"' % (fname, fname))
-    open('simple/%s.cert' % (fname,), 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
+    open('simple/%s.cert' % (fname,), 'w').write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert).decode('utf-8'))
diff --git a/examples/simple/client.py b/examples/simple/client.py
index 0247c67..c051bf4 100644
--- a/examples/simple/client.py
+++ b/examples/simple/client.py
@@ -13,11 +13,11 @@
 
 def verify_cb(conn, cert, errnum, depth, ok):
     # This obviously has to be updated
-    print 'Got certificate: %s' % cert.get_subject()
+    print('Got certificate: %s' % cert.get_subject())
     return ok
 
 if len(sys.argv) < 3:
-    print 'Usage: python[2] client.py HOST PORT'
+    print('Usage: python[2] client.py HOST PORT')
     sys.exit(1)
 
 dir = os.path.dirname(sys.argv[0])
@@ -44,7 +44,7 @@
         sys.stdout.write(sock.recv(1024))
         sys.stdout.flush()
     except SSL.Error:
-        print 'Connection died unexpectedly'
+        print('Connection died unexpectedly')
         break
 
 
diff --git a/examples/simple/server.py b/examples/simple/server.py
index 37e36dd..539e773 100644
--- a/examples/simple/server.py
+++ b/examples/simple/server.py
@@ -14,11 +14,11 @@
 
 def verify_cb(conn, cert, errnum, depth, ok):
     # This obviously has to be updated
-    print 'Got certificate: %s' % cert.get_subject()
+    print('Got certificate: %s' % cert.get_subject())
     return ok
 
 if len(sys.argv) < 2:
-    print 'Usage: python[2] server.py PORT'
+    print('Usage: python[2] server.py PORT')
     sys.exit(1)
 
 dir = os.path.dirname(sys.argv[0])
@@ -44,12 +44,12 @@
 
 def dropClient(cli, errors=None):
     if errors:
-        print 'Client %s left unexpectedly:' % (clients[cli],)
-        print '  ', errors
+        print('Client %s left unexpectedly:' % (clients[cli],))
+        print('  ', errors)
     else:
-        print 'Client %s left politely' % (clients[cli],)
+        print('Client %s left politely' % (clients[cli],))
     del clients[cli]
-    if writers.has_key(cli):
+    if cli in writers:
         del writers[cli]
     if not errors:
         cli.shutdown()
@@ -57,14 +57,14 @@
 
 while 1:
     try:
-        r,w,_ = select.select([server]+clients.keys(), writers.keys(), [])
+        r,w,_ = select.select([server]+list(clients.keys()), list(writers.keys()), [])
     except:
         break
 
     for cli in r:
         if cli == server:
             cli,addr = server.accept()
-            print 'Connection from %s' % (addr,)
+            print('Connection from %s' % (addr,))
             clients[cli] = addr
 
         else:
@@ -74,10 +74,10 @@
                 pass
             except SSL.ZeroReturnError:
                 dropClient(cli)
-            except SSL.Error, errors:
+            except SSL.Error as errors:
                 dropClient(cli, errors)
             else:
-                if not writers.has_key(cli):
+                if cli not in writers:
                     writers[cli] = ''
                 writers[cli] = writers[cli] + ret
 
@@ -88,13 +88,13 @@
             pass
         except SSL.ZeroReturnError:
             dropClient(cli)
-        except SSL.Error, errors:
+        except SSL.Error as errors:
             dropClient(cli, errors)
         else:
             writers[cli] = writers[cli][ret:]
             if writers[cli] == '':
                 del writers[cli]
 
-for cli in clients.keys():
+for cli in list(clients.keys()):
     cli.close()
 server.close()