Skip to content
Snippets Groups Projects
oracle 6.49 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/python3
    
    import re
    import os
    import sys
    debug = True
    
    lines = sys.stdin.readlines()
    lemma = sys.argv[1]
    
    # INPUT:
    # - lines contain a list of "%i:goal" where "%i" is the index of the goal
    # - lemma contain the name of the lemma under scrutiny
    # OUTPUT:
    # - (on stdout) a list of ordered index separated by EOL
    
    
    vk=dict()
    rank = []             # list of list of goals, main list is ordered by priority
    maxPrio = 110
    for i in range(0,maxPrio):
      rank.append([])
    
    if re.match('.*Unforgeability.*$', lemma): 
      print("applying oracle to Unforgeability")
      for line in lines:
        num = line.split(':')[0]
    
        if re.match('.*\!Pk\(.*', line): rank[109].append(num)
        elif re.match('.*\!TPM_.*', line): rank[109].append(num)
        elif re.match('.*CP_State.*', line): rank[109].append(num)
        elif re.match('.*\!Out.*', line): rank[109].append(num)
        elif re.match('.*\!KU\( ~sid \)', line): rank[10].append(num)
        elif re.match('.*\!KU\( ~.* \)', line): rank[107].append(num)
    
        elif re.match('.*\!KU\(.*multp\(H_n_2\(.*', line): rank[99].append(num)
        elif re.match('.*\!KU\(.*multp\(~l, multp\(~y,.*', line): rank[98].append(num)
        elif re.match('.*\!KU\( H_n_2\(.*', line): rank[97].append(num)
        elif re.match('.*\!KU\( H_k_2\(.*', line): rank[97].append(num)
        elif re.match('.*\!KU\( H_k_7\(.*', line): rank[97].append(num)
        elif re.match('.*\!KU\( E_S\(.*', line): rank[97].append(num)
    
        elif re.match('.*In_S\( .*\'returnEK\'>', line): rank[92].append(num)
        elif re.match('.*In_S\( .*\'ret_TPM2_Certify\'>', line): rank[92].append(num)
        elif re.match('.*In_S\( .*\'createDAAKey\'>', line): rank[91].append(num)
        elif re.match('.*In_S\( \$PS.*', line): rank[87].append(num)
        elif re.match('.*In_S\( \$AS.*', line): rank[87].append(num)
        elif re.match('.*In_S_B\( \$AS, .*', line): rank[87].append(num)
    
        elif re.match('.*splitEqs.*', line): rank[5].append(num)
        elif re.match('.*', line): rank[20].append(num)
    
    
    elif re.match('.*_CP_sessKey$', lemma) or re.match('.*test1', lemma): 
      print("applying oracle to Unforgeability")
      for line in lines:
        num = line.split(':')[0]
    
        if re.match('.*\!Pk\(.*', line): rank[109].append(num)
        elif re.match('.*\!TPM_.*', line): rank[109].append(num)
        elif re.match('.*CP_State.*', line): rank[109].append(num)
        elif re.match('.*\!Out.*', line): rank[109].append(num)
        elif re.match('.*\!KU\( ~g \)', line): rank[11].append(num)
        elif re.match('.*\!KU\( ~sid \)', line): rank[10].append(num)
    
        elif re.match('.*In_S\( .*\'returnDAAKey\'>', line): rank[101].append(num)
        elif re.match('.*\!KU\( ~f \)', line): rank[100].append(num)
        elif re.match('.*\!KU\( ~.* \)', line): rank[107].append(num)
    
        elif re.match('.*\!KU\( sign\(h\(.*', line): rank[99].append(num)
        elif re.match('.*In_S\( .*\'ret_TPM2_Sign_S\'>', line): rank[98].append(num)
        elif re.match('.*In_S\( .*\'ret_TPM2_Certify\'>', line): rank[97].append(num)
        elif re.match('.*In_S\( .*\'createdSessionKey\'>', line): rank[96].append(num)
    
        elif re.match('.*\!KU\(.*multp\(H_n_2\(.*', line): rank[95].append(num)
        elif re.match('.*\!KU\( H_n_2\(.*', line): rank[94].append(num)
        elif re.match('.*\!KU\(.*multp\(~l, multp\(~y,.*', line): rank[93].append(num)
        elif re.match('.*\!KU\( H_k_2\(.*', line): rank[92].append(num)
        elif re.match('.*\!KU\( H_k_7\(.*', line): rank[92].append(num)
        elif re.match('.*\!KU\( E_S\(.*', line): rank[92].append(num)
    
        elif re.match('.*\!KU\(.*plus\(multp\(~.*', line): rank[90].append(num)
        elif re.match('.*\!KU\(.*multp\(sl.*', line): rank[87].append(num)
        elif re.match('.*\!KU\(*multp\(~.*', line): rank[89].append(num)
        elif re.match('.*\!KU\(.*multp\(.*', line): rank[88].append(num)
        
        elif re.match('.*In_S\( \$PS.*', line): rank[80].append(num)
        elif re.match('.*In_S\( \$AS.*', line): rank[80].append(num)
        elif re.match('.*In_S_B\( \$AS, .*', line): rank[80].append(num)
    
        elif re.match('.*splitEqs.*', line): rank[5].append(num)
        elif re.match('.*', line): rank[20].append(num)
    
    elif re.match('.*test2', lemma) or re.match('.*_CP_data$', lemma): 
      print("applying oracle to Unforgeability")
      for line in lines:
        num = line.split(':')[0]
    
        if re.match('.*\!Pk\(.*', line): rank[109].append(num)
        elif re.match('.*\!TPM_.*', line): rank[109].append(num)
        elif re.match('.*CP_State.*', line): rank[109].append(num)
        elif re.match('.*\!Out.*', line): rank[109].append(num)
        elif re.match('.*\!KU\( ~sid', line): rank[10].append(num)
    
        elif re.match('.*< #i.*', line): rank[108].append(num)
    
        elif re.match('.*In_S\( .*\'returnDAAKey\'>', line): rank[101].append(num)
        elif re.match('.*In_S\( .*\'createdSessionKey\'>', line): rank[101].append(num)
        elif re.match('.*\!KU\( ~g', line): rank[100].append(num)
        elif re.match('.*\!KU\( ~f', line): rank[100].append(num)
        elif re.match('.*\!KU\( ~.* \)', line): rank[107].append(num)
    
        elif re.match('.*\!KU\( sign\(h\(.*', line): rank[99].append(num)
        elif re.match('.*In_S\( .*\'ret_TPM2_HMAC\'>', line): rank[98].append(num)
        elif re.match('.*In_S\( .*\'ret_TPM2_Sign_S\'>', line): rank[98].append(num)
        elif re.match('.*In_S\( .*\'ret_TPM2_Certify\'>', line): rank[97].append(num)
        elif re.match('.*In_S\( .*\'createdSessionKey\'>', line): rank[96].append(num)
    
        elif re.match('.*\!KU\(.*multp\(H_n_2\(.*', line): rank[95].append(num)
        elif re.match('.*\!KU\( H_n_2\(.*', line): rank[94].append(num)
        elif re.match('.*\!KU\(.*multp\(~l, multp\(~y,.*', line): rank[93].append(num)
        elif re.match('.*\!KU\( H_k_2\(.*', line): rank[92].append(num)
        elif re.match('.*\!KU\( H_k_7\(.*', line): rank[92].append(num)
        elif re.match('.*\!KU\( E_S\(.*', line): rank[92].append(num)
    
        elif re.match('.*\!KU\(.*plus\(multp\(~.*', line): rank[90].append(num)
        elif re.match('.*\!KU\(.*multp\(sl.*', line): rank[87].append(num)
        elif re.match('.*\!KU\(*multp\(~.*', line): rank[89].append(num)
        elif re.match('.*\!KU\(.*multp\(.*', line): rank[88].append(num)
        
        elif re.match('.*In_S\( \$PS.*', line): rank[80].append(num)
        elif re.match('.*In_S\( \$AS.*', line): rank[80].append(num)
        elif re.match('.*In_S_B\( \$AS, .*', line): rank[80].append(num)
        elif re.match('.*In_A\(.*', line): rank[75].append(num)
    
        elif re.match('.*splitEqs.*', line): rank[5].append(num)
        elif re.match('.*', line): rank[20].append(num)
    
    
    else:
      print("not applying the rule")
      exit(0)
    
    # Ordering all goals by ranking (higher first)
    for listGoals in reversed(rank):
      for goal in listGoals:
        sys.stderr.write(goal)
        print(goal)