--- pyaxo.py.orig	2017-09-15 21:50:29 UTC
+++ pyaxo.py
@@ -124,18 +124,18 @@ class Axolotl(object):
     def initState(self, other_name, other_identityKey, other_handshakeKey,
                   other_ratchetKey, verify=True):
         if verify:
-            print 'Confirm ' + other_name + ' has identity key fingerprint:\n'
+            print('Confirm ' + other_name + ' has identity key fingerprint:\n')
             fingerprint = hash_(other_identityKey).encode('hex').upper()
             fprint = ''
             for i in range(0, len(fingerprint), 4):
                 fprint += fingerprint[i:i+2] + ':'
-            print fprint[:-1] + '\n'
-            print 'Be sure to verify this fingerprint with ' + other_name + \
-                  ' by some out-of-band method!'
-            print 'Otherwise, you may be subject to a Man-in-the-middle attack!\n'
-            ans = raw_input('Confirm? y/N: ').strip()
+            print(fprint[:-1] + '\n')
+            print('Be sure to verify this fingerprint with ' + other_name + \
+                  ' by some out-of-band method!')
+            print('Otherwise, you may be subject to a Man-in-the-middle attack!\n')
+            ans = input('Confirm? y/N: ').strip()
             if ans != 'y':
-                print 'Key fingerprint not confirmed - exiting...'
+                print('Key fingerprint not confirmed - exiting...')
                 sys.exit()
 
         self.conversation = self.init_conversation(other_name,
@@ -386,7 +386,7 @@ class AxolotlConversation:
     def _try_skipped_mk(self, msg, pad_length):
         msg1 = msg[:HEADER_LEN-pad_length]
         msg2 = msg[HEADER_LEN:]
-        for skipped_mk in self.staged_hk_mk.values():
+        for skipped_mk in list(self.staged_hk_mk.values()):
             try:
                 decrypt_symmetric(skipped_mk.hk, msg1)
                 body = decrypt_symmetric(skipped_mk.mk, msg2)
@@ -456,7 +456,7 @@ class AxolotlConversation:
             try:
                 body = decrypt_symmetric(mk, msg[HEADER_LEN:])
             except CryptoError:
-                print 'Undecipherable message'
+                print('Undecipherable message')
                 sys.exit(1)
         else:
             try:
@@ -464,7 +464,7 @@ class AxolotlConversation:
             except CryptoError:
                 pass
             if self.ratchet_flag or not header or header == '':
-                print 'Undecipherable message'
+                print('Undecipherable message')
                 sys.exit(1)
             Np = struct.unpack('>I', header[:HEADER_COUNT_NUM_LEN])[0]
             PNp = struct.unpack('>I', header[HEADER_COUNT_NUM_LEN:HEADER_COUNT_NUM_LEN*2])[0]
@@ -481,7 +481,7 @@ class AxolotlConversation:
             except CryptoError:
                 pass
             if not body or body == '':
-                print 'Undecipherable message'
+                print('Undecipherable message')
                 sys.exit(1)
             self.keys['RK'] = RKp
             self.keys['HKr'] = HKp
@@ -499,7 +499,7 @@ class AxolotlConversation:
             plaintext = f.read()
         ciphertext = b2a(self.encrypt(plaintext)) + '\n'
         with open(filename+'.asc', 'w') as f:
-            lines = [ciphertext[i:i+64] for i in xrange(0, len(ciphertext), 64)]
+            lines = [ciphertext[i:i+64] for i in range(0, len(ciphertext), 64)]
             for line in lines:
                 f.write(line+'\n')
 
@@ -507,7 +507,7 @@ class AxolotlConversation:
         with open(filename, 'r') as f:
             ciphertext = a2b(f.read())
         plaintext = self.decrypt(ciphertext)
-        print plaintext
+        print(plaintext)
 
     def encrypt_pipe(self):
         plaintext = sys.stdin.read()
@@ -528,46 +528,46 @@ class AxolotlConversation:
         self._axolotl.delete_conversation(self)
 
     def print_keys(self):
-        print 'Your Identity key is:\n' + b2a(self.keys['DHIs']) + '\n'
+        print('Your Identity key is:\n' + b2a(self.keys['DHIs']) + '\n')
         fingerprint = hash_(self.keys['DHIs']).encode('hex').upper()
         fprint = ''
         for i in range(0, len(fingerprint), 4):
             fprint += fingerprint[i:i+2] + ':'
-        print 'Your identity key fingerprint is: '
-        print fprint[:-1] + '\n'
-        print 'Your Ratchet key is:\n' + b2a(self.keys['DHRs']) + '\n'
+        print('Your identity key fingerprint is: ')
+        print(fprint[:-1] + '\n')
+        print('Your Ratchet key is:\n' + b2a(self.keys['DHRs']) + '\n')
         if self.handshake_key:
-            print 'Your Handshake key is:\n' + b2a(self.handshake_pkey)
+            print('Your Handshake key is:\n' + b2a(self.handshake_pkey))
         else:
-            print 'Your Handshake key is not available'
+            print('Your Handshake key is not available')
 
     def print_state(self):
-        print
-        print 'Warning: saving this data to disk is insecure!'
-        print
+        print()
+        print('Warning: saving this data to disk is insecure!')
+        print()
         for key in sorted(self.keys):
              if 'priv' in key:
                  pass
              else:
                  if self.keys[key] is None:
-                     print key + ': None'
+                     print(key + ': None')
                  elif type(self.keys[key]) is bool:
                      if self.keys[key]:
-                         print key + ': True'
+                         print(key + ': True')
                      else:
-                         print key + ': False'
+                         print(key + ': False')
                  elif type(self.keys[key]) is str:
                      try:
                          self.keys[key].decode('ascii')
-                         print key + ': ' + self.keys[key]
+                         print(key + ': ' + self.keys[key])
                      except UnicodeDecodeError:
-                         print key + ': ' + b2a(self.keys[key])
+                         print(key + ': ' + b2a(self.keys[key]))
                  else:
-                     print key + ': ' + str(self.keys[key])
+                     print(key + ': ' + str(self.keys[key]))
         if self.mode is ALICE_MODE:
-            print 'Mode: Alice'
+            print('Mode: Alice')
         else:
-            print 'Mode: Bob'
+            print('Mode: Bob')
 
 
 class SkippedMessageKey:
@@ -601,7 +601,7 @@ class SqlitePersistence(object):
                             sql = decrypt_symmetric(self.dbpassphrase,
                                                     crypt_sql)
                         except CryptoError:
-                            print 'Bad passphrase!'
+                            print('Bad passphrase!')
                             sys.exit(1)
                         else:
                             db.cursor().executescript(sql)
@@ -611,7 +611,7 @@ class SqlitePersistence(object):
                         try:
                             db.cursor().executescript(sql)
                         except sqlite3.OperationalError:
-                            print 'Bad sql! Password problem - cannot create the database.'
+                            print('Bad sql! Password problem - cannot create the database.')
                             sys.exit(1)
             except IOError as e:
                 if e.errno == errno.ENOENT:
@@ -687,7 +687,7 @@ class SqlitePersistence(object):
                     to_identity = ?''', (
                         conversation.name,
                         conversation.other_name))
-            for skipped_mk in conversation.staged_hk_mk.values():
+            for skipped_mk in list(conversation.staged_hk_mk.values()):
                 db.execute('''
                     INSERT INTO
                         skipped_mk (
