1#!/usr/bin/env python 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 9from __future__ import print_function 10import sys 11import os 12import socket 13import math 14 15if __name__ != "__main__": 16 raise "This must be run as a command, not used as a module!" 17 18 19from tlslite import * 20from tlslite import __version__ 21 22if len(sys.argv) == 1 or (len(sys.argv)==2 and sys.argv[1].lower().endswith("help")): 23 print("") 24 print("Version: %s" % __version__) 25 print("") 26 print("RNG: %s" % prngName) 27 print("") 28 print("Modules:") 29 if m2cryptoLoaded: 30 print(" M2Crypto : Loaded") 31 else: 32 print(" M2Crypto : Not Loaded") 33 if pycryptoLoaded: 34 print(" pycrypto : Loaded") 35 else: 36 print(" pycrypto : Not Loaded") 37 if gmpyLoaded: 38 print(" GMPY : Loaded") 39 else: 40 print(" GMPY : Not Loaded") 41 print("") 42 print("Commands:") 43 print("") 44 print(" createsrp <db>") 45 print("") 46 print(" add <db> <user> <pass> [<bits>]") 47 print(" del <db> <user>") 48 print(" check <db> <user> [<pass>]") 49 print(" list <db>") 50 sys.exit() 51 52cmd = sys.argv[1].lower() 53 54class Args: 55 def __init__(self, argv): 56 self.argv = argv 57 def get(self, index): 58 if len(self.argv)<=index: 59 raise SyntaxError("Not enough arguments") 60 return self.argv[index] 61 def getLast(self, index): 62 if len(self.argv)>index+1: 63 raise SyntaxError("Too many arguments") 64 return self.get(index) 65 66args = Args(sys.argv) 67 68def reformatDocString(s): 69 lines = s.splitlines() 70 newLines = [] 71 for line in lines: 72 newLines.append(" " + line.strip()) 73 return "\n".join(newLines) 74 75try: 76 if cmd == "help": 77 command = args.getLast(2).lower() 78 if command == "valid": 79 print("") 80 else: 81 print("Bad command: '%s'" % command) 82 83 elif cmd == "createsrp": 84 dbName = args.get(2) 85 86 db = VerifierDB(dbName) 87 db.create() 88 89 elif cmd == "add": 90 dbName = args.get(2) 91 username = args.get(3) 92 password = args.get(4) 93 94 db = VerifierDB(dbName) 95 db.open() 96 if username in db: 97 print("User already in database!") 98 sys.exit() 99 bits = int(args.getLast(5)) 100 N, g, salt, verifier = VerifierDB.makeVerifier(username, password, bits) 101 db[username] = N, g, salt, verifier 102 103 elif cmd == "del": 104 dbName = args.get(2) 105 username = args.getLast(3) 106 db = VerifierDB(dbName) 107 db.open() 108 del(db[username]) 109 110 elif cmd == "check": 111 dbName = args.get(2) 112 username = args.get(3) 113 if len(sys.argv)>=5: 114 password = args.getLast(4) 115 else: 116 password = None 117 118 db = VerifierDB(dbName) 119 db.open() 120 121 try: 122 db[username] 123 print("Username exists") 124 125 if password: 126 if db.check(username, password): 127 print("Password is correct") 128 else: 129 print("Password is wrong") 130 except KeyError: 131 print("Username does not exist") 132 sys.exit() 133 134 elif cmd == "list": 135 dbName = args.get(2) 136 db = VerifierDB(dbName) 137 db.open() 138 139 print("Verifier Database") 140 def numBits(n): 141 if n==0: 142 return 0 143 return int(math.floor(math.log(n, 2))+1) 144 for username in db.keys(): 145 N, g, s, v = db[username] 146 print(numBits(N), username) 147 else: 148 print("Bad command: '%s'" % cmd) 149except: 150 raise 151