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 |