| OLD | NEW |
| 1 #! python | 1 #!/usr/bin/env python |
| 2 | 2 |
| 3 # Authors: |
| 4 # Trevor Perrin |
| 5 # Martin von Loewis - python 3 port |
| 6 # |
| 7 # See the LICENSE file for legal information regarding use of this file. |
| 8 |
| 9 from __future__ import print_function |
| 3 import sys | 10 import sys |
| 4 import os | 11 import os |
| 5 import socket | 12 import socket |
| 6 import thread | |
| 7 import math | 13 import math |
| 8 | 14 |
| 9 try: | |
| 10 import cryptoIDlib | |
| 11 cryptoIDlibLoaded = True | |
| 12 except: | |
| 13 cryptoIDlibLoaded = False | |
| 14 | |
| 15 | |
| 16 if __name__ != "__main__": | 15 if __name__ != "__main__": |
| 17 raise "This must be run as a command, not used as a module!" | 16 raise "This must be run as a command, not used as a module!" |
| 18 | 17 |
| 19 | 18 |
| 20 from tlslite.api import * | 19 from tlslite import * |
| 20 from tlslite import __version__ |
| 21 | 21 |
| 22 if len(sys.argv) == 1 or (len(sys.argv)==2 and sys.argv[1].lower().endswith("hel
p")): | 22 if len(sys.argv) == 1 or (len(sys.argv)==2 and sys.argv[1].lower().endswith("hel
p")): |
| 23 print "" | 23 print("") |
| 24 print "Version: 0.3.8" | 24 print("Version: %s" % __version__) |
| 25 print "" | 25 print("") |
| 26 print "RNG: %s" % prngName | 26 print("RNG: %s" % prngName) |
| 27 print "" | 27 print("") |
| 28 print "Modules:" | 28 print("Modules:") |
| 29 if cryptlibpyLoaded: | 29 if m2cryptoLoaded: |
| 30 print " cryptlib_py : Loaded" | 30 print(" M2Crypto : Loaded") |
| 31 else: | 31 else: |
| 32 print " cryptlib_py : Not Loaded" | 32 print(" M2Crypto : Not Loaded") |
| 33 if m2cryptoLoaded: | 33 if pycryptoLoaded: |
| 34 print " M2Crypto : Loaded" | 34 print(" pycrypto : Loaded") |
| 35 else: | 35 else: |
| 36 print " M2Crypto : Not Loaded" | 36 print(" pycrypto : Not Loaded") |
| 37 if pycryptoLoaded: | 37 if gmpyLoaded: |
| 38 print " pycrypto : Loaded" | 38 print(" GMPY : Loaded") |
| 39 else: | 39 else: |
| 40 print " pycrypto : Not Loaded" | 40 print(" GMPY : Not Loaded") |
| 41 if gmpyLoaded: | 41 print("") |
| 42 print " GMPY : Loaded" | 42 print("Commands:") |
| 43 else: | 43 print("") |
| 44 print " GMPY : Not Loaded" | 44 print(" createsrp <db>") |
| 45 if cryptoIDlibLoaded: | 45 print("") |
| 46 print " cryptoIDlib : Loaded" | 46 print(" add <db> <user> <pass> [<bits>]") |
| 47 else: | 47 print(" del <db> <user>") |
| 48 print " cryptoIDlib : Not Loaded" | 48 print(" check <db> <user> [<pass>]") |
| 49 print "" | 49 print(" list <db>") |
| 50 print "Commands:" | |
| 51 print "" | |
| 52 print " createsrp <db>" | |
| 53 print " createsharedkey <db>" | |
| 54 print "" | |
| 55 print " add <db> <user> <pass> [<bits>]" | |
| 56 print " del <db> <user>" | |
| 57 print " check <db> <user> [<pass>]" | |
| 58 print " list <db>" | |
| 59 sys.exit() | 50 sys.exit() |
| 60 | 51 |
| 61 cmd = sys.argv[1].lower() | 52 cmd = sys.argv[1].lower() |
| 62 | 53 |
| 63 class Args: | 54 class Args: |
| 64 def __init__(self, argv): | 55 def __init__(self, argv): |
| 65 self.argv = argv | 56 self.argv = argv |
| 66 def get(self, index): | 57 def get(self, index): |
| 67 if len(self.argv)<=index: | 58 if len(self.argv)<=index: |
| 68 raise SyntaxError("Not enough arguments") | 59 raise SyntaxError("Not enough arguments") |
| 69 return self.argv[index] | 60 return self.argv[index] |
| 70 def getLast(self, index): | 61 def getLast(self, index): |
| 71 if len(self.argv)>index+1: | 62 if len(self.argv)>index+1: |
| 72 raise SyntaxError("Too many arguments") | 63 raise SyntaxError("Too many arguments") |
| 73 return self.get(index) | 64 return self.get(index) |
| 74 | 65 |
| 75 args = Args(sys.argv) | 66 args = Args(sys.argv) |
| 76 | 67 |
| 77 def reformatDocString(s): | 68 def reformatDocString(s): |
| 78 lines = s.splitlines() | 69 lines = s.splitlines() |
| 79 newLines = [] | 70 newLines = [] |
| 80 for line in lines: | 71 for line in lines: |
| 81 newLines.append(" " + line.strip()) | 72 newLines.append(" " + line.strip()) |
| 82 return "\n".join(newLines) | 73 return "\n".join(newLines) |
| 83 | 74 |
| 84 try: | 75 try: |
| 85 if cmd == "help": | 76 if cmd == "help": |
| 86 command = args.getLast(2).lower() | 77 command = args.getLast(2).lower() |
| 87 if command == "valid": | 78 if command == "valid": |
| 88 print "" | 79 print("") |
| 89 else: | 80 else: |
| 90 print "Bad command: '%s'" % command | 81 print("Bad command: '%s'" % command) |
| 91 | 82 |
| 92 elif cmd == "createsrp": | 83 elif cmd == "createsrp": |
| 93 dbName = args.get(2) | 84 dbName = args.get(2) |
| 94 | 85 |
| 95 db = VerifierDB(dbName) | 86 db = VerifierDB(dbName) |
| 96 db.create() | 87 db.create() |
| 97 | 88 |
| 98 elif cmd == "createsharedkey": | |
| 99 dbName = args.getLast(2) | |
| 100 | |
| 101 db = SharedKeyDB(dbName) | |
| 102 db.create() | |
| 103 | |
| 104 elif cmd == "add": | 89 elif cmd == "add": |
| 105 dbName = args.get(2) | 90 dbName = args.get(2) |
| 106 username = args.get(3) | 91 username = args.get(3) |
| 107 password = args.get(4) | 92 password = args.get(4) |
| 108 | 93 |
| 109 try: | 94 db = VerifierDB(dbName) |
| 110 db = VerifierDB(dbName) | 95 db.open() |
| 111 db.open() | 96 if username in db: |
| 112 if username in db: | 97 print("User already in database!") |
| 113 print "User already in database!" | 98 sys.exit() |
| 114 sys.exit() | 99 bits = int(args.getLast(5)) |
| 115 bits = int(args.getLast(5)) | 100 N, g, salt, verifier = VerifierDB.makeVerifier(username, password, bits) |
| 116 N, g, salt, verifier = VerifierDB.makeVerifier(username, password, b
its) | 101 db[username] = N, g, salt, verifier |
| 117 db[username] = N, g, salt, verifier | |
| 118 except ValueError: | |
| 119 db = SharedKeyDB(dbName) | |
| 120 db.open() | |
| 121 if username in db: | |
| 122 print "User already in database!" | |
| 123 sys.exit() | |
| 124 args.getLast(4) | |
| 125 db[username] = password | |
| 126 | 102 |
| 127 elif cmd == "del": | 103 elif cmd == "del": |
| 128 dbName = args.get(2) | 104 dbName = args.get(2) |
| 129 username = args.getLast(3) | 105 username = args.getLast(3) |
| 130 | 106 db = VerifierDB(dbName) |
| 131 try: | 107 db.open() |
| 132 db = VerifierDB(dbName) | |
| 133 db.open() | |
| 134 except ValueError: | |
| 135 db = SharedKeyDB(dbName) | |
| 136 db.open() | |
| 137 | |
| 138 del(db[username]) | 108 del(db[username]) |
| 139 | 109 |
| 140 elif cmd == "check": | 110 elif cmd == "check": |
| 141 dbName = args.get(2) | 111 dbName = args.get(2) |
| 142 username = args.get(3) | 112 username = args.get(3) |
| 143 if len(sys.argv)>=5: | 113 if len(sys.argv)>=5: |
| 144 password = args.getLast(4) | 114 password = args.getLast(4) |
| 145 else: | 115 else: |
| 146 password = None | 116 password = None |
| 147 | 117 |
| 148 try: | 118 db = VerifierDB(dbName) |
| 149 db = VerifierDB(dbName) | 119 db.open() |
| 150 db.open() | |
| 151 except ValueError: | |
| 152 db = SharedKeyDB(dbName) | |
| 153 db.open() | |
| 154 | 120 |
| 155 try: | 121 try: |
| 156 db[username] | 122 db[username] |
| 157 print "Username exists" | 123 print("Username exists") |
| 158 | 124 |
| 159 if password: | 125 if password: |
| 160 if db.check(username, password): | 126 if db.check(username, password): |
| 161 print "Password is correct" | 127 print("Password is correct") |
| 162 else: | 128 else: |
| 163 print "Password is wrong" | 129 print("Password is wrong") |
| 164 except KeyError: | 130 except KeyError: |
| 165 print "Username does not exist" | 131 print("Username does not exist") |
| 166 sys.exit() | 132 sys.exit() |
| 167 | 133 |
| 168 elif cmd == "list": | 134 elif cmd == "list": |
| 169 dbName = args.get(2) | 135 dbName = args.get(2) |
| 136 db = VerifierDB(dbName) |
| 137 db.open() |
| 170 | 138 |
| 171 try: | 139 print("Verifier Database") |
| 172 db = VerifierDB(dbName) | 140 def numBits(n): |
| 173 db.open() | 141 if n==0: |
| 174 except ValueError: | 142 return 0 |
| 175 db = SharedKeyDB(dbName) | 143 return int(math.floor(math.log(n, 2))+1) |
| 176 db.open() | 144 for username in db.keys(): |
| 177 | 145 N, g, s, v = db[username] |
| 178 if isinstance(db, VerifierDB): | 146 print(numBits(N), username) |
| 179 print "Verifier Database" | |
| 180 def numBits(n): | |
| 181 if n==0: | |
| 182 return 0 | |
| 183 return int(math.floor(math.log(n, 2))+1) | |
| 184 for username in db.keys(): | |
| 185 N, g, s, v = db[username] | |
| 186 print numBits(N), username | |
| 187 else: | |
| 188 print "Shared Key Database" | |
| 189 for username in db.keys(): | |
| 190 print username | |
| 191 else: | 147 else: |
| 192 print "Bad command: '%s'" % cmd | 148 print("Bad command: '%s'" % cmd) |
| 193 except: | 149 except: |
| 194 raise | 150 raise |
| OLD | NEW |