def testLeaks6(): import socket p = pk_generate(512) p2 = pk_generate(512) fn = mix_mktemp() dh = mix_mktemp() _ml.generate_cert(fn, p, p2, "A", "B", 100, 10000) dh_fname = os.environ.get("MM_TEST_DHPARAMS", None) if dh_fname and os.path.exists(dh_fname): dh = dh_fname elif dh_fname: _ml.generate_dh_parameters(dh_fname, 1, 512) dh = dh_fname else: _ml.generate_dh_parameters(dh, 1, 512) print "OK" context = _ml.TLSContext_new(fn, p)#XXXX, dh) listenSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listenSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) listenSock.bind(("127.0.0.1", 48999)) listenSock.listen(5) while 1: con, address = listenSock.accept() tls = context.sock(con, serverMode=1) tls.accept() while 1: r = tls.read(50) if r == 0: break while 1: r = tls.shutdown() if r == 1: break con.close()
def testLeaks3(): print "Trying to leak (certgen)" p = pk_generate(512) p2 = pk_generate(512) fn = mix_mktemp() while 1: _ml.generate_cert(fn, p, p2, "A", "B", 100, 10000)
def hashlogTiming(): print "#==================== HASH LOGS =======================" for load in (100, 1000, 10000, 100000): fname = mix_mktemp(".db") try: _hashlogTiming(fname,load) finally: for suffix in ("", ".dat", ".bak", ".dir"): try: os.unlink(fname+suffix) except OSError: pass
def testLeaks4(): print "Trying to leak (SSL)" p = pk_generate(512) p2 = pk_generate(512) fn = mix_mktemp() dh = mix_mktemp() _ml.generate_cert(fn, p, p2, "A", "B", 100, 10000) dh_fname = os.environ.get("MM_TEST_DHPARAMS") if dh_fname and os.path.exists(dh_fname): dh = dh_fname elif dh_fname: _ml.generate_dh_parameters(dh_fname, 1, 512) dh = dh_fname else: _ml.generate_dh_parameters(dh, 1, 512) print "OK" context = _ml.TLSContext_new(fn, p, dh) while 1: if 1: context = _ml.TLSContext_new(fn, p, dh) _ = context.sock(0, 0) _ = context.sock(0, 1)
def directoryTiming(): print "#========== DESCRIPTORS AND DIRECTORIES ==============" from mixminion.server.ServerKeys import ServerKeyring confStr = """ [Server] EncryptIdentityKey: no PublicKeyLifetime: 1 day EncryptPrivateKey: no Homedir: %s Mode: relay Nickname: The-Server Contact-Email: [email protected] [Incoming/MMTP] Enabled: yes IP: 1.1.1.1 """ % mix_mktemp() config = ServerConfig(string=confStr) keyring = ServerKeyring(config) keyring.getIdentityKey() print "Create and sign server descriptor", timeit(keyring.createKeys, 10) liveKey = keyring.getServerKeysets()[0] descFile = liveKey.getDescriptorFileName() desc = open(descFile).read() ## for _ in xrange(2000): ## ServerInfo(string=desc, assumeValid=0) ## if 1: return print "Parse server descriptor (no validation)", \ timeit(lambda desc=desc: ServerInfo(string=desc,assumeValid=1), 400) print "Parse server descriptor (full validation)", \ timeit(lambda desc=desc: ServerInfo(string=desc,assumeValid=0), 400) info = ServerInfo(string=desc) dbin = cPickle.dumps(info, 1) print "Unpickle binary-pickled descriptor (%s/%s)"%(len(dbin),len(desc)), \ timeit(lambda dbin=dbin: cPickle.loads(dbin), 400) dtxt = cPickle.dumps(info, 0) print "Unpickle text-pickled descriptor (%s/%s)"%(len(dtxt),len(desc)), \ timeit(lambda dtxt=dtxt: cPickle.loads(dtxt), 400)
def fileOpsTiming(): print "#================= File ops =====================" installSIGCHLDHandler() dname = mix_mktemp(".d") os.mkdir(dname) lockfile = Lockfile(os.path.join("dname")) t1 = time() for _ in xrange(2000): lockfile.acquire(blocking=1) lockfile.release() t = time()-t1 print "Lockfile: lock+unlock", timestr(t/2000.) for i in xrange(200): f = open(os.path.join(dname, str(i)), 'wb') f.write(s32K) f.close() lst = [os.path.join(dname,str(i)) for i in range(100) ] t1 = time() secureDelete(lst) t = time()-t1 print "secureDelete (100x32)", timestr(t) waitForChildren() t = time()-t1 print " (sync)", timestr(t) lst = [ os.path.join(dname,str(i)) for i in range(100,200) ] t1 = time() for fname in lst: secureDelete(fname) t = time()-t1 print "secureDelete (1)", timestr(t/100) waitForChildren() t = time()-t1 print " (sync)", timestr(t/100)
def serverQueueTiming(): print "#================= SERVER QUEUES =====================" import mixminion.Filestore Queue = mixminion.Filestore.MixedStore DeliveryQueue = mixminion.server.ServerQueue.DeliveryQueue d1 = mix_mktemp() q1 = Queue(d1, create=1) d2 = mix_mktemp() os.mkdir(d2,0700) getCommonPRNG().getBytes(1) #for ln,it in (32*1024,100),(128,400),(1024,400), (32*1024,100): for ln,it in (): msg = "z"*ln def y(msg=msg,idx=[0],d2=d2): fn = os.path.join(d2,"k_"+str(idx[0])) idx[0] += 1 f = open(fn, 'wb') f.write(msg) f.close() def x(msg=msg,d2=d2): f,b=getCommonPRNG().openNewFile(d2,"k_",1) f.write(msg) f.close() print "Base: write %s file: %s" %( spacestr(ln), timestr(timeit_(y, it))) for p in os.listdir(d2): os.unlink(os.path.join(d2,p)) print "Base: write %s file with random name: %s" %( spacestr(ln), timestr(timeit_(x, it))) for p in os.listdir(d2): os.unlink(os.path.join(d2,p)) tm = timeit_(lambda q1=q1,msg=msg:q1.queueMessage(msg), it) print "Queue %s message: %s" %(spacestr(ln), timestr(tm)) t2 = time() q1.removeAll() q1.cleanQueue() t2 = time() - t2 print "Scrub %s message: %s" %(spacestr(ln), timestr(t2/float(it))) msg = [ 123, 414, msg ] tm = timeit_(lambda q1=q1,msg=msg:q1.queueObject(msg), it) print "Pickle %s message: %s" %(spacestr(ln), timestr(tm)) q1.removeAll() q1.cleanQueue() for ln,it in (128,400),(1024,400), (32*1024,100): q1 = DeliveryQueue(d1, [100,100,100,100]) msg = "z"*ln print "Delivery queue: %s message: %s" %( spacestr(ln), timeit(lambda q1=q1,msg=msg: q1.queueDeliveryMessage(msg), it)) print " (repOK):", \ timeit(lambda q1=q1: q1._repOk(), it*10) # q1._bs2() # print " (set metadata 2):", \ # timeit(lambda q1=q1: q1._saveState2(), it) for p in os.listdir(d1): os.unlink(os.path.join(d1,p))