Exemplo n.º 1
0
 def add_clause(self, clause, no_return=True):
     assert (max(map(abs, clause)) < self.__var)
     if self.store_clauses:
         self.__dbg_clauses.append(clause)
     self.num_clauses += 1
     cl = clause.copy()
     if self.clock_act is not None: cl.append(-self.clock_act)
     Cadical.add_clause(self, cl, no_return)
Exemplo n.º 2
0
        # get input output
        m = solver.get_model()
        inp = {i: m[net_map[i] - 1] > 0 for i in protected_inputs}
        s = (len(protected_inputs) - n_eq) / len(protected_inputs)
        print(f'found input w/ sensitivity {s}')

        # check input against key
        if all(inp[f'protected_in_{i}_'] == k for i, k in enumerate(key)):
            sensitivity = (len(protected_inputs) -
                           n_eq) / len(protected_inputs)
            print(f'found correct key at sensitivity {sensitivity}')
            with open(
                    sys.argv[1].replace('locked/',
                                        'break/').replace('.v', '.key'),
                    'w') as f:
                f.write(f'{len(key)}b' +
                        ''.join('1' if inp[f'protected_in_{i}_'] else '0'
                                for i, k in enumerate(key))[::-1])
            exit()
        else:
            solver.add_clause([
                net_map[i] if not inp[i] else -net_map[i]
                for i in protected_inputs
            ])
    else:
        s = (len(protected_inputs) - n_eq) / len(protected_inputs)
        print(f'no more inputs w/ sensitivity {s}')
        n_eq += 1

print('0 sensitivity reached, no key found')
Exemplo n.º 3
0
 def add_clause(self, clause, no_return=True):
     assert (max(map(abs, clause)) < self.__var)
     if self.store_clauses:
         self.__dbg_clauses.append(clause)
     self.num_clauses += 1
     Cadical.add_clause(self, clause, no_return)