def testLeaks1(): print "Trying to leak (sha1,aes,xor,seed,oaep)" s20k="a"*20*1024 keytxt="a"*16 key = _ml.aes_key(keytxt) while 1: _ml.aes_key(keytxt) _ml.sha1(s20k) _ml.aes_ctr128_crypt(key,s20k,0) _ml.aes_ctr128_crypt(key,s20k,2000) _ml.aes_ctr128_crypt(key,"",2000,20000) _ml.aes_ctr128_crypt(key,"",0,20000) _ml.aes_ctr128_crypt(key,s20k,0,2000) try: _ml.aes_ctr128_crypt("abc",s20k,0,2000) except: pass _ml.strxor(s20k,s20k) try: _ml.strxor(s20k,keytxt) except: pass _ml.openssl_seed(s20k) r = _ml.add_oaep_padding("Hello",OAEP_PARAMETER,128) _ml.check_oaep_padding(r,OAEP_PARAMETER,128) try: _ml.check_oaep_padding("hello",OAEP_PARAMETER,128) except: pass try: _ml.add_oaep_padding(s20k,OAEP_PARAMETER,128) except: pass try: _ml.add_oaep_padding("a"*127,OAEP_PARAMETER,128) except: pass
def rsaTiming(): c = AESCounterPRNG() if hasattr(_ml, 'add_oaep_padding'): print "OAEP_add (70->128B) (C)", print timeit((lambda: _ml.add_oaep_padding(s70b,OAEP_PARAMETER,128)), 10000) r = _ml.add_oaep_padding(s70b, OAEP_PARAMETER,128) print "OAEP_check (128B->70B) (C)", print timeit((lambda r=r: _ml.check_oaep_padding(r,OAEP_PARAMETER,128)),10000) print "OAEP_add (70->128B) (native python)", print timeit((lambda c=c: _add_oaep_padding(s70b,OAEP_PARAMETER,128,c)), 10000) r = _add_oaep_padding(s70b, OAEP_PARAMETER,128,c) print "OAEP_check (128B->70B) (native python)", print timeit((lambda r=r: _check_oaep_padding(r,OAEP_PARAMETER,128)),10000) print "RSA generate (1024 bit)", timeit((lambda: pk_generate()),10) rsa = pk_generate() print "Pad+RSA public encrypt", print timeit((lambda rsa=rsa: pk_encrypt(s70b, rsa)),1000) enc = pk_encrypt(s70b, rsa) print "Pad+RSA private decrypt", \ timeit((lambda enc=enc,rsa=rsa: pk_decrypt(enc, rsa)),100) print "RSA.get_public_key", timeit(rsa.get_public_key, 100) print "RSA.get_exponent", timeit(rsa.get_exponent, 100) print "RSA.get_modulus_bytes", timeit(rsa.get_modulus_bytes, 10000) print "RSA.encode_key(public)", \ timeit(lambda rsa=rsa: rsa.encode_key(1), 100) print "RSA.encode_key(private)", \ timeit(lambda rsa=rsa: rsa.encode_key(0), 100) modulus = rsa.get_public_key()[0] print "RSA from modulus", \ timeit(lambda modulus=modulus: pk_from_modulus(modulus), 10000) asn1 = rsa.encode_key(1) print "RSA from ASN1 (public)", \ timeit(lambda asn1=asn1: pk_decode_public_key(asn1), 10000) print "RSA generate (1024 bit,e=65535)", timeit((lambda: pk_generate(1024, 65535)),10) rsa = pk_generate(1024,65535) print "Pad+RSA public encrypt", print timeit((lambda rsa=rsa: pk_encrypt(s70b, rsa)),1000) enc = pk_encrypt(s70b, rsa) print "Pad+RSA private decrypt", \ timeit((lambda enc=enc,rsa=rsa: pk_decrypt(enc, rsa)),100) print "RSA generate (1024 bit,e=3)", timeit((lambda: pk_generate(1024, 3)),10) rsa = pk_generate(1024,3) print "Pad+RSA public encrypt", print timeit((lambda rsa=rsa: pk_encrypt(s70b, rsa)),1000) enc = pk_encrypt(s70b, rsa) print "Pad+RSA private decrypt", \ timeit((lambda enc=enc,rsa=rsa: pk_decrypt(enc, rsa)),100) print "RSA generate (1024 bit,e=100073471)", timeit( lambda: pk_generate(1024, 100073471), 10) rsa = pk_generate(1024, 100073471) print "Pad+RSA public encrypt", print timeit((lambda rsa=rsa: pk_encrypt(s70b, rsa)),1000) enc = pk_encrypt(s70b, rsa) print "Pad+RSA private decrypt", \ timeit((lambda enc=enc,rsa=rsa: pk_decrypt(enc, rsa)),100) for (bits,it) in ((1536,15), (2048,10),(4096,10)): t = time() print "[generating key...]" rsa2 = pk_generate(bits) t = time()-t print "RSA generate (%d bit)"%bits, timestr(t) enc = pk_encrypt(s70b, rsa2) print "Pad+RSA public encrypt (%d bit)"%bits, print timeit((lambda rsa2=rsa2: pk_encrypt("zzz", rsa2)),it) print "Pad+RSA private decrypt (%d bit)"%bits, print timeit((lambda enc=enc,rsa2=rsa2: pk_decrypt(enc, rsa2)),it) o = loop_overhead.values() print "Timing overhead: %s...%s" % (timestr(min(o)),timestr(max(o)))