# Copyright © 2015 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 import output_c as O # import output_c_sse as O args = U.parse_args() c_template = 'raw' algo_file = 'sha1' c_code = U.load_code_template(c_template) size = 4 endianity = 'be' args['args'] = { 'size': size } O.apply_size(size) O.apply_endianity(endianity) bs_size = 64 O.apply_bs_size(bs_size) # Format setup tests = '''
# Copyright © 2015 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 import output_c as O # import output_c_sse as O # args = U.parse_args() c_template = 'raw' algo_file = 'groestl512' c_code = U.load_code_template(c_template) size = 8 endianity = 'le' args = {} args['args'] = {'size': size} bs_size = 64 O.apply_bs_size(bs_size) # Format setup tests = r''' {"6d3ad29d279110eef3adbd66de2a0345a77baede1557f5d099fce0c03d6dc2ba8e6d4a6633dfbd66053c20faa87d1a11f39a7fbe4a6c2f009801370308fc4ad8", ""}, {"70e1c68c60df3b655339d67dc291cc3f1dde4ef343f11b23fdd44957693815a75a8339c682fc28322513fd1f283c18e53cff2b264e06bf83a2f0ac8c1f6fbff6", "abc"},
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])