def transform_string(input_string):
	# Initial parameters
	folder = 'ntp_packet_field_short_client'
	long_byte_range = [44,45,46,50,54,58,66,74,82,90]
	short_byte_range = [42,43,44]
	group = [0,1,2,5,9,11,15,19,23,27]
	length = 450
	regex = '^[0-9a-f]+$'
	# Encode as hex
	hex_string = input_string.encode('HEX')
	fixed_slice = 162 ## 27*6
	dfa = regex2dfa.regex2dfa(regex)
	fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)
	client_ciphertext = fteObj.encode(hex_string)

	# Read into all possible values for each field (only consider field with more than 16 observations)
	long_field = retrieve_long_field(long_byte_range, folder)
	short_field = retrieve_short_field(short_byte_range, folder)
	# Do original FTE
	dfa = regex2dfa.regex2dfa(regex)
	fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)
	client_ciphertext = fteObj.encode(hex_string)
	# Map to NTP traffic
	chunk =  cut_str_into_chunk(client_ciphertext,27)
	output = [''] * len(chunk)
	for i in range(len(chunk)):
		output[i] = rewrite_output(map_fte_to_ntp(chunk[i], group, long_field), folder, short_field)
	return output
Exemple #2
0
def FPEncrypt(regex, fixed_slice, input_plaintext):
    dfa = regex2dfa.regex2dfa(regex)
    fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)
    cifrado = fteObj.encode(input_plaintext)
    #print("Debug: encrypting %s, result %s"%(input_plaintext,cifrado))
    #print("Debug: len(cifrado) %s"%(len(cifrado)))
    return cifrado
def FPEncrypt(regex, fixed_slice,input_plaintext):
	dfa = regex2dfa.regex2dfa(regex)
	fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)
	cifrado = fteObj.encode(input_plaintext)
	#print("Debug: encrypting %s, result %s"%(input_plaintext,cifrado))
	#print("Debug: len(cifrado) %s"%(len(cifrado)))
	return cifrado
Exemple #4
0
    def encode(self, marionette_state, template, to_embed):
        ctxt = ''

        if self.target_len_ < self.min_len_ or self.target_len_ > self.max_len_:
            key = self.regex_ + str(self.target_len_)
            if not regex_cache_.get(key):
                dfa = regex2dfa.regex2dfa(self.regex_)
                cdfa_obj = fte.cDFA.DFA(dfa, self.target_len_)
                encoder = fte.dfa.DFA(cdfa_obj, self.target_len_)
                regex_cache_[key] = (dfa, encoder)

            (dfa, encoder) = regex_cache_[key]

            to_unrank = random.randint(0, encoder.getNumWordsInSlice(self.target_len_))
            ctxt = encoder.unrank(to_unrank)

        else:
            key = self.regex_ + str(self.min_len_)
            (dfa, encoder) = fte_cache_[key]

            ctxt = encoder.encode(to_embed)

            if len(ctxt) != self.target_len_:
                raise Exception("Could not find ctxt of len %d (%d)" % 
                    (self.target_len_,len(ctxt)))

        return ctxt
def transform_string(input_string):
    # parameters
    input_length = 450
    start_seed = 42
    start = "2"
    filename = "client-payload-output.fsa"
    folder_size = "client-payload-size-uniq-obs"
    folder_symbol = "client-payload-obs"
    timing_bin = [0.025]
    size_bin = [10, 20, 35, 53, 65]
    length = [1, 2, 3, 2, 3, 3]
    # Encode as hex
    hex_string = input_string.encode("HEX")
    # Do original FTE
    regex = "^[0-9a-f]+$"
    # fixed_slice = 512
    fixed_slice = 150
    dfa = regex2dfa.regex2dfa(regex)
    fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)
    client_ciphertext = fteObj.encode(hex_string)
    print len(client_ciphertext)
    print client_ciphertext
    all_group = divide_into_group(size_bin, length, folder_size)
    # print client_ciphertext[0]
    fte_bin = cut_fte_into_pieces(
        client_ciphertext, filename, start, length, size_bin, all_group, folder_symbol, start_seed
    )
    # print len(fte_bin)
    return fte_bin
Exemple #6
0
    def get_fte_obj(self, regex, msg_len):
        fte_key = 'fte_obj-' + regex + str(msg_len)
        if not self.get_global(fte_key):
            dfa = regex2dfa.regex2dfa(regex)
            fte_obj = fte.encoder.DfaEncoder(dfa, msg_len)
            self.set_global(fte_key, fte_obj)

        return self.get_global(fte_key)
Exemple #7
0
    def __init__(self, regex, msg_len):
        self.regex_ = regex

        fte_key = regex + str(msg_len)
        if not fte_cache_.get(fte_key):
            dfa = regex2dfa.regex2dfa(regex)
            encrypter = fte.encoder.DfaEncoder(dfa, msg_len)
            fte_cache_[fte_key] = (dfa, encrypter)
        (self.dfa_, self.fte_encrypter_) = fte_cache_[fte_key]
Exemple #8
0
    def __init__(self, regex, msg_len):
        self.regex_ = regex

        fte_key = regex + str(msg_len)
        if not fte_cache_.get(fte_key):
            dfa = regex2dfa.regex2dfa(regex)
            encrypter = fte.encoder.DfaEncoder(dfa, msg_len)
            fte_cache_[fte_key] = (dfa, encrypter)
        (self.dfa_, self.fte_encrypter_) = fte_cache_[fte_key]
Exemple #9
0
    def __init__(self, regex, msg_len):
        self.regex_ = regex

        regex_key = regex + str(msg_len)
        if not regex_cache_.get(regex_key):
            dfa = regex2dfa.regex2dfa(regex)
            cDFA = fte.cDFA.DFA(dfa, msg_len)
            encoder = fte.dfa.DFA(cDFA, msg_len)
            regex_cache_[regex_key] = (dfa, encoder)
        (self.dfa_, self.encoder_) = regex_cache_[regex_key]
Exemple #10
0
    def __init__(self, regex, msg_len):
        self.regex_ = regex

        regex_key = regex + str(msg_len)
        if not regex_cache_.get(regex_key):
            dfa = regex2dfa.regex2dfa(regex)
            cDFA = fte.cDFA.DFA(dfa, msg_len)
            encoder = fte.dfa.DFA(cDFA, msg_len)
            regex_cache_[regex_key] = (dfa, encoder)
        (self.dfa_, self.encoder_) = regex_cache_[regex_key]
Exemple #11
0
    def _test_regex_file(self, filepath):
        with open(filepath) as fh:
            regex = fh.read()

        actual_dfa = regex2dfa.regex2dfa(regex)

        filepath_dfa = filepath[:-5] + "dfa"
        with open(filepath_dfa) as fh:
            expected_dfa = fh.read()
 
        actual_dfa = actual_dfa.strip()
        expected_dfa = expected_dfa.strip()

        self.assertEquals(expected_dfa, actual_dfa)
Exemple #12
0
    def _test_regex_file(self, filepath):
        with open(filepath) as fh:
            regex = fh.read()

        actual_dfa = regex2dfa.regex2dfa(regex)

        filepath_dfa = filepath[:-5] + "dfa"
        with open(filepath_dfa) as fh:
            expected_dfa = fh.read()

        actual_dfa = actual_dfa.strip()
        expected_dfa = expected_dfa.strip()

        self.assertEquals(expected_dfa, actual_dfa)
Exemple #13
0
    def get_fte_obj(self):
        if self.regex is None and self.fsm is None:
            print("Error: No specified format.")
            return

        if self.regex is not None:
            # get fsm from regex
            self.fsm = regex2dfa.regex2dfa(self.regex)

        # Get FTE Object + increase fixed slice until language is expressive enough
        while True:
            try:
                fteObj = fte.encoder.DfaEncoder(self.fsm, self.fixed_slice)
            except Exception as e:
                self.fixed_slice += 5
            else:
                break
        return fteObj
Exemple #14
0
    def __init__(self, regex, min_len = MIN_PTXT_LEN, msg_lens = amazon_msg_lens):
        self.regex_ = regex

        self.msg_lens_ = msg_lens
        self.random_lens_ = []
        for key in self.msg_lens_:
            self.random_lens_ += [key] * self.msg_lens_[key]

        self.min_len_ = min_len

        key = self.regex_ + str(self.min_len_)
        if not fte_cache_.get(key):
            dfa = regex2dfa.regex2dfa(self.regex_)
            encoder = fte.encoder.DfaEncoder(dfa, self.min_len_)
            fte_cache_[key] = (dfa, encoder)

        self.max_len_ = 2**18

        self.target_len_ = 0.0
Exemple #15
0
def FPEncrypt(regex, fixed_slice,input_plaintext):
	dfa = regex2dfa.regex2dfa(regex)
	fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)
	cifrado = fteObj.encode(input_plaintext)
	return cifrado
def FPDecrypt(regex, fixed_slice,cifrado): 
	dfa = regex2dfa.regex2dfa(regex)
	fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)
        #print("Debug: len(cifrado) para descifrar %s"%(len(cifrado)))
	[output_plaintext, remainder] = fteObj.decode(cifrado)
	return output_plaintext
Exemple #17
0
import regex2dfa
import fte.encoder

regex = '^(a|b)+$'
fixed_slice = 512
input_plaintext = 'test'

dfa = regex2dfa.regex2dfa(regex)
fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)

ciphertext = fteObj.encode(input_plaintext)
[output_plaintext, remainder] = fteObj.decode(ciphertext)

print 'input_plaintext='+input_plaintext
print 'ciphertext='+ciphertext[:16]+'...'+ciphertext[-16:]
print 'output_plaintext='+output_plaintext
Exemple #18
0
def FPDecrypt(regex, fixed_slice, cifrado):
    dfa = regex2dfa.regex2dfa(regex)
    fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)
    #print("Debug: len(cifrado) para descifrar %s"%(len(cifrado)))
    [output_plaintext, remainder] = fteObj.decode(cifrado)
    return output_plaintext
Exemple #19
0
import regex2dfa
import fte.encoder

regex = '^(a|b)+$'
fixed_slice = 512
input_plaintext = 'test'

dfa = regex2dfa.regex2dfa(regex)
fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)

ciphertext = fteObj.encode(input_plaintext)
[output_plaintext, remainder] = fteObj.decode(ciphertext)

print 'input_plaintext=' + input_plaintext
print 'ciphertext=' + ciphertext[:16] + '...' + ciphertext[-16:]
print 'output_plaintext=' + output_plaintext
Exemple #20
0
def FPDecrypt(regex, fixed_slice,cifrado): 
	dfa = regex2dfa.regex2dfa(regex)
	fteObj = fte.encoder.DfaEncoder(dfa, fixed_slice)
	[output_plaintext, remainder] = fteObj.decode(cifrado)
	return output_plaintext