'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,
Пример #2
0
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 ],
Пример #3
0
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)
Пример #4
0

# 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' ],
Пример #5
0
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)
Пример #6
0
# -*- 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])
Пример #8
0
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' ],
Пример #9
0
# 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)
Пример #10
0
def load_fun2(name, args={}):
    return Module(bytecode_main.get_code_full(name, args), 'fun2', name)
Пример #11
0
def load_plain(name, args={}):
    # %% use get_code(), don't split bytecode
    return Module(bytecode_main.get_code_full(name, args), 'plain', name)