def make_permutation( self, bits, mode ): result = 0 direct_size = len( self.direct ) inverse_size = len( self.inverse ) if mode == 1: # используем прямую перестановку for i in range( direct_size ): result = bits_ops.set_bit( result, ( direct_size - i - 1 ), bits_ops.get_bit( bits, ( inverse_size - self.direct[ i ] ) ) ) elif mode == -1: # используем обратную перестановку for i in range( len( self.inverse ) ): result = bits_ops.set_bit( result, ( inverse_size - i - 1 ), bits_ops.get_bit( bits, ( direct_size - self.inverse[ i ][ 0 ] ) ) ) else: raise ValueError, "Invalid mode of permutation" return result
def add_bit_in_possible_keys( bit, bit_num, possible_keys ): if possible_keys == []: if bit == ".": possible_keys.append( 0 ) possible_keys.append( 0 ) possible_keys[ 0 ] = bops.set_bit( possible_keys[ 0 ], cfg.KEY_SIZE - bit_num, 0) possible_keys[ 1 ] = bops.set_bit( possible_keys[ 1 ], cfg.KEY_SIZE - bit_num, 1 ) else: possible_keys.append( 0 ) possible_keys[ 0 ] = bops.set_bit( possible_keys[ 0 ], cfg.KEY_SIZE - bit_num, int( bit, 10 ) ) else: if bit == ".": possible_keys *= 2 for i in range( len( possible_keys ) / 2 ): possible_keys[ i ] = bops.set_bit( possible_keys[ i ], cfg.KEY_SIZE - bit_num, 0 ) for i in range( len( possible_keys ) / 2, len( possible_keys ) ): possible_keys[ i ] = bops.set_bit( possible_keys[ i ], cfg.KEY_SIZE - bit_num, 1 ) else: for i in range( len( possible_keys ) ): possible_keys[ i ] = bops.set_bit( possible_keys[ i ], cfg.KEY_SIZE - bit_num, int( bit, 10 )) return possible_keys