#! /usr/bin/env python import tempfile, os, string, random debug = 0 keyPairsToTest = 3 secretsToTest = 5 successes = 0 failures = 0 dictfile = open("/usr/share/dict/words") words = dictfile.readlines() dictfile.close() log = open("test.log", "w") log.write("keyPairsToTest = %d\n" % keyPairsToTest) log.write("secretsToTest = %d\n" % secretsToTest) for p in range(keyPairsToTest): tempname = tempfile.mktemp() os.system("./KeyGen > %s" % tempname) i = open(tempname) for line in i.readlines(): if string.find(line, "Private key = ") == 0: privatekey = string.rstrip(string.split(line, " ")[-1], "\n") if string.find(line, "Public key = ") == 0: publickey = string.rstrip(string.split(line, " ")[-1], "\n") i.close() os.remove(tempname) if debug: print privatekey print publickey log.write("Testing private key = %s, public key = %s\n" % (privatekey, publickey)) for s in range(secretsToTest): firstname = string.rstrip(words[random.randrange(len(words))]) lastname = string.rstrip(words[random.randrange(len(words))]) username = string.rstrip(words[random.randrange(len(words))]) host = string.rstrip(words[random.randrange(len(words))]) domain = string.rstrip(words[random.randrange(len(words))]) name = "%s %s" % (firstname, lastname) email = "%s@%s.%s" % (username, host, domain) secret = "%s; %s" % (string.capwords(name), email) tempname = tempfile.mktemp() os.system("./Sign '%s' %s > %s" % (secret, privatekey, tempname)) i = open(tempname) line = i.readline() signature = string.rstrip(string.split(line, " ")[-1], "\n") if debug: print signature i.close() os.remove(tempname) tempname = tempfile.mktemp() os.system("./Verify '%s' %s %s > %s" % (secret, signature, publickey, tempname)) i = open(tempname) line = i.readline() if line == "OK\n": successes += 1 if debug: print "OK" else: failures += 1 if debug: print "### Failed ###" i.close() os.remove(tempname) log.write(" secret = \"%s\", status = %s" % (secret, line)) print "Successes = %d; Failures = %d" % (successes, failures) log.write("Successes = %d; Failures = %d\n" % (successes, failures)) log.close()