-rwxr-xr-x 3433 cryptattacktester-20230614/isdpredict1.py raw
#!/usr/bin/env python3 import sys import subprocess import multiprocessing problems = ( 'N=1284,W=24', 'N=1347,W=25', 'N=3488,W=64', 'N=4608,W=96', 'N=6688,W=128', 'N=6960,W=119', 'N=8192,W=128', ) attacks = ( 'attack=isd0,P=0,L=0,FW=1', 'attack=isd0,P=1,L=0,FW=1', 'attack=isd0,P=2,L=0,FW=1', 'attack=isd0,P=3,L=0,FW=1', 'attack=isd0,P=4,L=0,FW=1', 'attack=isd0,P=1,FW=1', 'attack=isd0,P=2,FW=1', 'attack=isd0,P=3,FW=1', 'attack=isd0,P=4,FW=1', 'attack=isd1,PI=1,FW=1', 'attack=isd1,PI=2,FW=1', 'attack=isd1,PI=3,FW=1', 'attack=isd1,PI=4,FW=1', 'attack=isd1,PI=5,FW=1', 'attack=isd1,PI=6,FW=1', 'attack=isd1,PI=7,FW=1', 'attack=isd1,PI=8,FW=1', 'attack=isd1,PI=9,FW=1', 'attack=isd1,PI=10,FW=1', 'attack=isd1,PI=11,FW=1', 'attack=isd1,PI=12,FW=1', 'attack=isd2,PI=2,PIJ=1,CP=1,CS=0,FW=1', 'attack=isd2,PI=4,PIJ=2,CP=1,CS=0,FW=1', 'attack=isd2,PI=6,PIJ=3,CP=1,CS=0,FW=1', 'attack=isd2,PI=8,PIJ=4,CP=1,CS=0,FW=1', 'attack=isd2,PI=10,PIJ=5,CP=1,CS=0,FW=1', 'attack=isd2,PI=12,PIJ=6,CP=1,CS=0,FW=1', 'attack=isd2,PI=14,PIJ=7,CP=1,CS=0,FW=1', 'attack=isd2,PI=16,PIJ=8,CP=1,CS=0,FW=1', 'attack=isd2,PI=18,PIJ=9,CP=1,CS=0,FW=1', 'attack=isd2,PI=20,PIJ=10,CP=1,CS=0,FW=1', 'attack=isd2,PI=22,PIJ=11,CP=1,CS=0,FW=1', 'attack=isd2,PI=24,PIJ=12,CP=1,CS=0,FW=1', 'attack=isd2,PI=2,PIJ=2,CP=1,CS=0,FW=1', 'attack=isd2,PI=4,PIJ=3,CP=1,CS=0,FW=1', 'attack=isd2,PI=6,PIJ=4,CP=1,CS=0,FW=1', 'attack=isd2,PI=8,PIJ=5,CP=1,CS=0,FW=1', 'attack=isd2,PI=10,PIJ=6,CP=1,CS=0,FW=1', 'attack=isd2,PI=12,PIJ=7,CP=1,CS=0,FW=1', 'attack=isd2,PI=14,PIJ=8,CP=1,CS=0,FW=1', 'attack=isd2,PI=16,PIJ=9,CP=1,CS=0,FW=1', 'attack=isd2,PI=18,PIJ=10,CP=1,CS=0,FW=1', 'attack=isd2,PI=20,PIJ=11,CP=1,CS=0,FW=1', 'attack=isd2,PI=22,PIJ=12,CP=1,CS=0,FW=1', 'attack=isd2,PI=2,PIJ=1,CP=0,CS=1,FW=1', 'attack=isd2,PI=4,PIJ=2,CP=0,CS=1,FW=1', 'attack=isd2,PI=6,PIJ=3,CP=0,CS=1,FW=1', 'attack=isd2,PI=8,PIJ=4,CP=0,CS=1,FW=1', 'attack=isd2,PI=10,PIJ=5,CP=0,CS=1,FW=1', 'attack=isd2,PI=12,PIJ=6,CP=0,CS=1,FW=1', 'attack=isd2,PI=14,PIJ=7,CP=0,CS=1,FW=1', 'attack=isd2,PI=16,PIJ=8,CP=0,CS=1,FW=1', 'attack=isd2,PI=18,PIJ=9,CP=0,CS=1,FW=1', 'attack=isd2,PI=20,PIJ=10,CP=0,CS=1,FW=1', 'attack=isd2,PI=22,PIJ=11,CP=0,CS=1,FW=1', 'attack=isd2,PI=24,PIJ=12,CP=0,CS=1,FW=1', 'attack=isd2,PI=26,PIJ=13,CP=0,CS=1,FW=1', 'attack=isd2,PI=28,PIJ=14,CP=0,CS=1,FW=1', 'attack=isd2,PI=30,PIJ=15,CP=0,CS=1,FW=1', 'attack=isd2,PI=32,PIJ=16,CP=0,CS=1,FW=1', 'attack=isd2,PI=34,PIJ=17,CP=0,CS=1,FW=1', 'attack=isd2,PI=36,PIJ=18,CP=0,CS=1,FW=1', ) todo = [(P,A) for A in attacks for P in problems] def handle(task): P,A = task searchparams = subprocess.run(['./searchparams','problem=uniformmatrix',P,A,'I=1,RE=1,X=1,YX=1'],capture_output=True,universal_newlines=True,check=True) searchparams = searchparams.stdout if len(searchparams) == 0: return task,None return task,searchparams.splitlines()[-1] results = {} printpos = 0 def maybeprint(): global printpos while printpos < len(todo): task = todo[printpos] if task not in results: break result = results[task] if result is not None: print('%s %s %s' % (task+(result,))) sys.stdout.flush() printpos += 1 with multiprocessing.Pool() as p: for task,result in p.imap_unordered(handle,reversed(todo),chunksize=1): results[task] = result maybeprint()