Example #1
0
	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
Example #2
0
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