'tests': tests } U.setup_vars(vs) # Optimizations and code generation # http://en.wikipedia.org/wiki/SHA256 # sha224 is sha256 with other initial values and one output dropped state = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ] code = B.thread_code(B.get_code_full(algo_file, **args), [B.override_state, state], B.drop_last_output) interleave = 1 B.global_vars['batch_size'] = 20 reverse_num = 6 B.global_vars['interleave'] = interleave B.global_vars['reverse_num'] = reverse_num B.global_vars['vectorize'] = 1 d = B.thread_code( code,
interleave = 1 # B.global_vars['batch_size'] = 20 # B.global_vars['batch_size'] = 16 B.global_vars['batch_size'] = 1 reverse_num = 0 B.global_vars['interleave'] = interleave B.global_vars['reverse_num'] = reverse_num B.global_vars['vectorize'] = 0 # B.global_vars['groestl'] = 1 d = B.thread_code( B.get_code_full(algo_file, **args), # [ B.interpret, [0x80 << 56] + [0] * 14 + [1] ], # B.my_exit, # [ B.interpret, [0x61626380 << 32] + [0] * 14 + [1] ], # B.my_exit, B.replace_state_with_const, [B.dump, 'pure.bytecode'], # [ B.bitslice, 64, size ], # [ B.unroll_cycle_const_range, 'setupW' ], # [ B.unroll_cycle_const_range_partly, 'setupW', 16 ], # [ B.unroll_cycle_const_range_partly, 'main', 40 ], # [ B.unroll_cycle_const_range_partly, 'main', 2 ],
U.setup_vars(vs) # Optimizations and code generation interleave = 1 # B.global_vars['batch_size'] = 20 # B.global_vars['batch_size'] = 16 B.global_vars['batch_size'] = 1 B.global_vars['interleave'] = interleave # skein512 loading skein = B.thread_code( B.get_code_full(algo_file, **args), B.replace_state_with_const, [B.replace_length_with_const, 80], [B.dump, 'skein1.bytecode'], [B.compute_const_expressions, size], # [ B.dump, 'skein2.bytecode' ], B.drop_print, # [ B.dump, 'skein.bytecode' ] ) # border of var sizes border = B.evaluate(''' inputs = [input() for i in range(8)] inputs = map(swap_to_be, inputs) map(print_var, inputs)
# Optimizations and code generation interleave = 2 B.global_vars['batch_size'] = 10 reverse_num = 4 B.global_vars['interleave'] = interleave B.global_vars['reverse_num'] = reverse_num B.global_vars['vectorize'] = 1 d = B.thread_code( B.get_code_full(algo_file, **args), B.replace_state_with_const, [ B.dump, 'pure.bytecode' ], # [ B.bitslice, 64, size ], # [ B.unroll_cycle_const_range, 'setupW' ], # [ B.unroll_cycle_const_range_partly, 'setupW', 16 ], # [ B.unroll_cycle_const_range_partly, 'main', 40 ], # [ B.unroll_cycle_const_range, 'main' ], # [ B.unpack_const_subscripts, 'k' ], # B.remove_assignments, # B.compute_const_expressions, # B.drop_print, # [ B.reduce_assignments, 'main', 'main_end' ],
def load_iuf(algo): # %% sha512 only so far code = B.get_code_full('sha512', **args) padding = B.get_code_full('padding', **args) code = B.join_parts(padding, code)
# -*- coding: utf-8 -*- # not a real format, just experiment with XTEA and interpreter # Copyright © 2016 Aleksey Cherepanov <*****@*****.**> # Redistribution and use in source and binary forms, with or without # modification, are permitted. import util_ui as U import bytecode_main as B from util_main import * code = B.get_code_full('xtea') # values from "unholy" task in BKP CTF 2016 key = [0x74616877, 0x696f6773, 0x6e6f676e, 0x65726568] # Computation forward encrypt = B.thread_code( code, [B.override_state, key], B.replace_state_with_const, [ B.interpret, # values from "unholy" task in BKP CTF 2016 [1129335618, 1752909396], [2990080719, 722035088] ]) # B.dump(encrypt, 'forward.bytecode') # Computation backwards
def gen_raw_format(c_template, algo_file, tests, tag=None, special1=None, special2=None, special0=None, reverse_num=0, algo_override=None): c_code = U.load_code_template(c_template) args = {} # # %% extract that from code # size = 4 # endianity = 'be' algo_name = algo_file algo_upper = algo_name.upper() algo_code = B.get_code_full(algo_override or algo_file, **args) d = algo_code if special0: d = B.thread_code(d, *special0) interface = B.get_interface(d) size = interface['size'] endianity = interface['endianity'] inputs = interface['inputs'] outputs = interface['outputs'] print interface if not tag: tag = '$' + algo_upper + '$' vs = { 'fmt_struct_name': 'raw1_' + algo_name, 'format_name': fmt_name_raw(algo_name), 'algo_name': 'dk ' + algo_upper, 'tag': tag, 'plaintext_length': (inputs - 2) * size - 1, 'binary_form_size': outputs * size, 'tests': tests } O.apply_bs_size(bs_size) U.setup_vars(vs) # Optimizations and code generation interleave = 1 B.global_vars['batch_size'] = 1 # reverse_num = 7 B.global_vars['interleave'] = interleave B.global_vars['reverse_num'] = reverse_num B.global_vars['vectorize'] = 1 d = B.thread_code(d, B.replace_state_with_const) if special1: d = B.thread_code(d, *special1) d = B.thread_code( d, B.remove_assignments, [B.compute_const_expressions, size], [B.no_reverse, reverse_num], ) reverse = d['reverse'] code = d['code'] scalar = B.deep_copy(code) reverse_str = B.thread_code(reverse, [B.dump, 'reverse.bytecode'], [O.gen_to_str, '$code', args]) B.global_vars['reverse'] = reverse_str scalar_str = B.thread_code(scalar, [B.dump, 'scalar.bytecode'], [O.gen_to_str, '$code', args]) B.global_vars['scalar'] = scalar_str out_file = fmt_file(vs['format_name']) d = B.thread_code(code, B.vectorize) if special2: d = B.thread_code(d, *special2) d = B.thread_code(d, B.use_define_for_some, [B.interleave, interleave], [O.gen, out_file, c_code, args, B.global_vars])
vs = { 'fmt_struct_name': 'raw1_md5', 'format_name': 'Raw-MD5', 'algo_name': 'MD5', 'tag': '$dynamic_0$', 'plaintext_length': '55', 'binary_form_size': '16', 'tests': tests } U.setup_vars(vs) # Optimizations and code generation code = B.get_code_full(algo_file, **args) interleave = 4 B.global_vars['batch_size'] = 40 reverse_num = 0 B.global_vars['interleave'] = interleave B.global_vars['reverse_num'] = reverse_num B.global_vars['vectorize'] = 1 d = B.thread_code( code, B.replace_state_with_const, [ B.dump, 'pure.bytecode' ],
# interleave = 2 B.global_vars['batch_size'] = 1 B.global_vars['batch_size'] = 10 B.global_vars['batch_size'] = 20 B.global_vars['batch_size'] = 16 reverse_num = 4 B.global_vars['interleave'] = interleave B.global_vars['reverse_num'] = reverse_num B.global_vars['vectorize'] = 1 d = B.thread_code( B.get_code_full('sha1_registers', **args), # d = B.thread_code( B.get_code_full(algo_file, **args), # B.replace_state_with_const, # [ B.unroll_cycle_const_range, 'setupW' ], # B.remove_assignments, # [ B.compute_const_expressions, size ], # B.drop_arrays, # B.drop_print, # [ B.compute_const_expressions, size ], # B.drop_unused, # [ B.dump, 'all.bytecode' ], # B.gen_asm, # [ B.dump, 'asm.bytecode' ], # ) # exit(0)
def load_fun2(name, args={}): return Module(bytecode_main.get_code_full(name, args), 'fun2', name)
def load_plain(name, args={}): # %% use get_code(), don't split bytecode return Module(bytecode_main.get_code_full(name, args), 'plain', name)