+skein and ubi (512 and 1024bit mode) in assembler

This commit is contained in:
bg 2009-03-25 20:53:31 +00:00
parent f215d8ed64
commit c239a90de4
30 changed files with 59863 additions and 79 deletions

View File

@ -120,6 +120,24 @@
out _SFR_IO_ADDR(SPL), \reg1
.endm
.macro stack_free_large3 size:req, reg1=r30, reg2=r31
in r0, _SFR_IO_ADDR(SREG)
in \reg1, _SFR_IO_ADDR(SPL)
in \reg2, _SFR_IO_ADDR(SPH)
push r16
push r17
ldi r16, lo8(\size)
ldi r17, hi8(\size)
add \reg1, r16
adc \reg2, r17
pop r17
pop r16
cli
out _SFR_IO_ADDR(SPH), \reg2
out _SFR_IO_ADDR(SREG), r0
out _SFR_IO_ADDR(SPL), \reg1
.endm
/*******************************************************************************
* END of MACRO SECTION *

View File

@ -5,9 +5,10 @@ ALGO_NAME := SKEIN
HASHES += $(ALGO_NAME)
$(ALGO_NAME)_OBJ := threefish_mix.o threefish256_enc_asm.o ubi256_asm.o skein256_asm.o \
threefish_mix_4c.o threefish512_enc.o threefish1024_enc.o \
ubi512.o ubi1024.o memxor.o skein512.o skein1024.o
$(ALGO_NAME)_OBJ := threefish_mix.o \
threefish256_enc_asm.o ubi256_asm.o skein256_asm.o \
threefish512_enc_asm.o ubi512_asm.o skein512_asm.o \
threefish1024_enc_asm.o ubi1024_asm.o skein1024_asm.o
$(ALGO_NAME)_TEST_BIN := main-skein-test.o debug.o uart.o hexdigit_tab.o \
dbz_strings.o nessie_common.o cli.o string-extras.o performance_test.o \
hfal-basic.o hfal_skein256.o hfal_skein512.o hfal_skein1024.o shavs.o

View File

@ -5,8 +5,9 @@ ALGO_NAME := UBI
HASHES += $(ALGO_NAME)
$(ALGO_NAME)_OBJ := threefish_mix.o threefish256_enc_asm.o ubi256_asm.o threefish512_enc.o threefish1024_enc.o \
threefish_mix_4c.o ubi512.o ubi1024.o memxor.o
$(ALGO_NAME)_OBJ := threefish_mix.o threefish256_enc_asm.o ubi256_asm.o \
threefish512_enc_asm.o ubi512_asm.o threefish1024_enc_asm.o \
ubi1024_asm.o memxor.o
$(ALGO_NAME)_TEST_BIN := main-ubi-test.o debug.o uart.o hexdigit_tab.o \
dbz_strings.o nessie_common.o cli.o string-extras.o performance_test.o
$(ALGO_NAME)_NESSIE_TEST := test nessie

358
skein1024_asm.S Normal file
View File

@ -0,0 +1,358 @@
/* skein1024_asm.S */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* \author Daniel Otte
* \email daniel.otte@rub.de
* \date 2009-03-25
* \license GPLv3 or later
*/
#include "avr-asm-macros.S"
/******************************************************************************/
/*
void skein1024_init(skein1024_ctx_t* ctx, uint16_t outsize_b){
skein_config_t conf;
uint8_t null[UBI1024_BLOCKSIZE_B];
memset(null, 0, UBI1024_BLOCKSIZE_B);
memset(&conf, 0, sizeof(skein_config_t));
conf.schema[0] = 'S';
conf.schema[1] = 'H';
conf.schema[2] = 'A';
conf.schema[3] = '3';
conf.version = 1;
conf.out_length = outsize_b;
ctx->outsize_b = outsize_b;
ubi1024_init(&(ctx->ubictx), null, UBI_TYPE_CFG);
ubi1024_lastBlock(&(ctx->ubictx), &conf, 256);
ubi1024_init(&(ctx->ubictx), ctx->ubictx.g, UBI_TYPE_MSG);
}
*/
/*
* param ctx: r24:r25
* param outsize_b: r22:r23
*/
UBICTX0 = 2
UBICTX1 = 3
CONF0 = 4
CONF1 = 5
.global skein1024_init
skein1024_init:
push_range 2, 5
stack_alloc_large 32+128-22 ; |<- 22 ->|
adiw r30, 1 ; | CONF (32) |
movw CONF0, r30 ; | null (128) |
movw r26, r24
st X+, r22
st X+, r23
movw UBICTX0, r26
ldi r24, 'S'
st Z+, r24
ldi r24, 'H'
st Z+, r24
ldi r24, 'A'
st Z+, r24
ldi r24, '3'
st Z+, r24
ldi r24, 1
st Z+, r24
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r22
st Z+, r23
ldi 24, 128
1: st Z+, r1
dec r24
brne 1b
/* call ubi1024_init*/
subi r30, lo8(128)
sbci r31, hi8(128)
movw r24, UBICTX0
movw r22, r30
ldi r20, 4
rcall ubi1024_init
/* call ubi1024_lastBlock*/
movw r24, UBICTX0
movw r22, CONF0
ldi r21, 1
clr r20
rcall ubi1024_lastBlock
/* call ubi1024_init*/
movw r24, UBICTX0
adiw r24, 16
movw r22, r24
movw r24, UBICTX0
ldi r20, 48
rcall ubi1024_init
stack_free_large2 32+128-22
pop_range 2, 5
ret
/******************************************************************************/
.global skein1024_nextBlock
skein1024_nextBlock:
adiw r24, 2
rjmp ubi1024_nextBlock
/******************************************************************************/
.global skein1024_lastBlock
skein1024_lastBlock:
adiw r24, 2
rjmp ubi1024_lastBlock
/******************************************************************************/
/*
void skein1024_ctx2hash(void* dest, skein1024_ctx_t* ctx){
ubi1024_ctx_t uctx;
uint16_t outsize_b;
uint64_t counter=0;
uint8_t outbuffer[UBI1024_BLOCKSIZE_B];
ubi1024_init(&(ctx->ubictx), ctx->ubictx.g, UBI_TYPE_OUT);
outsize_b = ctx->outsize_b;
while(1){
memcpy(&uctx, &(ctx->ubictx), sizeof(ubi1024_ctx_t));
ubi1024_lastBlock(&uctx, &counter, 64);
ubi1024_ctx2hash(outbuffer, &uctx);
if(outsize_b<=UBI1024_BLOCKSIZE){
memcpy(dest, outbuffer, (ctx->outsize_b+7)/8);
break;
}else{
memcpy(dest, outbuffer, UBI1024_BLOCKSIZE_B);
dest = (uint8_t*)dest + UBI1024_BLOCKSIZE_B;
outsize_b -= UBI1024_BLOCKSIZE;
counter++;
}
}
}
*/
/*
* param dest: r24:r25
* param ctx: r22:r23
*/
OUTSIZE_B0 = 16
OUTSIZE_B1 = 17
UCTX0 = 14
UCTX1 = 15
UBICTX0 = 12
UBICTX1 = 13
DEST0 = 10
DEST1 = 11
.global skein1024_ctx2hash
skein1024_ctx2hash:
push_range 10, 17
/* 144 || 8 || 128 */
stack_alloc_large 144+8+128 /* uctx || counter || outbuffer */
movw DEST0, r24
adiw r30, 1
movw UCTX0, r30
ldi r16, 144
add r30, r16
adc r31, r1
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
movw r26, 22
ld OUTSIZE_B0, X+
ld OUTSIZE_B1, X+
movw UBICTX0, r26
/* call ubi1024_init */
movw r24, UBICTX0
adiw r24, 16
movw r22, r24
movw r24, UBICTX0
ldi r20, 63
rcall ubi1024_init
/* main loop */
/* copy ubictx in uctx*/
1: movw r30, UCTX0
movw r26, UBICTX0
ldi r24, 144
2: ld r25, X+
st Z+, r25
dec r24
brne 2b
/* call ubi1024_lastBlock */
movw r24, UCTX0
adiw r24, 63
adiw r24, 63
adiw r24, 18
movw r22, r24
movw r24, UCTX0
clr r21
ldi r20, 64
rcall ubi1024_lastBlock
/* copy uctx->g to outbuffer */
movw r26, UCTX0
adiw r26, 16
movw r30, UCTX0
adiw r30, 63
adiw r30, 63
adiw r30, 18+8
ldi r24, 128
2: ld r25, X+
st Z+, r25
dec r24
brne 2b
/* compare outsize_b with 1024*/
cpi OUTSIZE_B1, 5
brge 5f
cpi OUTSIZE_B1, 4
brlo 3f
tst OUTSIZE_B0
breq 3f
5: /* copy outbuffer to dest */
movw r30, DEST0
movw r26, UCTX0
adiw r26, 63
adiw r26, 63
adiw r26, 18+8
ldi r24, 128
6: ld r25, X+
st Z+, r25
dec r24
brne 6b
/* store new dest */
movw DEST0, r26
/* adjust counter and outsize_b*/
subi OUTSIZE_B1, 2
movw r30, UCTX0
adiw r30, 63
adiw r30, 63
adiw r30, 18
ldi r24, 1
ld r25, Z
add r25, r24
st Z+, r25
ldi r24, 7
6: ld r25, Z
adc r25, r1
st Z+, r25
dec r24
brne 6b
rjmp 1b
3: /* last iteraton */
movw r24, OUTSIZE_B0
adiw r24, 7
lsr r25
ror r24
lsr r25
ror r24
lsr r25
ror r24
movw r30, DEST0
movw r26, UCTX0
adiw r26, 63
adiw r26, 63
adiw r26, 18+8
tst r24
breq 8f
7: ld r25, X+
st Z+, r25
dec r24
brne 7b
8:
stack_free_large3 144+8+128
pop_range 10, 17
ret
/******************************************************************************/
/*
void skein1024(void* dest, uint16_t outlength_b, const void* msg, uint32_t length_b){
skein1024_ctx_t ctx;
skein1024_init(&ctx, outlength_b);
while(length_b>SKEIN1024_BLOCKSIZE){
skein1024_nextBlock(&ctx, msg);
msg = (uint8_t*)msg + SKEIN1024_BLOCKSIZE_B;
length_b -= SKEIN1024_BLOCKSIZE;
}
skein1024_lastBlock(&ctx, msg, length_b);
skein1024_ctx2hash(dest, &ctx);
}
*/
/*
* param dest: r24:r25
* param outlength_b: r22:r23
* param msg: r20:r21
* param length_b: r16:r19
*/
LENGTH_B0 = 2
LENGTH_B1 = 3
LENGTH_B2 = 4
LENGTH_B3 = 5
DEST0 = 6
DEST1 = 7
MSG0 = 8
MSG1 = 9
CTX0 = 10
CTX1 = 11
.global skein1024
skein1024:
push_range 2, 11
stack_alloc_large 146
adiw r30, 1
movw CTX0, r30
movw DEST0, r24
movw MSG0, r20
movw LENGTH_B0, r16
movw LENGTH_B2, r18
/* call skein1024_init */
movw r24, r30
rcall skein1024_init
1: tst LENGTH_B2
brne 4f
tst LENGTH_B3
brne 4f
/* call skein1024_lastBlock */
movw r24, CTX0
movw r22, MSG0
movw r20, LENGTH_B0
rcall skein1024_lastBlock
/* call skein1024_ctx2hash */
movw r24, DEST0
movw r22, CTX0
rcall skein1024_ctx2hash
/* return */
stack_free_large2 146
pop_range 2, 11
ret
4: /* process preceeding blocks */
movw r24, CTX0
movw r22, MSG0
rcall skein1024_nextBlock
ldi r24, 128
add MSG0, r24
adc MSG0, r1
mov r24, LENGTH_B1
mov r25, LENGTH_B2
sbiw r24, 4
sbc LENGTH_B3, r1
mov LENGTH_B1, r24
mov LENGTH_B2, r25
rjmp 1b

View File

@ -186,7 +186,7 @@ skein256_ctx2hash:
/* main loop */
/* copy ubictx in uctx*/
movw r30, UCTX0
1: movw r30, UCTX0
movw r26, UBICTX0
ldi r24, 48
2: ld r25, X+

351
skein512_asm.S Normal file
View File

@ -0,0 +1,351 @@
/* skein512_asm.S */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* \author Daniel Otte
* \email daniel.otte@rub.de
* \date 2009-03-16
* \license GPLv3 or later
*/
#include "avr-asm-macros.S"
/******************************************************************************/
/*
void skein512_init(skein512_ctx_t* ctx, uint16_t outsize_b){
skein_config_t conf;
uint8_t null[UBI512_BLOCKSIZE_B];
memset(null, 0, UBI512_BLOCKSIZE_B);
memset(&conf, 0, sizeof(skein_config_t));
conf.schema[0] = 'S';
conf.schema[1] = 'H';
conf.schema[2] = 'A';
conf.schema[3] = '3';
conf.version = 1;
conf.out_length = outsize_b;
ctx->outsize_b = outsize_b;
ubi512_init(&(ctx->ubictx), null, UBI_TYPE_CFG);
ubi512_lastBlock(&(ctx->ubictx), &conf, 256);
ubi512_init(&(ctx->ubictx), ctx->ubictx.g, UBI_TYPE_MSG);
}
*/
/*
* param ctx: r24:r25
* param outsize_b: r22:r23
*/
UBICTX0 = 2
UBICTX1 = 3
CONF0 = 4
CONF1 = 5
.global skein512_init
skein512_init:
push_range 2, 5
stack_alloc_large 32+64-22 ; |<- 22 ->|
adiw r30, 1 ; | CONF (32) |
movw CONF0, r30 ; | null (64) |
movw r26, r24
st X+, r22
st X+, r23
movw UBICTX0, r26
ldi r24, 'S'
st Z+, r24
ldi r24, 'H'
st Z+, r24
ldi r24, 'A'
st Z+, r24
ldi r24, '3'
st Z+, r24
ldi r24, 1
st Z+, r24
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r22
st Z+, r23
ldi 24, 64
1: st Z+, r1
dec r24
brne 1b
/* call ubi512_init*/
sbiw r30, 63
sbiw r30, 1
movw r24, UBICTX0
movw r22, r30
ldi r20, 4
rcall ubi512_init
/* call ubi512_lastBlock*/
movw r24, UBICTX0
movw r22, CONF0
ldi r21, 1
clr r20
rcall ubi512_lastBlock
/* call ubi512_init*/
movw r24, UBICTX0
adiw r24, 16
movw r22, r24
movw r24, UBICTX0
ldi r20, 48
rcall ubi512_init
stack_free_large 32+64-22
pop_range 2, 5
ret
/******************************************************************************/
.global skein512_nextBlock
skein512_nextBlock:
adiw r24, 2
rjmp ubi512_nextBlock
/******************************************************************************/
.global skein512_lastBlock
skein512_lastBlock:
adiw r24, 2
rjmp ubi512_lastBlock
/******************************************************************************/
/*
void skein512_ctx2hash(void* dest, skein512_ctx_t* ctx){
ubi512_ctx_t uctx;
uint16_t outsize_b;
uint64_t counter=0;
uint8_t outbuffer[UBI512_BLOCKSIZE_B];
ubi512_init(&(ctx->ubictx), ctx->ubictx.g, UBI_TYPE_OUT);
outsize_b = ctx->outsize_b;
while(1){
memcpy(&uctx, &(ctx->ubictx), sizeof(ubi512_ctx_t));
ubi512_lastBlock(&uctx, &counter, 64);
ubi512_ctx2hash(outbuffer, &uctx);
if(outsize_b<=UBI512_BLOCKSIZE){
memcpy(dest, outbuffer, (ctx->outsize_b+7)/8);
break;
}else{
memcpy(dest, outbuffer, UBI512_BLOCKSIZE_B);
dest = (uint8_t*)dest + UBI512_BLOCKSIZE_B;
outsize_b -= UBI512_BLOCKSIZE;
counter++;
}
}
}
*/
/*
* param dest: r24:r25
* param ctx: r22:r23
*/
OUTSIZE_B0 = 16
OUTSIZE_B1 = 17
UCTX0 = 14
UCTX1 = 15
UBICTX0 = 12
UBICTX1 = 13
DEST0 = 10
DEST1 = 11
.global skein512_ctx2hash
skein512_ctx2hash:
push_range 10, 17
/* 80 || 8 || 64 */
stack_alloc_large 80+8+64 /* uctx || counter || outbuffer */
movw DEST0, r24
adiw r30, 1
movw UCTX0, r30
adiw r30, 63
adiw r30, 17
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
st Z+, r1
movw r26, 22
ld OUTSIZE_B0, X+
ld OUTSIZE_B1, X+
movw UBICTX0, r26
/* call ubi512_init */
movw r24, UBICTX0
adiw r24, 16
movw r22, r24
movw r24, UBICTX0
ldi r20, 63
rcall ubi512_init
/* main loop */
/* copy ubictx in uctx*/
1: movw r30, UCTX0
movw r26, UBICTX0
ldi r24, 80
2: ld r25, X+
st Z+, r25
dec r24
brne 2b
/* call ubi512_lastBlock */
movw r24, UCTX0
adiw r24, 63
adiw r24, 17
movw r22, r24
movw r24, UCTX0
clr r21
ldi r20, 64
rcall ubi512_lastBlock
/* copy uctx->g to outbuffer */
movw r26, UCTX0
adiw r26, 16
movw r30, UCTX0
adiw r30, 63
adiw r30, 17+8
ldi r24, 64
2: ld r25, X+
st Z+, r25
dec r24
brne 2b
/* compare outsize_b with 512*/
cpi OUTSIZE_B1, 3
brge 5f
cpi OUTSIZE_B1, 2
brlo 3f
tst OUTSIZE_B0
breq 3f
5: /* copy outbuffer to dest */
movw r30, DEST0
movw r26, UCTX0
adiw r26, 63
adiw r26, 17+8
ldi r24, 64
6: ld r25, X+
st Z+, r25
dec r24
brne 6b
/* store new dest */
movw DEST0, r26
/* adjust counter and outsize_b*/
subi OUTSIZE_B1, 2
movw r30, UCTX0
adiw r30, 63
adiw r30, 17
ldi r24, 1
ld r25, Z
add r25, r24
st Z+, r25
ldi r24, 7
6: ld r25, Z
adc r25, r1
st Z+, r25
dec r24
brne 6b
rjmp 1b
3: /* last iteraton */
movw r24, OUTSIZE_B0
adiw r24, 7
lsr r25
ror r24
lsr r25
ror r24
lsr r24
movw r30, DEST0
movw r26, UCTX0
adiw r26, 63
adiw r26, 17+8
tst r24
breq 8f
7: ld r25, X+
st Z+, r25
dec r24
brne 7b
8:
stack_free_large2 80+8+64
pop_range 10, 17
ret
/******************************************************************************/
/*
void skein512(void* dest, uint16_t outlength_b,const void* msg, uint32_t length_b){
skein512_ctx_t ctx;
skein512_init(&ctx, outlength_b);
while(length_b>SKEIN512_BLOCKSIZE){
skein512_nextBlock(&ctx, msg);
msg = (uint8_t*)msg + SKEIN512_BLOCKSIZE_B;
length_b -= SKEIN512_BLOCKSIZE;
}
skein512_lastBlock(&ctx, msg, length_b);
skein512_ctx2hash(dest, &ctx);
}
*/
/*
* param dest: r24:r25
* param outlength_b: r22:r23
* param msg: r20:r21
* param length_b: r16:r19
*/
LENGTH_B0 = 2
LENGTH_B1 = 3
LENGTH_B2 = 4
LENGTH_B3 = 5
DEST0 = 6
DEST1 = 7
MSG0 = 8
MSG1 = 9
CTX0 = 10
CTX1 = 11
.global skein512
skein512:
push_range 2, 11
stack_alloc_large 82
adiw r30, 1
movw CTX0, r30
movw DEST0, r24
movw MSG0, r20
movw LENGTH_B0, r16
movw LENGTH_B2, r18
/* call skein512_init */
movw r24, r30
rcall skein512_init
1: tst LENGTH_B2
brne 4f
tst LENGTH_B3
brne 4f
/* call skein512_lastBlock */
movw r24, CTX0
movw r22, MSG0
movw r20, LENGTH_B0
rcall skein512_lastBlock
/* call skein512_ctx2hash */
movw r24, DEST0
movw r22, CTX0
rcall skein512_ctx2hash
/* return */
stack_free_large 82
pop_range 2, 11
ret
4: /* process preceeding blocks */
movw r24, CTX0
movw r22, MSG0
rcall skein512_nextBlock
ldi r24, 64
add MSG0, r24
adc MSG0, r1
mov r24, LENGTH_B1
mov r25, LENGTH_B2
sbiw r24, 2
sbc LENGTH_B3, r1
mov LENGTH_B1, r24
mov LENGTH_B2, r25
rjmp 1b

View File

@ -116,15 +116,15 @@ void testrun_stdtest_threefish256(void){
memset(tweak, 0, 16);
cli_putstr_P(PSTR("\r\nkey: "));
cli_hexdump(key, 32);
cli_hexdump_block(key, 32, 4, 16);
cli_putstr_P(PSTR("\r\ntweak: "));
cli_hexdump(tweak, 16);
cli_hexdump_block(tweak, 16, 4, 16);
cli_putstr_P(PSTR("\r\nplain: "));
cli_hexdump(data, 32);
cli_hexdump_block(data, 32, 4, 16);
threefish256_init(key, tweak, &ctx);
threefish256_enc(data, &ctx);
cli_putstr_P(PSTR("\r\ncipher: "));
cli_hexdump(data, 32);
cli_hexdump_block(data, 32, 4, 16);
/* second test */
for(i=0; i<32; ++i){
key[i] = 0x10+i;
@ -133,16 +133,16 @@ void testrun_stdtest_threefish256(void){
for(i=0; i<16; ++i){
tweak[i] = i;
}
cli_putstr_P(PSTR("\r\n\r\nkey: "));
cli_hexdump(key, 32);
cli_putstr_P(PSTR("\r\nkey: "));
cli_hexdump_block(key, 32, 4, 16);
cli_putstr_P(PSTR("\r\ntweak: "));
cli_hexdump(tweak, 16);
cli_hexdump_block(tweak, 16, 4, 16);
cli_putstr_P(PSTR("\r\nplain: "));
cli_hexdump(data, 32);
cli_hexdump_block(data, 32, 4, 16);
threefish256_init(key, tweak, &ctx);
threefish256_enc(data, &ctx);
cli_putstr_P(PSTR("\r\ncipher: "));
cli_hexdump(data, 32);
cli_hexdump_block(data, 32, 4, 16);
}
void testrun_stdtest_threefish512(void){
@ -157,21 +157,17 @@ void testrun_stdtest_threefish512(void){
memset(tweak, 0, 16);
cli_putstr_P(PSTR("\r\nkey: "));
cli_hexdump(key, 32);
cli_hexdump_block(key, 32, 4, 16);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(key+32, 32);
cli_hexdump_block(key+32, 32, 4, 16);
cli_putstr_P(PSTR("\r\ntweak: "));
cli_hexdump(tweak, 16);
cli_hexdump_block(tweak, 16, 4, 16);
cli_putstr_P(PSTR("\r\nplain: "));
cli_hexdump(data, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+32, 32);
cli_hexdump_block(data, 64, 4, 16);
threefish512_init(key, tweak, &ctx);
threefish512_enc(data, &ctx);
cli_putstr_P(PSTR("\r\ncipher: "));
cli_hexdump(data, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+32, 32);
cli_hexdump_block(data, 64, 4, 16);
for(i=0; i<64; ++i){
key[i] = 0x10+i;
@ -180,22 +176,18 @@ void testrun_stdtest_threefish512(void){
for(i=0; i<16; ++i){
tweak[i] = i;
}
cli_putstr_P(PSTR("\r\n\r\nkey: "));
cli_hexdump(key, 32);
cli_putstr_P(PSTR("\r\nkey: "));
cli_hexdump_block(key, 32, 4, 16);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(key+32, 32);
cli_hexdump_block(key+32, 32, 4, 16);
cli_putstr_P(PSTR("\r\ntweak: "));
cli_hexdump(tweak, 16);
cli_hexdump_block(tweak, 16, 4, 16);
cli_putstr_P(PSTR("\r\nplain: "));
cli_hexdump(data, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+32, 32);
cli_hexdump_block(data, 64, 4, 16);
threefish512_init(key, tweak, &ctx);
threefish512_enc(data, &ctx);
cli_putstr_P(PSTR("\r\ncipher: "));
cli_hexdump(data, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+32, 32);
cli_hexdump_block(data, 64, 4, 16);
}
void testrun_stdtest_threefish1024(void){
@ -210,33 +202,15 @@ void testrun_stdtest_threefish1024(void){
memset(tweak, 0, 16);
cli_putstr_P(PSTR("\r\nkey: "));
cli_hexdump(key, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(key+32, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(key+64, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(key+96, 32);
cli_hexdump_block(key, 128, 4, 16);
cli_putstr_P(PSTR("\r\ntweak: "));
cli_hexdump(tweak, 16);
cli_hexdump_block(tweak, 16, 4, 16);
cli_putstr_P(PSTR("\r\nplain: "));
cli_hexdump(data, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+32, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+64, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+96, 32);
cli_hexdump_block(data, 128, 4, 16);
threefish1024_init(key, tweak, &ctx);
threefish1024_enc(data, &ctx);
cli_putstr_P(PSTR("\r\ncipher: "));
cli_hexdump(data, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+32, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+64, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+96, 32);
cli_hexdump_block(data, 128, 4, 16);
for(i=0; i<128; ++i){
key[i] = 0x10+i;
@ -245,34 +219,16 @@ void testrun_stdtest_threefish1024(void){
for(i=0; i<16; ++i){
tweak[i] = i;
}
cli_putstr_P(PSTR("\r\n\r\nkey: "));
cli_hexdump(key, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(key+32, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(key+64, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(key+96, 32);
cli_putstr_P(PSTR("\r\nkey: "));
cli_hexdump_block(key, 128, 4, 16);
cli_putstr_P(PSTR("\r\ntweak: "));
cli_hexdump(tweak, 16);
cli_hexdump_block(tweak, 16, 4, 16);
cli_putstr_P(PSTR("\r\nplain: "));
cli_hexdump(data, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+32, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+64, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+96, 32);
cli_hexdump_block(data, 128, 4, 16);
threefish1024_init(key, tweak, &ctx);
threefish1024_enc(data, &ctx);
cli_putstr_P(PSTR("\r\ncipher: "));
cli_hexdump(data, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+32, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+64, 32);
cli_putstr_P(PSTR("\r\n "));
cli_hexdump(data+96, 32);
cli_hexdump_block(data, 128, 4, 16);
}

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_224.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = FDFB34297DDE24BDB76920CF6292121FB1D3C247CBA3B5DD76787762

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_256.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = A1345CAC7213FF9FCEF4DF3105A729A9BE0EE899E0BD2EF14720E9533F5D5B06

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_384.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = 896FE24B39B9B234DE300A9C05902B410465F62BF20F97A8123130BEF6993F3D6CE04100FC0A5482254D29EAB245C145

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_512.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = A8BCC959B92E9689F403AFF39810B949F68AB50B82D69A6721C91F4A2570305FF88F058838D31B2DFAC0B69E0D65DBEA14B559950ECDE92943EC1A2E9513323D

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_768.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = 3A652B5068F620C4A865F4BD87485C3084B6682D5D40D020693CE72245EE53565956158E653FA3E5738A45F991C5330AD9422C192698430880144C5107325429BFB27747C9E23300F2EB4A9A97DBBC01AF71B607F7475D5958D29D1CB2DD0C47

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,305 @@
# MonteCarlo_224.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = A139D31CCFCED05E23FEAEF59D5BC0C572DF886B805539A82063E94A
j = 1
MD = 7EC47475EE6E075C1C85E4192B820296FA37D61DA218CBDD2A63F0AE
j = 2
MD = 37E96AD0CADF7FB766D5B69A87AE04184EC51C691B8E2CA46C778B8E
j = 3
MD = 4640389506A32592253CFC5401E8E3FA44925029E239B0BECCDAE095
j = 4
MD = 00A1749D39615F13A325FA853F5D90FD6CE2F3BE938CB93F2DFA833C
j = 5
MD = 12517AF6EA752971C7D794F8411EB4FCF206E78981E95925D6D9611D
j = 6
MD = E3E505A6687AF2B5379390C9CFD951AB9FD82C0FA3CC1C5B165900DD
j = 7
MD = 363F6903360AD2EFA81BBFB7C0A88AB3DF0B6898AC308F1E4144B8CC
j = 8
MD = 822D1289408DA4C0F237BC1482C674D7FB55FC6B3912CA8C7BBE923B
j = 9
MD = E5818327E37DD87F101D31440A46C04BEE68447C649172C3DABCB406
j = 10
MD = 0EFA6C3B861E9796D52C1CF736FACE3CD681B14A5F569A82176C5FE4
j = 11
MD = A1A90E6FDC6B33217E7E83FB699B6440E11706B411246190DF86E3FD
j = 12
MD = 16CE4536A37C3CBE7145B09489DD541D75F2A4CF9042EE5420EAA76D
j = 13
MD = E2D5F6873C276C52BE3510ABEB06373690313156853E44F0C998033A
j = 14
MD = 8B78048AD1AD2799CAF8A3F66C726F6BC4FEC3ADBCD50C639C6D8F8A
j = 15
MD = 5B715DC2BA541AF4C12B04E38F3536FE0062209003FCAAC87E65EF49
j = 16
MD = E56B28078F1C5083142B9E8C0B16F83953A11F324527DAAC44004443
j = 17
MD = EA963BF3602CDE5F6CF7416E6BB31241144207379709A71F6627C8F6
j = 18
MD = 9E04553F5C2C4FB0FD0A81955C11631D041BE1850DF74F9151B5473C
j = 19
MD = 0C7BDEEF69D713C0FE3C0FE0B472CB4DF853598432570A78EBFD4C3E
j = 20
MD = DB658D3CDFDD81EC6912024DDD38EF6659F68234E43AD0516E469ADA
j = 21
MD = AD6D7E63A3666FF5AC4346DBD3C39BBA514593748797632D6830C477
j = 22
MD = 78C974554166A6EBB4971B75E5D22FECE7FFC72EE0F0171A2CE0ED80
j = 23
MD = 24526FA4C19844929C23D7F2DE090C9B7B50F5E66A2E14F70D4E74C2
j = 24
MD = F9499F144C7AC3662517DED95EDAC8095202CE5194431D47AB55E8EB
j = 25
MD = 5E327FE4E5611DE3E44DBD96D99AA2A100956589377E719365380E07
j = 26
MD = 5A39DBBA87619A162CA532D40BAE3BAB986D75625275F9E81DF72202
j = 27
MD = 99DD12DB3E4931BDF18AE179583CBBA8B0B0DC65533177689155529D
j = 28
MD = 1755888202819D06FF4FB0108FD5575468EDDA051BDD9542F470A4CF
j = 29
MD = 579D98E4BA9CA915CAB876E9FDDFA4952B259DB7BA2967FC338E08C9
j = 30
MD = 8C32B95F44BBDB4B690498BC6B2DD7921671C72182EEC59929751666
j = 31
MD = 8B32F7359E60BA20A4AFF153A5D666F87220152E1A961D255E325C88
j = 32
MD = FAF67D84F3F7B8ACE2836C71F6D919D5F93BBA0C6D77631F24601EDF
j = 33
MD = 20BA1A59FCC10F255C1E5136E02E320E9AF1C4E2B264294B3359F55F
j = 34
MD = 0C6504549D57645735FB2CF401C4D7B662BE27797178774D3202972F
j = 35
MD = A8FC28FFCE2A72A3F5FD8E5BBB2E1AFA6C3C1BEED8DE9DF022A0507C
j = 36
MD = 411B79E912885FF7E53592651CABB2402560E99031A329C7347B2865
j = 37
MD = E2E12C23A08075B8FB0B0D18D9A5A64FEAFC120C209C2612B1866D3D
j = 38
MD = 45CAD0468B1302BEBE580670034301AEC02A52AD8864A531CE6D6A8D
j = 39
MD = D59863B1B9B02951C90D4F0885FB56A180BBE50255337028F57D72E9
j = 40
MD = 962936272AF522A81A8B6F7D4324CA3AD02CC752A3C23584B10774FB
j = 41
MD = 1BA92C5CF1D52B564BBE7B7851F262CEC49075C251730FBE9472E76A
j = 42
MD = C18655132EDF72A21E97DC216C4D98A144A2E39A1AFABB5D26954870
j = 43
MD = BABAFE42E87D0C2C81AD03F78D528977572F10DD1BA8892492A4211D
j = 44
MD = F8A50FCD90E85E8DE0F8593CAEED8E997C9FFF7F4E2F03E13779555C
j = 45
MD = CE16B54BED754EB2E783226919FD54192E915D29A5ADEF4BE019C6CA
j = 46
MD = 4D0A6416AB7481C5847FB3DF9D0BADB1E6821D032A8876AF40FE0F11
j = 47
MD = D6A7E617A6ABFA7D6DC8917D2437EB1F4D1CC7EBFF7FE38E21058A55
j = 48
MD = DB2414EE1AB5F92FFD5B15C4ACF28F68550B417B850D1A372AEC888D
j = 49
MD = A2BF0C432DEF04EF772C246B913DCD9121E43BA5E94F0198D825961F
j = 50
MD = 20487B6D2C7BFE7096E760AB53BC6A311BFFEF5AF61E0876782FF45F
j = 51
MD = 4C7EB5665AC5C23E867C52EC80E0EA704791800AD95B0535808FDA64
j = 52
MD = CB5F23FEF7E9C4A17632151199F974F9C5651653C6BB6F8C5252AC62
j = 53
MD = 459D2DEE09FCC47317212F2F145F9F5BA82494025E9545E04D42A033
j = 54
MD = 4EFEFCBA5456E34B2DCB52C2ADD78188B32BCED52843E86208FC2410
j = 55
MD = BC2EA428A05E0C68AA3F2E3B0AECDEC18B5AD41EB964738D6B16ACEF
j = 56
MD = 729BCD4DDFBDA23C7EF3C0D633BB2E9265FB17A1B610DCD308F7E6CA
j = 57
MD = D6D8F37797E0C53A85B689F94EA1626AB50CA97F5DE47F39CF420BD9
j = 58
MD = 66ED266706BD0E438FD9470B1067E280653F3B0A484B2D7D6C49C560
j = 59
MD = 174B95F6A76125BE672E753D44CE5C42EA84FD4056F9A607B68BC72B
j = 60
MD = 18AF875BEA3FCCF93A46FA96789F19A07943C5498B6F61AE87CC2A74
j = 61
MD = A1B543EBCCF6FC7F5174866804759AE484A485C00D594750F36685BE
j = 62
MD = D50D0C51DB50544663820D2C571A4DDC081A47FD4A4258AD24DB767F
j = 63
MD = 4C30A0EC7907E2317B65F81DFE89FBB4139448E5565F2EA630B3E669
j = 64
MD = 98269E501B6018D79F60AF1127387BCE5FDD1C47DE86A0F1020E75EF
j = 65
MD = A0101F6CABA0A7D471C6D1A28DFAF070B950F10C88391F694C5C008F
j = 66
MD = C9EFCCA28CA3743DC7C987DE8A1A6DB05AB582668AE7134B7D575DE0
j = 67
MD = 6EEB7BCF645600199E95FD609910BD298463E94EBC333582940F2B7C
j = 68
MD = 83B9735B4061F77484CCAFC05CF08950921032453DCD6B7390AE161F
j = 69
MD = 1E7A32AC034A0F3DF92F7338607F2863651AA138CA85040E48B4B7FE
j = 70
MD = 39C6DFEF72EF317BCA604D9724EA75B24C45E79BCE3E07BEBF1B41BB
j = 71
MD = 4648A849D3D6B7C94B0BC96484145B0EE856B5312E8BC32B06D12471
j = 72
MD = 2D04D95C9E23FFD7EFAE5FB02C9DDEC45863AF749C421DF641738B3D
j = 73
MD = B3A98DB405803FD248D64E41D6BDAD70179F82CE53804E39A22EE97D
j = 74
MD = B4CFCEEE08CBB5600A174C073E51EA1A4CE9A74448CAE71DAE1A2AC1
j = 75
MD = 933FF1B91411539AAAA42B5E21FFB9369E1D91E238A16DBB6DD560C7
j = 76
MD = 7415D5FD01E531EC5A851FFFC1300F34FA52443D58048C993F2867E3
j = 77
MD = C869F5FA25DA2F7E3E6816D5DF4A1FD4132C978813EF08EA393AF8B6
j = 78
MD = 74228ECAF790504397892DE6525F630CAA39298CE16E0A6316CBB326
j = 79
MD = FA97A86009D1420B5A766F6CA4865A1BD68C91F0AD14511AC447E6B6
j = 80
MD = D6E032780494017B2305B57A6A61942946DFCB12B8EC29DF468D517B
j = 81
MD = C275CB45E08065BFDB10E5581EEC141ACF8B1234A0A747C55B1881AD
j = 82
MD = 87CEB24F07E8A41C59F65A1F2135BEB7D1A578F9351E903538281C8B
j = 83
MD = 8BCB3D18E11ECD15199AE134DBBA73AA8245378841DF7A20AA92C2E8
j = 84
MD = 32559EC289647F8F8217325830D135459F83C34E7376834717EF1B65
j = 85
MD = F1AA12711D690C5BE3B72661DC8EDA6302A9BB30307ABFF379F43C35
j = 86
MD = 7235F7C0DC763DD0C154D460928663AEDA31DEAD12C61207DFEF1666
j = 87
MD = D9EC64429A961270312BB7B5955B6DC5806559AE50D69DC584B9D801
j = 88
MD = A65C9C6718713B120BB5539E8794C640F255D946438C3226E04F6A8F
j = 89
MD = 5ED977872EED1FFEBB7D9B2394B5448A2369A7C00B3B9937B519A193
j = 90
MD = 09964042C3C59FEABF6D4048FCBBFEDF7A0414EB8CE0F5728CFCF1A6
j = 91
MD = D858BA46041F095C76ED1B08423DC0D2F52416EAC75B5B27FE564380
j = 92
MD = ECD48B38603701A17C72B1ACF277D85B7D638233D3DAD0D10BDF221F
j = 93
MD = 7A1755277462D0709327CB9AC7B7EF8E41D94BBCF9384C0E40027552
j = 94
MD = E995C661AD8B35E273D8BFC10E55761ECB4E5D4DB28824286A36FCA3
j = 95
MD = 30088854C41B4267E8E4149F6E3C3A1FC10BDE613B7692942AF67E5A
j = 96
MD = B31F3E1E301FFC5A9A6E68D93F0462C6A1C6DE38E1CE20E24E12A1E4
j = 97
MD = 8BDEC750455F0EFD8BD8EFCAFBDDE0FE45650965B9142CD1EF5E42FF
j = 98
MD = 7C6E4BA105A77FFC4CAA5DF86F50AA17DEA40C6167C013B7CF0E5677
j = 99
MD = E4065291FB3F9FC513FF3E7E6D44A474426AC9080A00F71D57A5D347

View File

@ -0,0 +1,305 @@
# MonteCarlo_256.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = 31068E0CE7302ADA0EC5EB00A5AABDC003E3022324659BDB13B7F4944A1CF471
j = 1
MD = 5E141BDC3BABD12A21F9BD6EDA5E35D54BBB0C298B58964E78A4DAEB4EA4A927
j = 2
MD = 5D9E5184DE7CBFA6719E0B507BC206238E727430B16403631ECDBEC4F6C678E5
j = 3
MD = A34466CECA9A4086C451A2E2A559DA3815FF82D33BD6EEFB9F84BB6384372CBD
j = 4
MD = 956869B3D0047CA10C16F0B1B6691B888FE5798873CE7DFC598E9E01A4138C26
j = 5
MD = 994847B3BF7A0936867F475B84B7DE27C7213D797DC49817E8508FFBD4F8CB35
j = 6
MD = E03DDFC2B1C985F71E25E890768E8BBAEA9006DEDEC70900C350C81A859E070C
j = 7
MD = 92072480478F987FCF37BC0D55ED5436949B24F0AC0EA4265BE060906675206D
j = 8
MD = C7D32224C92F1C4AA043F3EC72C85680B04B919FE672733D190D0D036B443441
j = 9
MD = AB3818984E92EA9302EF76B12C18D5FEDF4AE7A7AF0D58257D7F662AFAC0FD14
j = 10
MD = F2AF3AF3DEAE067B32E53C61585AFD10CE9C5302ECEAB2C82FC350FFD2202594
j = 11
MD = 250E042E1D8E75A99E22F1C875B0D0118B0F569A35B19D79CA6BC9E4B9B45DAB
j = 12
MD = 52A11160C9F27C10F3954ABC87AB9C1E225F7278956401E8A451DE528E63F75A
j = 13
MD = 8F793DD724608B1416E1E02C278B210A03F844D3DF608B61C172FD0F62754A70
j = 14
MD = 32E13ADF0BE71EEB2BF8EE8A12B068BD6AB77DDFF0679D3454E9A8A0E2E84864
j = 15
MD = 616DCB4020B29784838C3652E377F796D7D1256056C17744F81C6AEB67EFD6D9
j = 16
MD = 28D3A7C9AD956507AE17CD494EB4D1AD716910441E88A327A646179A10D78FD8
j = 17
MD = CDCD17A08121D66A344D30F7FF47C0AA80458D3D190446C3DEE8E6FEAEBF7E70
j = 18
MD = 1F6FF7F7617D84361568532CD7538DC0137C519D7734EA5CE30644B15957F059
j = 19
MD = 93F1327940B4DA1B855111482024B04BD7CF213B2468B142C3B8E849D99FD442
j = 20
MD = F649DD1E064D85929CE0C97BAD0B965E5428DD8984516D06CD89620D7CFB73DA
j = 21
MD = 5EF80B8EFBF9CD82232AFD6FBEBF40B279621E880F5ED8D2F8624CE807136D64
j = 22
MD = 6256765FF72BF8A40F66DE3FCE9D79E55D79C37B477B873CE6C893BAA674AF24
j = 23
MD = A068157510365F530009AEBE56394FF27852BAF0C3233B94FA1E7DBBB399681D
j = 24
MD = 9A6639482A478F63D0D7511F16CCCA135EA325D3C60C5358D9DF9D280D6294EA
j = 25
MD = 49FF3BE3609EFD3E75569D445B435B35548D9B22BEAD07AD645D7DBFA0608306
j = 26
MD = 5CE4E88979137249A552125A23644A9C018317E2C1013C9AF519CC851A25797A
j = 27
MD = 72FE72049E86B46D0F1132ACE8F10D85359DE345F8A6D3A1B69D51574268CF0A
j = 28
MD = 7B60BBCBF5F31D2BD234C9E9B226A09A45B308CE555EDDBAAFACED2BBEEB498F
j = 29
MD = B0B75629A2BB757387B378A4EE513360A78B9423230BF5090266EC67F8EB7011
j = 30
MD = 8813A9AB6A6D1824BC4FC58C9619E6330EEACCB5E52CE0A3844DB091F63DA4E6
j = 31
MD = F4D5D6AD0EED4F3D2A1F42745A1AA94994EF5BF7502ED4B908D519CAC6DF347C
j = 32
MD = 72D3071BB161C2ABF82EFAAAE3C3C5CEE055656BA5BB65BEF4E1EF1EC8C4F81E
j = 33
MD = DE54DCAAC04A4271A9327A6CD5D59890036884C2A0C3B0B6C04441FFE5A6C102
j = 34
MD = 1BD738E60E28A39E03E5D72310E299D131A6D5329AEB0444C262E4B4DBB5B446
j = 35
MD = F4E7F34D31107BDBB32C1D12C840BFFB039B4B790B69ACD83331FF8C3AFA4675
j = 36
MD = 27D4C0E798ABE7F369221FDC534F11BFD19CC6173E051FF0CA058330E6A9FFED
j = 37
MD = F5F852D49CA4313FED9C6A2A77B7469104F806709F72C69D7291EF290FF2C039
j = 38
MD = F69A0C7C04CBACA7244442B153A03C61495A0D01A15503F09E840A5E5E8B4FCD
j = 39
MD = 581C944B8B6283BF1350D3835AA703CEEC5B64EFA84A519FC2362B8F91758E37
j = 40
MD = CF5A204835699C57504897DA8B60A5840CE7BCBDB2404B8B9522EF386D265A70
j = 41
MD = C5527DFDD7A482B700D9EA23C54EC25579ED44ACFBE4909A0BF543569F910EED
j = 42
MD = AEE5E6AFE191A7FCA5E2DAB08EC59C2F94808663C882360CE9028ACDBDE163CB
j = 43
MD = 5D88DEB2C65F9ED8BF9DEEF6636C1346F0FF07C3B08976C66A71E58A42A78240
j = 44
MD = CF0F6A09BB2C20F0192271B86326EC77BA45FFFAC131243B05741D68C9913660
j = 45
MD = 946D7D2EE80CC563D1BCEEE8AB8D41095BB8958D346330A155DC7AE9E0860C46
j = 46
MD = 21C040062EBD304269D3FA2E59F9A46D6D7472FF9ACBDB269F7FF84FA006DD42
j = 47
MD = 41917149B7C677F0203AFB55F6D44BD79185FB68A7DB8BBAC490EB388A0525C9
j = 48
MD = F344377FC55976FD621E8A401299D6B2174101B12F86B16A30F9F7B978FCEA76
j = 49
MD = EF4F85D2D2DEFCDD6A62CDCB9A558A6755277A56D9B71B729474C4582E261A3E
j = 50
MD = 9048F11C1365567520EBEB2D24CAF3769041801AD57D5251947BBA48F947710A
j = 51
MD = 72F2C922D9D4E6201605C384C7C1381320F5253AEB3059731B4614E8508D2911
j = 52
MD = A2C53942279578D8159ED380FB34FB38D4C60523B5B2290D9447290FC1BBD6BC
j = 53
MD = D1B8D09D8399B7E9A69906F3A3BD511B2B63B4E23C0B9EB1AAF4B22200727456
j = 54
MD = 20018577D062AA5F15C4A78793FD3D4A5B75BA8FB9EEBAC6763F9A2A1E55C7D0
j = 55
MD = 031D2416B307EAFF3CA8B72E7B014CF2A17AE81D53A77A21257A9601052BD088
j = 56
MD = 6831D1194733D686BA399E0BB3889CF708276237D4A6124B17D07F7B8E656C25
j = 57
MD = BBBB309A72D43A3001D6E4A222D3E9F195F309229F619949FCBDBD740EFBB154
j = 58
MD = F20A61BD712F9640F604D27E5440E0C1D4E3CB4407A09996673D478269FFFED4
j = 59
MD = D8C4F86C8399DE355F1A62AC6F834F8B215A558E4BE786B690421A7EF3A177BC
j = 60
MD = DCC93633E7F37A8DF39430709515AA46CAD886A7A29D3A3B0E646020E7B9C1EF
j = 61
MD = A2B55F7E6F9E7A9A5A87467FE41DDCA6937B4019EACD5E2F630EE8EECC1BCF96
j = 62
MD = 744DEA34A1DCEE59C97F62DE13DF717F37535EA3DC7AD630B3B64BEA36205445
j = 63
MD = A26E54C2FB0AC72BF2F5AC5CC67C29F67F28BA1316487E4F52B2F608B43DCC06
j = 64
MD = C46175D30A0D44B36F3DA563BFA544D2F51E2CF67A8FAB319DDE6C202721F31A
j = 65
MD = 8F8F1D54DB90186AAC70B3A2AFCAB1FBEAC761F666A77BD0DDE2C8D18EEBF895
j = 66
MD = FF96F751BDA3919D878D5A4C8273A4B145CBEC87A06E07B29AD6AC622BD094F3
j = 67
MD = 3A7E722661B2B2F1471ACAE374906CD14CE04FA45B2009442E8DCC460D4ED258
j = 68
MD = CB80D4639598C49D6C4DE3EF9FAF245BC06FAD48F5A3CBE00FB73D0DAB4E7AC8
j = 69
MD = 3AFD7FAD6A5B52C668E615E452D308CB6E44663C710B85C01667858173F6B164
j = 70
MD = 443580DE91426DB58F84E4BA5ECC967DDCDAAE897E390D66964E7539E155C888
j = 71
MD = 636D9155403FF2E4ECC69D5FB54D4D3E3F9F41AD3933A53EE5F0C631A4229AA3
j = 72
MD = 0DF173BE1F0F09CD74E57424606120AFD52239D702F79DC77460823C2B9F0920
j = 73
MD = 79FA8275A74E5074FFF18432C7C4674D0B73DF9D12B33BCBE9C998CE80EA55EA
j = 74
MD = DFA03B97DF848C6D5863E750E72E109222336B67861A5E9E9CB3216CD65F3039
j = 75
MD = E855A9C013457837702D8C98865BCC52D34E1398E762EB6CB2FFD42EC78C7568
j = 76
MD = E9D82077F77A633679A6D9E5515176AF2A83D926A17390058264591B9E696436
j = 77
MD = 2A2BAFF97424CCC1F8EFE6B7625F10E096F7709A3CDDBF1074361429A50FB64D
j = 78
MD = 890D2D6F7D025C591CBECB0B42759B150864A55FC993679EF6B4C60F6C159D2E
j = 79
MD = FE2109F8FA8337562C235F106A42E1AC2CD464711038DE706D6BF2A6CE773A07
j = 80
MD = D496DC61B0205FB38F05B17BE7F491CD70116B7385AC79A3F275FBF0ED17029E
j = 81
MD = 600FA4F0B6926AEBB7B509D8ACC896D8463768C290AF242708F52B7FB0437582
j = 82
MD = 6B826D6960673892FD2C00044F6D86CC79AAB5872CEDFC95074E288097EFBC1B
j = 83
MD = 23208A26EE7C558CDE2075105C156EB3CF2106163F79D898F0716B46F6CC2844
j = 84
MD = 3880CAD0AB01CBE19E8ECD85BECDF1D6C644501C9F5F9F3B52D2E5C23CEDCFD6
j = 85
MD = ABEDFAB22163F332CFA3BCA4EDF9DE8E896A0916B3B52A075A8572CA602CA2E7
j = 86
MD = 2AF6DF9E6E8E3C9725BF05DA7138A5C9CA42785A6285CD1D7B47D8D88714C327
j = 87
MD = D726231B10E201284B5740156859AE10483B6CA569AD4517633994B05785266E
j = 88
MD = 73D635CA8368DE4B429A3E4E1B5FBF1EBF29ABEA4EF9B59D3B2DF491C0616F58
j = 89
MD = 7752FC79A57AC830E5B45EF82F2FA4521A6855111D98CAC37B85F9F292EBB149
j = 90
MD = A22CC871F0467B125E736851A5B9DA8416E8B1597CAB84419E433E28D73F4B97
j = 91
MD = 0409FE4801722A0D095F1ED59A0EAC185259257868E8EEB166D4B6573D4571CF
j = 92
MD = 54D7C01780C3A5340D731E83D7B128AF13808F352766B2C9C9C7853097F8EADB
j = 93
MD = C7E879A973A72631F78C10BC74A44478F7B873431B6C0ACDFE93C71438B102CE
j = 94
MD = BC5BF239B22F4F83281795F462CEB03B3DCE1A377F23F6A8FF8A418FBF4DDCA6
j = 95
MD = 3EE3ED2422274E2C9203C004AC577AA702EBE9A5385E5DC4AF40522BB038CF87
j = 96
MD = 858798B8919AA9AC3F0875667DDACF7E51072B9ABD93F4F4AEB211F75D0CB653
j = 97
MD = 45F65B81C0FC93A8E25BACE16AA4FE9E344FFBA0B56E7B57F65D9252D4551D9B
j = 98
MD = 14944FB3348E2FD05C6C126ECE7A25D825CADB283185EF80FB6C0C9356C467BB
j = 99
MD = 547BF07AC2069877E13240650E5C866D0E4CB9C33319AA4A0B95A66229C89BE3

View File

@ -0,0 +1,305 @@
# MonteCarlo_384.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = F5E395712FF0F17B053C7E030281883C7C8BDEF12F91F83C987376447A9A76D5744C7CE8CBE07FA33E510FA3E1DF3978
j = 1
MD = 74B15655B1143726AB11F68F3CD807FADF99A07674EA030641208FDD8C949A9195757D82E92FAF7E057C49BDC9222AD0
j = 2
MD = 4283882B9CF6BF777611F684978A6B8C235F97671D4E1DD8322B71E27EFEB9FF604C3CC2AC479CD00ED6EAEA920E62D1
j = 3
MD = AEA086E27CC47E39ABA0028EB19F6A2F19040B6737508B7726B8EF2366D775641E64CB1CD2D8F3F66A5A0E126FA2A842
j = 4
MD = EC27B343618EAB0B0C1967FAE35FB7B7EC3569F23E033CDE649894F230820E76EE90DE22433B9C87E41F3F33A4E07297
j = 5
MD = 15F1D50C99EFD4F88C510DE6182526FAD79FC459E1F276D20B3BD4ECE19F114374DE2563D10865480552E8A9BB9C198A
j = 6
MD = B1392F74765D8AAEE8E4BC36F104CB5068728B61211DB4442F13A55F9EBDAAD94E23E6EB32C32411E2948D6C521B5707
j = 7
MD = EFE036268A32A39B848D00C64A7C7FC7B80396B23015D0EBEF68376A0F97C0B920E86C263C663089A81C8A1273913507
j = 8
MD = DD78B74FE6E6272C60339FA5E1496DE3366D8FD508954B582BC82FCAC262F3EDCDFF369792AA9F5B41983B5861A1C874
j = 9
MD = 5FC8CBE634667416C278B1DDC9F46C6D888D65CC59E6F1B5FC4CDB529FD4AE1EF837E9B40B13A18468964976666FFE51
j = 10
MD = 3BBF09A292AB04333D31C3379809C92879AA8C718544FCB85D9C37455D701A1CBB0C95491B19E3EB1E93207DE6ED5FCB
j = 11
MD = CF4FC053082A74701A26818244D3C1457E0572F7FC2E49504C4A3C9987E9B3A4C98351E67C30893AD0BF7C39BB3B2AC9
j = 12
MD = 9E5658527BC5BD9C09D585B02366A6E585561CED9B5D903BB2218BD8A7710962BF21ADA597CCBA2C0000403400073EC0
j = 13
MD = 394400F9AD12F961832DE31BCF9613DE53650BCF2F295257C4F256AEFFDE3A276EDD5FB7472CFEF68838DE73D765D6BD
j = 14
MD = 7DD26C050B2F12EF6A78DE5BA8CC49DA384068A5E747DD8359C13F6A4465BD96F8413C28730BBCA2F766BB05BD62CB54
j = 15
MD = 46CC87D18F5ADB8601603934B0D60C0F3D3F6B270F4354C152C8A1C83C836E3959D4D7B0CB774DACD14C00896E19AE01
j = 16
MD = D03A281F72C42A57FE11E1A5214D0E264BE7E892A64DA50252839ECF58A0C90E73E3A38FE48E127FC919205AE2BD4BD4
j = 17
MD = 6BB3AC89FAD1BE1CF5000F77B4C3E3F5E4E4705B9125C192BC7DDBA645E9278304C2822DCDC59C02F06E62BCA1801103
j = 18
MD = A3964D2A0FB1D41FDCA2BFFC22BDEF574491FCAC81D6DC7210F433CA66E20BEDFD4CD52925C2E1F019A76E0627F4874F
j = 19
MD = 6C6681BFFE8E80330B242CBD34B8A132E6D0D560539D1094F4115BD8230F5E2744E2E4626B76AD6E8AFD2E9A54C34862
j = 20
MD = AF83BE48BA31E08D85ABB6C867B4A99BDE42C2A0B2BCE5B4D71864E11D331B793F2C148CD52819F49422B1A1E7B8E499
j = 21
MD = 7A4B53FF816766D215BA022A0AE4535307235F587921C27174A0BBE9FBB914E53B1D8D71B45D2ED25ED35FF3E9D7A6B9
j = 22
MD = 7544940B958A72C2903560B380A720C1BAD017863D4D64A46D6D5166BB1B502A20C9C0DA90AB4EA8FA983AFF58BC2B52
j = 23
MD = C33B197512D2872A8DD6B06E1B065E8B42E272B778EEFE91ED2DF571E9885A2A89E70A8448F7D90B9F8620711F86B688
j = 24
MD = B43E8FFBD80D35A1F6619565C838F934D6496AA9C3B80CEE59A480B458F39706250FB9417D7107F9859AE5EF297E763B
j = 25
MD = 45374C4A6B837FD362675AB58FEC260BB304058CAE24DF2FD372C1030B5BA5F9085BB035523AD463E8FDE12904D95CFA
j = 26
MD = C6F53D3B3F815B2FB5CA64A10F2AE320BF999ADDFFCF334CD12B959F6CF8F2FDBD46CF137384B59D8DAC2D6B212A594B
j = 27
MD = A5E8F73023C1522021BA0B3CB9A2C8929EC552D7F240BD4E8023CAEBF235D523A99183736C210EFB84FDAC7B9237B4B1
j = 28
MD = FC67F4281632735ECAF12E618BAA79740223739DC5E828B3A8541F3AA1CFA0B4428ACA01A5C779AE69FF4E7DAB061E72
j = 29
MD = 0F72FA46D3C98A26C8B2B567A87BC356D7F009E42D42A7EBE61376017E4D94EBFE7639ECE9A9A4D4F40B2BACBCAC1E6D
j = 30
MD = CE5D2F58F480C20F8BA5ADA1656262E86C8F902E2E633E1D5C1C7BBC83112C96EA104DCB14F2EA7CC4F23141070BD1CF
j = 31
MD = 1DC9C769B36C61C1384045643001705EE165776408AAC42B75173A52EE0DD4638C83B8EBE0E8D620C74384C0C89CC822
j = 32
MD = A2C61745F79ECFC73B269BC616885E439C637384EA86B6F50CFE32C3871554E08414F4696BF6D7F6B5356B44CA6D2990
j = 33
MD = 4D21008ED773A971E0238D7367F1C5FCEBF85430759581604531034CAC34C69076FEFDC5224D2B45E3CFBC8385E8D124
j = 34
MD = 10AA1644CBA6D2E32323005B517EDA11EDCA53507E25733D30D65DFDEFBEF9D579A7C007A7D2B158E720D542C44E51EE
j = 35
MD = C408FDF92005A00116DF87C00FED461252CAC31913A78A383A0379DBB6E3B0D61DA6D0B953D0DF8E60ADE6BDC2CEBB16
j = 36
MD = 605955011137F473601F3ACC9936E0416F8FAABAD5B13270BE0B420A076AC404A3FC33E27AE8D7B91DCB0C5DB9112090
j = 37
MD = 176A4FF062E00A133483D007E17675C15C272BEEE9731300209C29938D076415306F340C4BC71D032FF0A622C0E4B76A
j = 38
MD = F045C5022FE83245D4524BDA950FA48DFF9DC4DB70E03428EFDA437CE9EB4344648160CC427B907AD50D342D341BC14E
j = 39
MD = 781FDF47F8BAD47937BEBC14940D34208EB1562EDB6218DC943EAFD7BD69CC3A91C7BEB2D8EDCCD8B3FA596C3E530F8A
j = 40
MD = 7A9899B2BD59627AF1A11BFAA255EC7043BAA481A193F4918DC26732AE081AC0E12CEDBFCCFD7B24C52CADCE3DB89D9C
j = 41
MD = 4A374111FDB35FB280C61DB76B2EEED11362CD956CCD1109DD326DB0E022F33F23FBF50B62EA4A5E6284CF7D3DAE7529
j = 42
MD = E23576178AFA058F601B9DC8EA42372AA81D1DB976EA1EF5062AF8B00B88902E8D13D27986549E84C5A89C5EFC163969
j = 43
MD = 607C555006CCFD9C1FB747F1BB0B661F852AA5B74C37F60E0968B85759DCC2EA2468761140F65F3BD565F5E103DEDC87
j = 44
MD = 9D489D4D1B80F347C3CFFE93000870B47D916758CDBE38E271C3F797E4B36E014ED00ADCCDA0E5CC65A6C4D4B104546D
j = 45
MD = E18BC97EE9AC361D665833DA60F815F11276B36E2DBBF5A272340FDF3FBFD036EBD58C0E37E8C725F2539F074C693C3B
j = 46
MD = 9BC1B5E4004A6266A66F1BC0C7C9B2109338FEE6BF572B6577BE01C06AF5033B9C4F98EAEFF15B2449760E95C863FCC4
j = 47
MD = 80117DCE793448344FC511D1B4EDB9F1E0844BA658665586853CC6BA08F17C3A00FE910ACA28EF00436E4012ED6D70E4
j = 48
MD = 90BD34D1508E50B43D9B5F39EEF9CC41C33A00148AD4A61B5022E1BBC2D6724397EC193FA137DD1B762F89B909BDF6AA
j = 49
MD = DA7BACD85173A0A7B277531C7B21CBB4F37FBC3C8A6E6A28C92DE33A845FC0FE7FF4BF84A3371C89F6BF597A7D04C487
j = 50
MD = 04EF8C83F31B25E61D32576CE9901AE859B3BF4C1BE980F2ABD1FC8989B853353F12B906479E653305CB68F0AD315948
j = 51
MD = 44989F3BEFD43A9FDE71342F5080F9B205FAE4CE946A630F30D68246A8C1D532758FB9E5CF4C2B289CEEA6CE8BB92E20
j = 52
MD = 7F08F3A269B3A494B3E80153ABD04C5BB765662620A491AFC770C9C6BA2CF755752950FF4AF96074ADEF573125DDBD1A
j = 53
MD = 5AF0E2AC6832A8FA3708AD72EBA6BCD3FB7859C86EDBF2CDDFCADC09915BB40C2E31E37B7F3B3CE3C41D47183265778B
j = 54
MD = C1DFDD2AD121D99EE3D3FD206B6672E2D05BF25BDE18804281E82E48540494D5B02830D93CCB80AD38A5ED9858916980
j = 55
MD = CF081579344B5FF836C40C71D968833DAD0EBD74338AD6959A08B1E73BD14959387D8C04A4779E04EEB6549B309741BB
j = 56
MD = 90ECF8531899CB5E7C6F6E05B9905D0A05BBF24214041D434309C0864618BC0DB4A33E050A9EEA9336B8D7F41CB4E48A
j = 57
MD = A55C306CF44986106AA82F842BD774E392B8F34BF1A8F376E7709743F3B807838977E64DD8FD739E0A45BA3F431E4980
j = 58
MD = BC0B35B6E77821B198AEF92F0DD2421A43B415B7E8D255D3754D67DEC30B83AFEF5573288E7AAACDFC34641E1BAADF60
j = 59
MD = E320118EE7A99D99CFB58CB908F9A102C082BE5F6CDE785EA65D35003980CB1CCDE45B780B4599809DA19F21D506D31F
j = 60
MD = AADB0C73CDAA5C1CD876A6BA3D5F5C074FEB76861798D82D7C1CC57788E4C209E97DD49FF61807A236B577537262B81B
j = 61
MD = 8685140691158F895DCB69A1A9E79635EB434ABE4E54C600C0CAD4F8E8048265FC3FD22DD766D87350DC135A4A199B09
j = 62
MD = 0347772A3145F1908D00B0F48C2DEF599C6AD26DAC493611472DAF00F7AB2231A0D862DEBF0B3E3EFD3841425290C8F3
j = 63
MD = A148EA7DB80D489F89224E0BA621295431B1C410E99710E209A267037C767ADA28668E82C80A68FE856B49878798B6E8
j = 64
MD = 1BA43ACE4DF719A6D91D6FA8EA9E368E531A410369416F4E0086EAC06AFC14235990ED2F24D1DD9127DCF092DCA24D2F
j = 65
MD = A058D22738E77726284800C94B0B0958AE314CC46AE27508B86D2E5873564E41818295CD01F6495A0A1BFF4D103428BB
j = 66
MD = 22FAA500932363A5882339EAAA8884AA4F073FFADCFF684321BF917A95281B9C35A938686BB988F9311837DF407246A2
j = 67
MD = 6B53205E660377D78DC9D3CAE3C2E9284D4605C07D48A9D71057E4D17DF5C0530D4D4D4DF4186060B8090D7AC98D452C
j = 68
MD = E1854EB183E02D7A043C2880DA57A7F06D0F1886F3F6E2BD4AF1934D6311771CFA045D47A9CA1031E7D0A8597AAD4D52
j = 69
MD = 359182A42ED15C007A31E3EC36EECB6C3233D8D0AA498E373616DE8C21A939326406CF1186ED12836B99004C1DC8C384
j = 70
MD = 99729843C0DE7017057A55751111A73E9C871EBD636DA21258F19231AAB8A28B7B0DB0B535F85868B0E07447D1ECC3DC
j = 71
MD = DD0D006E5377B2170A35D2BF21EE5DC3BC1344430693EBC38FB7F4AF57A3B7E4B002ABA268A40A61B0737E1E94AA4429
j = 72
MD = 12A6BCA153CFF13E3088F839539230CF610992C495426AF8B09639FE822C68C0A373B3EDC9CBEC76A84C035561127EBC
j = 73
MD = 2FE5C922B697F35710186FE87E842BF25062742B551144B1CD7E94C50D558AF4D33862E98219148FE2E1E1163A0322B0
j = 74
MD = C5FEF88101218AEAA28D04C9C827A52FDD4A0B6E7759A924994D48594F62474F3637BE86373CCF78B52E86DB4D78D397
j = 75
MD = C83335A82C60D037C669F79AC7FC06B6AF44F72F114694417038E1814932244FD2AD6AE9DFB02D0E2005115CCDE6E195
j = 76
MD = 114C6CD4ACA6187608B63465379DBD9B370345EF19E65C4F46DAFC802828DF68206C9A109712BE240612995C58C75EE6
j = 77
MD = 6BBA375CA0FAB8FBDE87780D62687DA7B2B8AB75A690F78D1C956D9905D8DD2AE45A58153E0CAED3E7FF0A36EDD89814
j = 78
MD = 2E131664B8587A6D37CC9B0F7A0640A405118279051F90746943B760D71084B640F1A789D0AD5681FAFB7700B430C7AE
j = 79
MD = 07F6F07A1330AC1C21908501A766338BC8271C87EFDDC7417317B4E73E9B7A63B5E5C1FA015CE1B285E60A0C405D74F1
j = 80
MD = AB1636007767C5F1A5FF701AA964AB16DB50244CB02B33589899232555776021650CF73A34A0377FE7078D9AFF452C93
j = 81
MD = BA89F828ADB1FA5FB0E8958014A49AD649D66422225CD75FBBE93AA2A63C5028419A2C05A3A66E56557F16CF2CC2D60F
j = 82
MD = CE96048F65DA65AB78D0D2645E5D82C911639C9A42CFBA543F997244A4FF100402F80306577E1764801AB83A7A4D30B3
j = 83
MD = 088848ED5035A000E8FD744D3A9981F9213ADF4828A0FA060641CB83C7F53EE2ED9DC8A5D73AF693718F2D25EC1F1345
j = 84
MD = 13C517229A3327F4609C7591DA337DD85464441DA4EAD614700B211CBFB38E3EB8F7E371AD5B69F0352A0C9D0429B780
j = 85
MD = 3D6D53537A012CAB00E91B0E029FC1656B82D0824B95D9453B7F0010F62F1C142B0837DE7D8E68BABD79D2C0D48341ED
j = 86
MD = 90DC6CE48D2CFC0FF9E9EFE22273C9D83305B7CE6BE7B809B21F7274DC6AD38B021EA9EFCD44E0F23619C15225F6F67E
j = 87
MD = CAAF1CED6B1883F2D128742AC41987646C3016CFBCA136120AC969273191DC3D7B22EE3454E02FA16A44A041A6676D97
j = 88
MD = B44BE21EF24C547F2AA1543CB3AA844AE75A5D1D77FE78548DE4412DD79DD6A39F8BE657B2CAB9A6A9F549CE4EBD076E
j = 89
MD = CF84FF37889C3B64AF608F8038FF24C4A98FC9BCE8A200E83ABD655503F5C82671DF9C70D55BB7C8312C5DDEFC2B8377
j = 90
MD = 3F9F486AC25270BED4BFEEA4FD97DFD1BDD587DE405455AED376AF75F45D777DEBE3DFBE9CDAE6E2C84C06A4BA9A38FA
j = 91
MD = 444BE098244BAAD4D7D5E99CE0F76927B1640C9D67D5377515C685F02DD53703D831DE18146E62AB031DA20F2B6EBA0E
j = 92
MD = 8C7B448C5DEA7C269DAE0442961870E1F26A31833A4B654BE84E8F824456DF1D17B20DD24D030412D6CFCB474BB62A36
j = 93
MD = 53E0EDCEBAB1CD018AD83F7E3694A1778958589CC69F7EAB31950A2FA9C0CB5237B05581097A24BACFB7E1A5D7E27D86
j = 94
MD = 58903B4EC6EEB9D38BE5EA71D4FED45D218A7B5BB9FC635B4D71CC4012989FD692D2A142AC6E9EB0D47E4F712B7CCDE4
j = 95
MD = D35CC06C79259A97B6DFD6D9AA130B81D1811F498E6EB2455DCC07F5A5EF391C8C63108E1F91C8BBEA0E6392E690A1F4
j = 96
MD = DBFF5D2DB4DDFC4299C18DEE98149AE1BCA6A90C75FFB977942C1ADE182BD9D1646EF27586C0D37858BDC8DFACF38A28
j = 97
MD = 567657A9C3C17D052471DB94C31650B44A50A6A0F5069F60C2C60FA73BF88860A1D342039F5FB1818387613AAE040B15
j = 98
MD = C62AB16B90096741CBCA16A378FB9BCFA9BB8101C4D20BDE89AF54B74E8CD622E6CBA3E780C4D3456B546F8ADF17DA04
j = 99
MD = 29D8452D74D5014B561843083BB8FAE5FCB8563ED15ADB1CEC22513682066C2F89D84237D04877BB9954B86C019E9E26

View File

@ -0,0 +1,305 @@
# MonteCarlo_512.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = EC418C07C5E3CC95A5FE2EFFA5DEEDF4334EFC6830C640272A0A77D7B11DCFCF3101265009BEF490F8093DFA28C172F3948F0C2350CAF95FCE9A855658489EAF
j = 1
MD = 388C9AA70536218C380EC70C4165327046F8FFBBB8C19364840628770F861B05D486371497E4D01071C45C9277FC56F0871AA307917101F9926F75BAD3AFF72A
j = 2
MD = 2F75ED15568A63902C198346C159E079469C546D787C47D40369C5C5822CBEC2AF091E0D0FBA80596A929698D37E377A571F0487EB509EF3A0752E4586858522
j = 3
MD = 4797A6E72DB063070B84D071D17246C3F8623EFCD4AD599DEB35DEF3F53BC7658FDAEE6D29E87490D9585F34EE23CCF72C875368D84D0A0E8AD5547D9413FA56
j = 4
MD = 1C126E91087471A517E757D41B85E8FFF70DE8236D1366DC9B0E129A1C90A39DDB193DCFE73042185CFDF29AE57D90FD78FA97107E1FC777DC38BD2853BF4B78
j = 5
MD = 68EDE639AEAC6E1FD625A8BC82C663E853125885E7C8A58D17B23D35FD9A37203D451142085E8B94E3F5FD75E023413BDC2F18FFF2824D56708055EFB38D53D7
j = 6
MD = 72DB47101AEE5D37B60EC3B2CA39F221EF0CE18BFCB63E50205FD2C42686B8B48DB5CAF3776A17978B840F31E30E5670860F80F1E1A07C506185EFAAA0038458
j = 7
MD = 13E859E7494D38A2FAE0327008F45882DE9544A5CDAECDEB1627C6358483B35E26A1D963F7161B567472CA12F8F2C9C9AC3B0D49BC8E68CDA2DDBDED2AB5436E
j = 8
MD = 67F6D5AD77DCB03AC436F1E74AE8A5B2C60F720FE5A05B3A2D7EAA920E5278CFEF2A69C3B2F0E5DFCCDF11374360481D33ED48D7AF35E5B13AFAE5724FAA87C0
j = 9
MD = 0525BD329ABA20913616FCA4E35DDFD3DBA9C73E9648E5F3F7A76996EF270F47E76D59140C71A5611EFA4F36156642134CB09B18E3056484C834431D6E3901AC
j = 10
MD = AD07046EB969B8177176A3458E2DCD7B9D1647450ABF510F1CC9B7EF1A09D8BF7FF115FBBA7DF66DCB760AA82F5B87722290AEB525E99C9B3F7F97E9B11B3A22
j = 11
MD = E912AED915D83AFF329E44EA0AD3BC158C366097C49223254F1197D707F254115C69DDFFFEC3931507DBACCC7C9F10B82BB7AFE45F9F04BED868EEE7AA36F0F7
j = 12
MD = 1DD2E5C07B6B236BC47A11D3AC6645D2BB4CF9BF86503546B29B74C9C6C61E1E02CAA149E518B04178EF959F6C66332205A3D2756BD23263ED7D3C4D2C060D20
j = 13
MD = 55EE425B1D739665872D6DAF8FFCB64C0933A1ADA0954FAF61E19555EA5192CF100476BC6260D4446521D3DB4E503C29CB55A7B8C370506AE613AD2C61533129
j = 14
MD = 12D9A6AE5D5C369811D332AF0ADB54A5CF424DE3808219A0E9E463DB2F23BB70D597A1BCBD20804CFE15DDBCCFF2959CB51D1252C8190449CACE35DE5B3AB756
j = 15
MD = 7609F504D07FB024CCBEE1F92D886706142E8C757A54AA1E18E70C0DACB1AD7060A526CF78996EAA96B32EE9A59C687AF8EB97906AA2860027B70EE146769495
j = 16
MD = D4AE2FB3CF5817617FFF2FEA99A36E80A65FB047A21D482565FBB1F41CC886C0BEB1028A0458647B029C569E12C36FF3FA7D09D5260AE603823F62CFF6352780
j = 17
MD = 1D3C692D9EABC905A3B6A34BCD8667B984FE5D68BCE31E68749885DE5F1E9A1912E662FC6817522A324D6F05C48FA0F54C3FD484B6AE88DC768C33E16507BD5D
j = 18
MD = E146C80FD1BC618A6B60F93CEAEE6836CF9E79CDB6C1F66DAC3BCDA4D57D70BD086E812EFBB7CD7B613BA5BA4CA86EC6C4B71C99B91744314EF9A74F3688666C
j = 19
MD = 99AB5295B36E2F91252A39C31D510F04F4D4A2CB311E4CBCB54051243A21A4436AAC18E8D4531FB8EB1D46914E15953C88C5BC638D6195820E31753A61D78770
j = 20
MD = 62E8ED5873DD771EBD5AEAEAF85F6CA1FB257A9FE2BC3C7AE5C48D7D1A008B9BCEFBCAEBE19120EE2D102B68B06249B09A0DF8A40D6694B73A865727F083E0FA
j = 21
MD = 26894ADEDE8C561D18315D1F37A38C1CB56977071ADD2D044FAEA03BF9B327A58869D30CD18856E90174FEFB917FD280BDF00B26C80B724E3CDA460551695802
j = 22
MD = A5C36414D720C916B9FA3E05B6D609E5058DA119B4CC67763D891BE576DBB4297259C1C14EAE994F9854BC18AD3733B4948E383772F94E9158A7BF2B12FBB49A
j = 23
MD = BD7A23378A9EFCB449F0DA151F0053163F7C18362ECB4CAA6F99B83026FFCBCF26369528EB1441B1C9F9FECFA86E7F725FA0C15D1DB7575C0F0DD55E99816A48
j = 24
MD = 85ED565AED4208AFCCF824AD413A4C5AEE50246944C7137686D534C10147D2D558BE8716FC9471CB38D5D97609F20C396FE8A08DEE6EA9585878633360C1048B
j = 25
MD = C865A0BE0F09C6EDDCE05BE5B7D0D57E05CB5BF3CCC9E6D91B3C91D3F22FCAD7C45DE7D4E812862447CB8000386B7FC27FDFB69653C129114166EFCE72F3FD11
j = 26
MD = 35E242870CCF3816745DDF6BA1E2C3B228ACBA579049A352411C7B7A404B264EBB9C4B44066F52042D7ABBC7FF9A431C11FE27DF683E078F06F6CF7A94249E95
j = 27
MD = EEB7A1D13AF7ABA51D52FB0E161CB68CB9F1FE66EB0280468EC9BFAB2386AA9DE5831611C54508E13A84D75DF471BD82FF2A86B36972E0DDA0CD4E8064AB68F8
j = 28
MD = 77156DF907C40DE0F2FDE4C2AAA93C25324355311087F56006204B9D2FEFB9451010453987E49E4ED53DD28F2664516448C7A3854C95C6F63AA4FA1153210634
j = 29
MD = 6DF257011F331335D4F1C6E7DC2027A6351A074BC8C2660245CAD2B45961D23FD6DBF4DA718D5C71854E97B0F376D5D8C54C51F6488EB2E67CC04CDB262A86DC
j = 30
MD = C234661DE3D68AF7DA80A6724148063790B5F0532566EC1E5F08CE98C65AA8438801C0ED7160C405F4BAA6A8859F47DC3A4CB5D3AA89397AC5A1B3E20E1F44CC
j = 31
MD = 3F34DC01374E9476BB9730F6C7D9CAA3FCFF35835C787A638064815E0D8479FDC62A227D67633D5F6D268E168A159D9EF79A1E371C1DA1912A62A34FCCD30D3E
j = 32
MD = 7EDBDB2406F05BC65270B798BE63C4091FF2C9CF11055AEE9D20E1774E707C1F53CD5C57E99E4AA9405062CE026708E88A659132D0A9225C23D655B7780FC354
j = 33
MD = D78925ADDC1CF4EE65AEE04F8523BABC3AE5CF2E4A8246F0F39119D402C7B66CB5055DB5FCEB2EBDA664B8A2D122F04BF6D79325BC95D060C222DC47422246F4
j = 34
MD = D3BD4F1C281EF93803F0688C8D278AE59EB46E4B8AC535DBBFACCE46C9E3D1E2F1D12C8EAA0A1A2DD738E924CB4B5272124F47C8F3A4A040638F57FEC8E40B8A
j = 35
MD = 170E42AEF5584B725707F43CF3C208AFC0AA3D6D202DC507D79C172C4241E3F46C5021373A40BDB469B6AEA642C651841D4EE2AFE41CA9B04D6D731ED0A1040D
j = 36
MD = 2F24E0CA023BCC910B7838A9472589E44962041E9D5ABFA740583C0B367E0623D3730FC2AFD505042C81275ACDEAA36B82B66991E53DCB90B749B38D2A9D79D0
j = 37
MD = 4D994BEA0E1DAA4709A243776228582615B7A605C914B40DEDCD95F7F61AE53BE63CA3BB6C0228C553B062ED8AF3F9180823A360EA54D73934A2663B0E7FD734
j = 38
MD = 17FFB03C61427EB240CE46215A5782D0F5B8F4CF133AA40BB3FBD97EEBED83BF79F1DD82D15ECB75FD61F82587E82D9E2B2BF08553E09BF5F0DDFDC7A2D3BB67
j = 39
MD = 6AFA138D37268D9920BB7A43AD2F24E241193EE5944648D48A79E56F0F5944F6860B818DC4031107DF5C73487B771B22616AB85AA347E6059451C61C025CD09A
j = 40
MD = 1B028F139E195EB54EA68B7BF0B31AB3301840170F718B47C15D99D5DD7B819C68119266967C151D943CBF0E0C024FB271BC0C33EC2463B2667489647E92CF04
j = 41
MD = 55B31C43D14A5900B1113AA970DB652150F5F72E37D0596D38F4D9643EDC5C10B0E076A051F0B461AE787F3D8E2ADEFD5404425C4C45EE78DC9839AE82AD4A0C
j = 42
MD = B8A4633712BBD6DFC1AA43A32E3A29D7A3D7A3342284D84ED53086B73468426ABA36426919E64B4ABC752B89949036C42F8ED1BC9727C51D8D41AE4BBAD1ED78
j = 43
MD = 5B83BB3DC51D9A4FB957842B5ECFA2C58D2155CAEA5EBA9733F5D005EBDB4B50429C3CD35B144602520061B31D92CA04DE57E573A3E5825C3183550E19731986
j = 44
MD = B67C80570434D724DF7B41BFEDB1CF269D5CAFFA2E33952E4E6096E4BE3CFCBF7A50D154178EFD9B006B075DD53643DA0AE0826E0AAF77B00E4E5240C0F40D57
j = 45
MD = AAE886283183D69E37957DAD45945FF772572E30CCD294B6B0A7B4C8CC708F425FF6F465A15926B302F1A514C90DBA9EEA992ADA545C3AA2FB5687E8193EA74E
j = 46
MD = 6F39C5E1E6A5E5B404801F0069FE1E767B97529056B9DC7A4D2C3B27BBF730AC1236E149702E2AA3B6D682110E83FF6D380034AE3A8C820E2BAAD965395D2711
j = 47
MD = F65748BD2E2158C8566A7E7CF355E9561E4D1CF7E1D8B14D1015FA2D96F827E804AA46F4260877655B65091CA8F3ADB0FA022226CA1E2C323F053FDBE98F4515
j = 48
MD = 5319AF583950618E9E428B303368A7CBE00543AF81A3DB4EDA01B7B1DE4E725BDE574F078DEAFDBB45B56C3C2C60929A6185B0B1229253BA9737F807F7C3E84E
j = 49
MD = 2DB9A16DF6A98B24A03FFAB2F26F599A10FC0CDE5555F3EBF5B27359F64AF605772559284848A6771C4903CDD66AB2E0E202137EFB34D39C0C963A18F7EFC325
j = 50
MD = 93015E6899FB97EA273A74DE030BF984664B9B7AF84A1A8376CAF19E5210C425191F09E14D59E681D9009689F0C91A94341408760DF7A1B6FC27712575495D53
j = 51
MD = 421A5CB56EEA1D8F916AE7B4C82B17C00FB390A04662D8231F18FA6072A84D8414A64D5EC7A73CEBFEA94D14F93EAF33D449D066207C4DFAE2F13C725A2EDEC0
j = 52
MD = 776E2FCDC1D7B34DADDF72490735154ADEBD2F969BD5D31AFF7C893BA3585B8A52B9025C43F62EC97FDA441C1494DEF299A1B784F2163A3FA6F28AD32099A82F
j = 53
MD = 170FCC580113E77F4BF59AF4E17B644E2985F9E9133EA4AD278E540DA9B4A9BEE29207917A0BC56506E50B0D8DB7270EA4CDA4CFF2F684231CE17BB67EC013D9
j = 54
MD = 3008AED63B8BBF7B69BE99048B90797D258CC091EB427EC3B2F20374878DAE9C79EBA789603024BD49F91C17F08D447871AE148C675F40FA3CCF7EBD168D8BFB
j = 55
MD = 9B3C0C280971CF12DB32E20B6A0A1D95BCDDD56A938705ED417015BC65762E604091C401CD1CA0D2D523537CB9B1434A8326EADBF21F54E0497DE6D80D3192B3
j = 56
MD = 7084D84785B780B9E0C9FDAAB33FC62E9ED288D4410BD74AB3E545F46B728F57191537CE659A6C550A7650D6C9B4DE6F35E21E1B913A9278CC79E902C156F150
j = 57
MD = 078513DBEDF3919210059E0AC730150A584DA3DB4EF227D16F7AD98A118F4FD7BE0CCC5D4CE311C03EA5F8793E40A0A80B4AE0912054FE24263238D3E3B4FF83
j = 58
MD = 3F73E7AE141F57AFB2DE0C746D7D5B2213363E8493C9F68979D2FFF0DBDC2EB3E8F7209D46D97E01A351DF3B0B5BAC96E0C979BCB8B2D4A68EBA2C9BEBA5B4AD
j = 59
MD = 9B58CC64C8258B892B60044F60F5CE0BF4D0795DF83352A875B091D7D5484429C4A7A758D21355968B54A54B3C9151EE3E66398AC76A37323132ABCB7F8AF099
j = 60
MD = 58DF4C05F4D5C03AE3D8718D27ADC3C09E34FEF8100DF8FB46A9816A86AAA4FE7E065CF6A05DAA3257D90CA26AFD2DD9F0F246F294E9E347A4A849D8A665FBF5
j = 61
MD = 95597D96C52402511883F47C5C3D252C9066371B1D5A04B2D4E18892C6A9644A64678BE286561C988B1404DCF4FC1D28E85689D704E79C3DE031679DD636D178
j = 62
MD = 95A8071AE7D0F9615E977889C67DF6DAACD2EB0919225B786374DB0EDC446F2AD92279E8E11FDCBE0DC5AEDF4167ED12C77598DF8F3B3D6F2EC74226F51E818E
j = 63
MD = CE1F88920FDA40FDA4B58F0D008846AF54AEB094666A6463D353AB14B3475EDD5A94DEF3FB03587AC94CB4DE745EBF79078D6983915A91B5D380E553872141A6
j = 64
MD = 69AED4CD0D795D2A1B2F0B15F4398E9D3DBC5092C48C08FC33D3C9630A7EE507D94CBA9F4CB8FF4A44B4D58BFF22CB5A831D195E44A31A9CD760FF8A27BF3E5A
j = 65
MD = BC464C4F5E01904C9FA05258DB3E546791C96D9534056CFCA699722DDF5F94FE34338C3CEBCED427473943561EACEBD8F981CAE98494D5B30E595C415A3CFFF8
j = 66
MD = B6F92BDC206BA2EE3811555128092D5D84D7E693933CFB746BCD579C243D47C72B972CC9570EC0291748FC52843E2779424C33B86A9D1D96C844A8A838ED078C
j = 67
MD = CF3F12BC57D1BB56CC6A2F90504AD85ACC8E8FB3F89A353A269E9816E987A2643C0D4FBBB67011ADFCDE5E6837F6852B14B017A13952A2B111213A2E2E4F82E1
j = 68
MD = 8EDD7AC2EEE83979FE0950757347B69EED648A92C6CC053F472B99C8B2ECEF11D4BFDB55D371BA321EB566B0502793518830ED1B9160167A3877850EC158E0B4
j = 69
MD = 23AC1BAFCCB0A16C6650CBEFB6D6A34B45A6689016D4E50FC1A433844E032CEEE621B2A2F558CB449405A188F4A87FF237CD971C5A84ED5D9FE646FC0CE29BD6
j = 70
MD = FC4673FFB72E69FF485EE24790D02BF6300F65F17E765EAF9F6A97D4AF68692F0E1F5524D582BBD70589952774D3697E2ED659FD5D025C299EACF8AFC9E8C88F
j = 71
MD = 06256A19DD48435B24DA23864156DDCAF21B8BFCEBC18CC98AECC792D8BE361E27458D1B2789E81977B251AD7FB07B86A4290B97B3B3ED54310CB74ADBA6BB67
j = 72
MD = B87A5DB09F82EB601E281D3B989BA763DB00E470CC1875F5413BC2CFD41B62D295B5B4C0B9DF59637C36C1CF4FD295EBD007C134D87D88EE1E2E0B6662869344
j = 73
MD = A52E6CB9524780ED4102A08DD5D4952F934C96FC7C9C914CE4101E7556460D398AFE64A423CF1447C52E109277DB45BF5F3EC1BF0474270D16408B0C92DB9BB2
j = 74
MD = 4EF596DABF4E903928C8C73BEAA4764675FFCB5AAC3E10389DF5AC9749A6C13596AA751BE00DD7B663ECC17C0C786CE017D35D9DB66A0EE42474379176A882AD
j = 75
MD = 048560D1B7B60C4382AB251427D3F7304A7168B9A8560FF9A774EA5D3F811B461FFC94B7A5AA8D89A0E61FB3349B1D7A2FE428FBD8662A9037B731BBD3CE9177
j = 76
MD = 99E291BE434C4B5DE8FF36FAD47F6080413DA87772DA0DF493562243628D5FCBF984274B6C4F3D34F25F0E82CBA07DCE76697E4AF812BE48966DDCD37C63ACD4
j = 77
MD = 90722E32B7691EED6FA6B757E721938FF57ECE74DBFA47B5D525DC10C49BD5F7DD7F7DA0C82A68F8916FE9A40B9F8464C46020A0ED7DBE2DE1F4BC5AC36481B6
j = 78
MD = 31CBE0CC0E5CB2F63696E11D894D4C9FEB7325E3A2C51E9014936576C5C4B9C7E3789256BEE339AC8C4D548D83BC07DF1AC30FCC5F89AAA9E3D05D32340F30C0
j = 79
MD = A4EA730705548FC8EF5A988950B39BBC6F6227A3C30E57182F6FFC021C8A98CE6B7234EBF73DFD9262BA600DC3C424AEAFB6860272EA90E4C47C15D358FAC708
j = 80
MD = 17D00E2738E00AC4DB04AB70174A5A7A6516FE403C450FE69D0EA230F58D372E7F86D146700BA855FE84F64A467488F309C5B824647FB50DF1C1E4105E028CC6
j = 81
MD = 33100A2EBDF2455F34B768D147FCD4E4D93EAE2184B774AFD99E5DA881FB4E756220D6263070FED13E38D670493FE8759D8ECFDBFA931CCD4F30BC0072626B09
j = 82
MD = 75DDE2F6D69C482DBEFA18A7469144B275F1DBCF3323B25F725893D457FEDC9EB8E88B1BA8D82A90306E14FD02CC04A7CDCC01DDD8F23C925A40CD0AE8696BAA
j = 83
MD = 7BDC6BAEC9562440D519277E928671B588CC4789E891FE47C474C96E05D2066DA6A89F6810FA386C79CF60133FC04697388AE1C2440BB68E6F82C2D9305B68C4
j = 84
MD = ED33A42ABCB1E74624308A9E3732425B3510D4C13BFBAB7157B0B5C8D5470C24BEEAA1F161F3B83779A17E34C2A409359A2CE24C9D03E0261883B18ADD536F16
j = 85
MD = AB93F4D84830280A0E95F00B90360D626A548601FB9127471BF16841DCF9F9CBF23E31E0A38190F0EEBCEB71F5F11FAB3EE3632FC8001F58BA9D28013687D249
j = 86
MD = 4AF0E0D295FBFDBABBB4FCB80F38F578CABD24EF1993A30E6FBFE673FE4FA08E4F17FA902ECDE9D40BE91B65A0FF70882B1D402963C98AF619EB40B6F4569038
j = 87
MD = 35CDDFBF6AAA8C3D5386BBE88EDBE48CB3ED898760EC64BCD0BEB099B7659FFF7F3EE35A07859EE202257D896A7FB018B3CB9499AC361BB3DB67C00AE2B811DF
j = 88
MD = 48DD48AD08C3BE71979BF0A3CBE17079B8116140DB49EED2A5B3C761517039F51974E5B37D6420892B2E64C9962B86F28C91513F748E83629F176DB6895B134F
j = 89
MD = C71D16E07539D5FC374FE8B506A2A2EA3CF5CBCEA59348D7E065B8A22BAF3A89E892DC0F60BC12AB9903DC92CB16F400115774BD54138E3909F94D92525A35E9
j = 90
MD = 75A65A2AD76CA0F1B1BE02D458291CA0B332FEBD0920FEEAB47E447ACCBC3AFF00D112C693B1F131F606B76FC2C8DA18C34E949651A4108C58267E6B5FF146B6
j = 91
MD = 0DC348DD29D892198634FA6AC0445EB0340464326380D80D4F5933588387208C6BC16D09E744F25D2E0A198E138B7EDDFC8FCF834F6F89844D5F55AB44F8CD0D
j = 92
MD = 73B8D49492A304C2C16C0120AEA84363BAB620E956A55F6114BC6A515A345CF33319F3768B277E0469F5E11FE7A2E0744A0927B3EB06FF899D5F85AC4D0058B0
j = 93
MD = 7FED2C732CB100E48C2723823664465980E9CC8D07B1D76EC6DEF14F034591983CCAFE55CAFDAD796FB7E31430453E910F30A4D8013F46BCB987CC67EB5AAC7A
j = 94
MD = CE5502EFB6933A3D4A9FE085FD2ABBCEC240B9FE2F2C373A08318AEDE67F6E9A09BF852D4128987F0FE2A749B819C3D5F4DB259B08D5E28036B728B4A0438029
j = 95
MD = EA58764055274029E71C95A18EC62A65DDD1E0075F6D3155CF78F47A4E5DC1DFC711A90135B199EEB8E46B0C697AA777B3A13A7B70F5413C69DA8A7D1C1D0D49
j = 96
MD = D6BF501DE3D31139796F06FECBB402795D73BEAF7574DA02812E136A292D7595AC8602552D02B67680804BA7729A68BC011ADBBD191DF182ED24C6FE9AC66F29
j = 97
MD = BE0940462D0744545B5C40264F7DC7B1CC34BE73654FD201E11ED43F75D4E36979E2A1D74F24ED27CBADE7C6259BA42FF8E8BF920665D6B070B5D33DE5DE1A08
j = 98
MD = 8A99016CEB72D263C052258602B936EEAC3207919FDCABA6C00645C76439966D3D5B55421DEB7A15D52448F9B93793544D0F2379AA788E1DE586245D55539CB5
j = 99
MD = D6EBD732D8F5E7B20A87E4C19A3BC8ABDA3581318D293D5B58C733B58920DE8FE29DABD2E36EDF1A07532C6B615FDDBDCC5BD058D50DAAAAEB7771641FD58E12

View File

@ -0,0 +1,305 @@
# MonteCarlo_768.txt
# Algorithm Name: Skein
# Principal Submitter: Bruce Schneier
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = E289EBDCEC5CE64CBA68A559BEC0FCD2422B60270EABB08B1A9EE51A5965903204DFDECAA6D14563B43BD9A66902532763EE3DBFDED0A423CE6E558B86F21ADF52248F7B5E31B136F5A8B7ABFBAFDC664F3D86DAB388DC72D458AA678EB5B3ED
j = 1
MD = B8C9A24C6A318C7CF3C18F96E236078E6D30000D3A7AE421BA80EC7CBD5992B19C65A8718425158FEBC87E04579188FEA84620583643C58B37F43216183B14998522DB608AE376BA003967C8509AE9760E101A04815BE49E01817079899369F2
j = 2
MD = 894E76042EE46B75EB079C7FC6B47E182AD22607AA171B7F800548B8F2E924B6EC10A1027FDFEE3DAE075A6D4ABFA9F7DF083AEA4DF929B59F1217CBF2402CE98BE84B4500B08B0CCCEC83C3DBC7E15E635CA8DA9A5E81BCF7D01900DA2AFF8F
j = 3
MD = 1F9AD22468F5C6ABC465E2978AC21AB3DB6110155DBD55DD2E599A57EC650FE90040276BA44E8DE83CAE587017AB4F211A1CD19794292E566713DDA3C35883818A08A79CE5DF5219106121ACD5609EEDE28A72CF48E2C062398C540E7D41D7DC
j = 4
MD = 041CD0B79768B430316F49FE9DD51B659E33840CECD90EF98DEAE0AED386FAE28D10E2F42E4C8F7A15A239823922BE1664379790D3CA19AFD7D7C3BEAAD5884364AF4CF08076B9C29A6424DDF6A1F0AF1F41053EA4EECB09D3F8B228B908DD42
j = 5
MD = B249A3A6EBB5F8005CCBC1F33FDD2999C3469C22E058801B7CEDBEA4CA139AFF21372DA4EC0FC0C6AC5F840CE57B957CA93F3FC04F6DB677A1E4AD4058033A9AAE70B425AB78B71AF62B5AE759672EFC18824F920495F718D9844C6D48E0FAD6
j = 6
MD = EBBE8D7EF48CD7516379A08EEA9BA08E130855388A8BC7F3BB2F9F7F096DEED9401659AD62A09B4C44FE03688C9427A0B2689BBCD74A76BF7A9D4E79367795B24DB5C03FD5449D69E5E273FF8E74C1F0ECA4BA2C36456C134B1594EDE20604F1
j = 7
MD = 6B9E5D2DA4E56F536CDDA71E48A179A2EDB5F9A3D83E39691AB6FCCA11CD944CEAD212F1CF2B386E6B2EFCA184E875C17B725CD1010A0BB4D1E8B898390948B19CC41AF968C037239FA33A6E4004DEA8ABD91DCE3CA9805ED0866405F83FEBFD
j = 8
MD = ECBCACFDE52EB4FFBD795B6DD15F4ADDEBFB14E1D431C32E716038C93CFC8EB00C5B5EA88002BC617E38149B602F3F1897096CAF1E39B352CEB26D9E97EC5E8DAA830814668D7941761F407B4D5BEDA0729D490D81C56F5C0FAB40D7B9B266E7
j = 9
MD = A8377004E0B0C3E9DF45BF69E5E3E71CD39196833CDCED6917AFDCE37111FE3BBDAE07F184F36A0C3A1123A092AD69FE70265F1907779C99B4828C99A922E610201CBC127A2060208E46B9ED9A09E04B0CFD9E9E5D954C69F3E6FA395C0AC9D6
j = 10
MD = A8193AB926BF08C387ED10E94FA6AC5733BA5845D9EE710CCC8C1F634BA99E79729AE29B20ED531D6E88C710E9B9151D124DE415DCFE9883C6CD5992408199F3EE742FDAAF0D138468E96EB07949F0A09B2461807FF0A4388265042C6452145C
j = 11
MD = BE684496CACBC315678FD46CB3DC9EEC91156374FC8675E2DCFD311F2242DFBCFC1F24CFC407CD126E2001A42A3086C92EA42D3169DCAB1880EC63B81B4393F5D230B7637A486DE86B937EE94344512A8E59C2A56D8D9A947D2B6942A5D16265
j = 12
MD = 9F57A147192EC3E87ADED2DEF0C0196A95EA4AE896D41BD285A713DDF75979E68AF73A2FAC812A52552C7A77C2BCA408A0865EEF36CCDA8D53F3231F774A81F84199E431FA579038A6C332EB8145131FAC724E33CF1DCFF1D37B3AB4E9CE8A8E
j = 13
MD = 5CC8E76601C5E379A9928318B9ABF9DF45069B0116A1E9B80AF09D51B94D6BA10CE44C92918D9C078DC892A55982FBDE393966D002BFDE3769706020F80C2B72584BF50F6AC13A4AB48F7C1053BE91C1F177B2ABA873DEE791D20020F888C0A3
j = 14
MD = DEA3AC7D16228FF0EAFD7DC292B01C1D438B8A5EA8073243369DCCE48A4407AE8CD43D0C6F45AC14C2FDC1E735A9745DBE5E8295B7BAADD4B514406115D4352B457D55C0729B0C63ECC46998919F8A4AE5A34B754660A72C0DD97AB38EB8D186
j = 15
MD = CBB3BF27BE10E563C1CEDB1BD3A535EB1DC8F93282F7BC08A514C6B576C6FC6A20567E528C615E376BFF344B5BF808FBDBFC23672DEDDA779D241ACF67D4333E79A1C75D0CB0A919086C714C1ABEFB4E5A8446947C3CA8FD8DE623E814141E5F
j = 16
MD = 578613D0A621F11F8DC28517E446508B6A7AE67790E1A15BFBB4214E45391ACC0A5A49AA1188DDBFA6DBD5A36365DDC1555C002857D8C31768A6052B79218C761D47F4B11E3D76D128FA8C461A424100E25D46F1FFB69E14D472AB22DD182A3A
j = 17
MD = 90154B56B148C67F87A8CB49FBD5E7AE0E3DA0C2F37AF20C922D53EE6BF55C3B9A2892F05DF1025DC06E2F04E592CD337FDD0DB938D3439AA374572A19A1C66B66BD89A37BF5EEF8C51BEDB0917184006F64B3536410AACC906ACE2AFBFD72BA
j = 18
MD = EC64E59BE9AE6221884A3B69A4D9CA258EF23AFE45345C8D941E09D2D0C391A58FD1D95DD796A9009EB2AE5BE955D9349CC1F52FEE309AFB792C0FF6B27472085628848BFA6FADA9329A03C016614B3FD559755C99F28C0975192EC7E313F718
j = 19
MD = 71EFDE1836BDFF14FD5B13A338EC5304D36A8E11678DE290A5F6E2B2057726E3CE18570E2F65AF416662BE80610FF5EB79002FD905B9E92BA01847ADAA98E40477AD6E8B0BA0528A8BD9441B1E479BE23B51DE7EFE86D2B649DD11CA804D4BE9
j = 20
MD = FD0FE03BDC1142CEA1E0A0762A95BCA27E75C3B1709E01A8674629831A00788804059DAF07AD97322F06F659366D70700CDA2DF3951AE0A03C443E4AA8460FB1DA1071B544C431417C3B4D6434EAA6CB06F7CEC7FEA6948A9868CBF2809004E6
j = 21
MD = 4B37B06334C0E080CF4DA4E8DEDA36F2FE72DC28538F11CEC3BCEE1895B3413733DAB5D95CFFE9E10BA2CCCE03E9728D1EC407DC05790A54E4A1710E0DF5508FE12FD1D20C0BC4B7AA319EF25E7CC92C72D762B43EC7C02BDC5A0BDB55B38E14
j = 22
MD = 0CF247FE379404C23AB11D8B5BFCF7DCD017E5CC208E89D31208012A38FE5F6B717590EE6D7B9807C1BDDCC311ED13B29A29C9CC1E9E5B69E991F923B65A0B1E3BC69AFA78FC0D0482A803F2F595E402CA7C7A930DA778504A83FD5C0B0478BE
j = 23
MD = 77E99864DDDBA44510DE1092445A533E690A8CD704BC4C71687F7ED12494C34D197D89ECF5FEAAAE214BE68E843C256DBAC43D1356670D1FF6C0666C63D22223C244A9DD7F2F07BC9D9E544398D50E5C0894F8E41BAADCCA71AF85041214B3A5
j = 24
MD = B27C476F71223B98A9B8F0A840370E589BB04D2BE35917E2C0FCA4759E58D8C417ABB32586890BE2A27082A3BD7A7704C9ADA0CD40C1E752CA581DE548892EE1F3332ED93EEDC8456960CCBEBF5F0F79C7ED3EA99953BB3D64A64BA9E9061773
j = 25
MD = 890D766D57C1F2723E6EFE0FEB773A87B3A8B637FCEB87DA90A325F93704DA65E2F6E11E35F667CA390138E652F806042FF0EB6FC8DE6F397867EEA92B8D4CF75957590AB714A81431ABDACCA4ADAE341746E5B1C8111404489F98702994AA12
j = 26
MD = 2AE3D4AE1EDE820A6DA5B9025D0A587F9F3C6348CA123C810C93968E505173058B1E7A96491DFA2579AD15C6CC179E536C13E2E6863143DA2558D976C9330899B6F0ABB80B04667098E35DD89519F61ABEC430977413479FD16B2874D9D78A8F
j = 27
MD = 8CDFD682D69F5F139DA9D893C65C9EFDEAD93B47F5C7E67CEBF2CB2705E2FFBBE4F0D8712BB51428BF0CCA908A0361F1D8F8594059BE7A9285E7768B1A3132F6661A443F6D61595EA8612FFE6582F4DB8AC22CDFF9A90D4F636BE6C219C22A37
j = 28
MD = 687F11BD88D0218D0AC63C6907F03C5C5991E1E0779B809BDC6F5A54FC6E39E731C19CF93FD544CA08FDFA6F267F1F80DFD3C614D9447E87A4935298FDEF605B95740A2B952D773E0C2FDED53F1E73F406ED0C97166A615D9A72B78111020F85
j = 29
MD = 99F17342A95A190C053EB2816777E4330FD8070FFB37EB720A9B6739C7FDD0BE362EA0578EE74571753E8E6560F7B48B9FB776C03C9CBD28DBF0DDFD4471CD638ABD905FE1F66A67BF286D1AA88E4266873EE97B21852CDA863A6851609E0653
j = 30
MD = 9BA9B25D9F12FF58EC5734CF11AAD6185EEB19CBD1B9592F2C2B0738E4161460A46CE964DB4B472D6977DF135A197EEF0E3CA426CF119F55E378E7994E5C3222D81B1599DDEC0712F5A616C6879B6C7B4AC5304DDB9FDD2B59C2DD2B16D63D98
j = 31
MD = 300899203AB6D20EEF36500BF33F2B09B5F9243F4ECB0FF218AC94160CD578FB3A2276310E77DA3AB7448A51CA6AE7A086962A69569505306965D3CAA4199FE29E6030272EAF5D8D958E6F4B3C7A7BF6FD0BD260B7E09C5EF8CD5EF209C8B2EB
j = 32
MD = 57784E4B108F91B48230846A00922840E7D036C52ED4CA19C419CD18CEE3294400C860616F406ACDD92C9445BB2C95FC92B57461BF20F0B4E5897E94B9F01B8ACBA55857791B3C5ED1204BCC2B5776270225B84127112113EEBD4E49F6DAA21D
j = 33
MD = 4640647063EFC975D9F0FD95DB1394DF5912948C63504165ED2133CF070E251839EC4F33BB72A4BC7339CB872DF1EF64C8118682CA0B0FBB10C32D6AA9A338DBFEBA1E33D8783B23F80EFAA134A4C486ACD8BC448A1646570C51BAA1A9371418
j = 34
MD = CF0C665C1AC03607F252866880F6B95340D729EB7A5E08C32DBEF1A3F2C34E97078924AB2F5062187BADE6B571817905BC9318470A097230670E400021DD7F1D2EB3A116A4B15B014EE1FBBE2C80E0888F1C5BECF3AFE7BD905EFB8988A9A749
j = 35
MD = CA69B8DD931611FE27DC2505B5D0F58C05465CCFC1F96724B9C5EE1EEAACE1D46906C0571221C602B2B69EA21909E49F8CC17EF346A3483EFFC6672A475EC38ACD0346142E35E5381C8C4714354FE1EC74061082937FF8D8DE07C255C547C5CB
j = 36
MD = 3E1858E3AC9A2712EDDCFBADD67E68887FC82219868980A88423FBD90749C8F203A136ECDEF11CCF2CF23949FC3FC1CBB0EDB6A1B78E179CD8C0BFD2C63194C22EDC3218788F9C0B67055569FA82723DE494B18551AD4EFB7A7AD79A9B29B62F
j = 37
MD = 72228161B1C8098FA941A0420E7A3C026F82F6A3D91B00AD85239B9FA72A4059C85902FA82FEC7D0629DAB404168DC1E7C919661E317ECFA4B1CCCEFA447077CEF00D8E1DBC93472E7AFD0D464FE06FF1F7DF9FDF899CDE0277A0C31D0B066E8
j = 38
MD = 26C50CC1063ADB40FBE2240B5A1E4DC8DF88F0D21479AEF21B82213E166C3E219488120C6B01654359DECEBD790F7EC61FF868E5A0616652EA5A55F5044E791EC51E6C62A63EC011C5405652501F031B34587EA5F85B5F791E0F60E5E254F2AC
j = 39
MD = E169A3FC1D546E77C2E0EAF8D184204F4F6AE0A3D24E3C999E363C9ABD3A3183800862783BAC1509110CB7FDD52B21B02CAE84FA6C64E9FDB223CFA6AF608F60A51110492509914BFADC44DCF5F8C09D25E560D115B074B2CACD3244A1A6D040
j = 40
MD = 2235CED156EE9D78ED0261A0088786627091197C151EF9395BDB0E71C840AAC97E6E26467A86B9D26C3EB006E647A8B6CD7F1EC80E82A1CD65B482EC8EADD72D77AC57F4305400DDB902AFFABB8857B711C030A8F88BDD45F4871AB304C5B881
j = 41
MD = 52258CDF80E0AA955A7C987A70347649C72D12CBE4A9C923AA10415B69EFF76C5FBE0B3C3C38EB3C571D5CD69B192E3F7F43560E21F1C16A0A997046CBA910AF9C596177FA41925C999F9A17262AC3E13CB3BC0CE0FE8724763F6F6FF18644C0
j = 42
MD = 3867C3C5FB86A1F2BF00A72F9B9EE0D6452A00E3B8645A4F3AD5129790ACEBCB3FC9BCE9B4DE3B5D834F6778769172D729F2C2F86B5B146CBE4B2F3C6A85BE06A578101837328D5B7AD367364B0FE8E5EF386D8580F47AEE1D2C56FC1F7E63DA
j = 43
MD = 2F5B7F942A80C690CA18C0A42293BE471C398FC692F249654768BF939B549499222E2E320FBD48529A3AFBE1378230F191F56976F037D89B6E836B760222D83467A0685676B052EF1964043DA7B2A1EEF98845EFA4950E2F8902CA516271E793
j = 44
MD = 61E369598713A9CCA1777D7230C8B0EA3413CF2827332EF64EB9004B5D67675B365BAD2F77F2CA3838F534D62637AEC5BADBACA9B7E4E9FBF11549CDA12C0C0ACB89507445A4CDD64C9D0A785E9083AB457512BD8C6927C5338EDE77EDA6B2C9
j = 45
MD = 4CBF7C3FB744C11665D3E4455EDCA7BB45EE391C6BC82A4BF36757DE762426D48149452E22E2935CA37D153B585D673D07CA41F7B41A5C5BBFF14499DD7437D5CE24C33B792FF5EA80DF709F21ADBD2663928AF0D7850EFF98450E580C6A6A03
j = 46
MD = CDEF212FDFED0A61053621BFECC925EBBABADD4EA7BC1559F45BCBAB91BF82DD72053CE90C112FCE95DD9999BEA22F267114B623CC269D3A422A1BB80E1304BFA8DF539C6DFE6744898584C3E7140580A212C67B7B58848D7F93F13C714B2E70
j = 47
MD = 27BE42A730FB8C4452FB206984A6A71FE1A0F52F4BB4342AA50ECAE54DD500615CE0A8DF748111E6629CD9A6C69F306FADE1A1C1AD99F6B394735D11D2C0228C04E72E00F892364E01F0C8194D383FA01E6119F4C23E06EFA38278E692014D73
j = 48
MD = 6C678BB99E179C60CABCB0A8686A9EF72C21705EFC1A7DE12435CF434259ACBB47E3C3DE1E5C89005AA50225D0CD3FAF8EDA074C8423356F239E4E32DAD61C055A9B10C5BDECA2682B3E680F2BEC8245B0ADB88B7CF460A0154B549363AF14BB
j = 49
MD = 8FDE04EA6BB7B558C9AD9AB161DA54DE525014990210EF105CBC78FE7FAE65310468ED5641B327466F6139234277DF795E739F6AF97009C53FCDA19426BCAFDB35B6C9E21F8DED7FF23735BCFED757ABA660C2949B62275653FEBB81E1A8EE4D
j = 50
MD = 951117903F1E70B9A9EB4E58E4F0E7B732BDB7CD93CDA0B2B5EABA7069CBDADC824B1B03CC045CE7C2C8C09059D63239F1629422DCC916A08A0A5F250E4F6BC009773F4E3326261F16D9D94821970886D119B5A79A278148E460EEDA44126339
j = 51
MD = 741C962E306AFE40A5F324FB696B8511AEF98474C7A2E08B24EA476F3129A6918383F6DBF22C374A580B50829F7F083B043D3975777D957B1537BFAD49C389468B4CC204703590230ECFB330943FBB383D94E21145EC31D7FF6C5EBB59A06D95
j = 52
MD = 95432097DDB78C8C22B1FBA57C92780278896A20D9347FFE06122EEEEF876DC6F4C14517F494E76A41FB8DF532F029EBBDD4C0ECA632EBF036B5984F4C6C35765CDD42722D4A8E12D878ED6414315FAF515E0B10C91E33293781B2DE68DD8CC0
j = 53
MD = 459807CB429722769ABBC0DFC8F1AD439EA5DEA2A72DB31C8318E9497C0EE65B7556D65291D4C9C5CD52319ABA01C254907086B0B98F8B2E114BA7E165EF7AF365D4283407DEC1E939CDCC7E3BEE7E3BDB6655531F196944851C346F09A22C24
j = 54
MD = 18EE970107222E909FD65D8A3C4C75CD964AACECB21E1652AC0E21E6D5E5B1143E797BF8125169AF44FF5589C40C14966674D263368481189C97452EF60C437FF8502A09D9BC0766BE6FC27FBED059AE98CA805F3B2C108368D9C519F0BF56E1
j = 55
MD = F8823867EA1C055FB2F56CE7AFA847F522F80F1ED32E4D5BF1A426BB0D5F55B18E832C5FC9B691D4F695C4F5B0417AAA1E84DE2F8C10CB095D62E07BD72098A9AA164212DD42302AD89D9BAEB4C27F956A63D15361B91CD862297B82355B9B00
j = 56
MD = 836C26E5B176811F48B683628671172BADF80EDD494DFB792626EEE42BDB9261351284945CA08785BA399C1514E58A6ECE8FFD14C46EAC46009C44CA7540962D775667D505A3508EDAD9215C41380851DDD6A0A083DF6A28FBC9D5D824887E12
j = 57
MD = 0A378607CE110B7AA9B5484A0A3270CDA9DCA6E273B0D14228935BA75154E515B4C4F0E48128A73669742A2F59B02A6596961518EF3019D69BD3C99F3F92E8D1605B4614E7BCFB636DE3196FBB1FBAA29A4BFD7A316A66C945098988FC85A279
j = 58
MD = 3B1B09221F53532F9035E70DF6A187B8ABC7CAA65A370E1FD34702F1F8ED31FC27BDB53F7D1DDDAB27329578D16C9D6D7BFE6CFF40E881A934FA6ADA8D8623295855C8645ABF3B23E7385C01C3C43AF4ECB455F15FFE14B9282B94F621691D7D
j = 59
MD = C07DBD4F816883944AE56113D9FE3BDDC4A4E486D1074A08279AE01C9CBC0AA43883BCBD2B5D2750FD322D0E0DDE11F543A031A51DBD08EBBE5B842519C39CAFCDA560F8EEAB9CEBC7459193BD53151D53430D9C430F82EF916BBB5B4058BE4D
j = 60
MD = E0DA7EDF07E3F54EF1EC82E2A4EDDD6069EF96C01409F0D17DF42889880406DE4EC373660D901665CE8796814AB59C7124F522EDD18E5AB5E764F654A10E12983A70EDCDB4D6EBA80B5E13D4618779B2FCCC8A2B2BFC965D5673E5003757DD06
j = 61
MD = 2CB680EB3D2786B46451E48AD113F37B33A15488188DAAE2EAF0CBD45304869F41654C9BAB16F1AD6E66A6437E3B58E10DA4B4F41713D69EC08FCF456BDF4F8955DD3F227E624555FB480C621B035EF902FB9CD38D53DE54923E305C9C460A04
j = 62
MD = 7754AE818AD37529F13275A42BF205B86F9BCFD35B9D74E258FFCE6A75FCFED80267021CDC9B3F395C253A705F4F0B01442228471D52A8519B664F51C984B6916DF7EB74A9FA2FD0CE9228451B532193787C3D48EBA1A3F9B626B0590FE1A3BF
j = 63
MD = 5E139E10A608FE1F20CE3DEA1F41D9669DA4CB203C96B5ECD6B3B79FD5F4F12D9038E94C9042F1D0992E91FAF1ACB7AE47BAFB254CA2BD11F9AE4E694E99ED0F3A9EBE1F283A3070BAF30A4363D8FFD84B5E644F142E181B0F2AA1756358C7CE
j = 64
MD = 4AAA131CC20AEFE47A401232F57D3E2EC2F5EFA2B08F3A3A04E87D6ECB598F33965FBB2F81306F45A88A415D5B01EC4DB5E3E05FFCE0F3D0883A2FBDAD8B783D261453E62C76D8603C73E0CC3D214EF21AE0DCEE366138535993B25B564F946F
j = 65
MD = FE7E2C3B83A73DAD7D6F247C96F0493FCD0A09EB01FF2308114BA4B5D9211C756453B30D53B15E70C719B3A180F71D7708796B6E2F76D424F2277D7F7BDCCEF1793FFED029F9D0C62AF4A4EF49544877D6646490CB2DFA05CB15B87F73E43B51
j = 66
MD = BB52354FBFB53CD420CBAA100C312235FE8CA09C7C8870A4C307F76FEEE4960B1372155E0EC60CC3393B92F2630A2F33BF302E56C05AB70132DE513174CAC06D12FF2C4266B8F671EFAA9399992129CBD993840B653BFCA29782E14200C6FFDE
j = 67
MD = BD749B9F9929D6ED0159F6ECA4E8DE392A407B5284BEE68847D36BFD481FD30DAA295928423B719EECBAAEC836C7369D1A597BE38D0D7C6A70021433F4DD8F9CB104F6C9E10FD91B6A2EE9DAC6A6B4229BF150423E981F33EF8F318D2B097B30
j = 68
MD = EFE3545BC18AEF08963CA6D3BA747616B6CD0638C9C299CA1D0F2354FF1D9FFE48D0678E4F546ACA83106AE9B2215971CAC6898BACEB45AB058F05F5A653DDEC692BA029B972A67527D308D6B73C20808A67840A6F1863E476A088E1C4110BF5
j = 69
MD = D60D2DDC59311C29049AFCDBAC76771EAB62301D5902C80C35195A172ABF4D69F1B67BB28734D16F397A3A978510D9D6A8EF0550E912B7C9DB8EDDE8A2FBDD23DF639C4DF48D7C4AF8A8D36840026675A4580EA445375F9E573B72F63BDD08B3
j = 70
MD = E39F48397D50141CD003A2587AC4308782013B79048CD00D217B0B07D4D0CBF6CB757AE4BDB655B29D99EAFDDB5328AFBCD2C641086CC83E2CE2FE8321250B04847994D41965F8EA7830B854C677070A4BC31240589B7744698EC4766ABB9F0E
j = 71
MD = D39AEAE3C7672944A6AB8BDAC7B00C054218124A51B343A1D3F6291896D7FD44FB0113E341AB38C6C7F16DDB55DFAE416D0F098BB473DC69EF0A2369DF7C765174010F1F7990B880B7E13D06597C260F14DC610426649014A3AF3177DA0089BB
j = 72
MD = BD2BD2E124DFD2ACA1DA22745D8BB346DB28CC07945FB3C090B95C1CB8FE63CC5BF827389BE9827169AB059248D36CB73CF07D36B8D53B85D81A28BB2E4020328123AF810D909132319CDD529D65CCC409649E6384EAA0CF990FAAEBB472C92C
j = 73
MD = DF7B79A0F88C853D3934F398DA9EA6A31C962AC23C944A29EDFCA2224BF20A9D54A3106BF9F147F8A41507A949748D0EAFCBFC659D886E2370F41D77009B21C698D8843837747C569674154D84C1693A539238A36161A71AA16650B8AF8E7E66
j = 74
MD = 5D359B05759F20C5F99CEB4CCF558946D82D4AB42531513260313C426D10E0BBAD1A72D45AAA12FDEF28AC7DCB9FDBDC12DCF73799F00E156A1A1379E038812852C45722499B5F288BD64446F845F66BDCEADE8E7AF24A4B47AF1E4F2ABCD502
j = 75
MD = F6BFBAFDCE412FEE0EC0F785C08378F50519847A268E9C6EC74C57F1AC505E9927CD482794B6CD6C011475811ACE516215FB50D87DC7F40C8E53290F01A4E1DFA2193AE98CA0AAB72E55CD2DE69C23E7CB453903413740D692D4D9AD81F6211C
j = 76
MD = 2C6A1D19BA35A83A40B39C07F95F3252A61C955F612E761BFF90B0ED5E0DEADA4DDB723E3ECF278C20492712A903AE148871C767301E368BC8DF39B1C9AA6D0EE39ED168B506928D8DF7B082BDB271A2E6FD54432B675675EFBB514B3F1FCBF4
j = 77
MD = 53DE1C33A9B8E2042A1A2E8AB4FC95B7ADFDE36F25161B183A564DF78F0F60940A1C8E1B4BBE7C9A53DF2ED814451BAF02BC07F0307979457C7D451DEA02DFE0B7411DDF58CFD73BCAC315C9521B5A0BD3E32061F97C82F696C84227CA2646FF
j = 78
MD = 17B3B4367F1F6A09F9D113E270BDB4B94C2399DAE39D9425B9A9D8210B6866DF3EBB536BDCC19C611EBA5EE2F65266172ECC05D4E737D3B0CE3394C94F448EDCA31B787D11DCC9D8D3A0D507E69E6F48BD99FB853717136DC35130E99034F1E3
j = 79
MD = EC408AFE72C2DEDD9A9505BCBAB927C05334C194202656364E352907FEDF3683D14C335C05C0BC4110E287B419E3F18B7A23E5321A79DFA1B95C6EE2A1A1254784D59A5DECD5B4E9AFA694D2CA0A4BA2C3A4546573C0615EFF56FF6C7A60A786
j = 80
MD = FBCFD745EFB167B219D0A50533470887CA6FBC3537DFD52298483490D7A25F78B5A38C1FD9FDF8DBB6CF4B5936DD3D20A34CEB79DE640F6B4B5D0E99CE0AED94AEAD6DF1C9A5920A1F45712BC070A6A1612AE962127D192C3C8C3FF437D8468B
j = 81
MD = 4DDE2B408C8733E3262817E292ED9F60C46A1AAD5CE83486A4C561036DAC35814BD3AE973057F46FB7C89FE754CB6D6EA27E874A53F20CB3536981CA521E6407FD7E16DAA04F3164C53D30747093B27E8DDD88DA27A3411FBF53270E663C9FE9
j = 82
MD = AE4119545BD60867057F765B27B222065B71421F00EE4AB3D5F0C84E6F8023A8480F48F031F66BBAFD7A1C1164F2971EFEE2D2EEB093EF6578EB467A275DBBFEA697DCF1D9EBD7427F92DFB8EB750C6A3C5EA565710BD939BF16C0D4068E5D03
j = 83
MD = 7F658B8DC689A50B7521A6BB377812D3749B69502A086A04EAAAD0BD32E1F72B8573C1FDB3FB6804A40861C6C9BF5CD3F044BB9789CDCA6B4752C7DEB851F9D5CCCB3B0A507585F8511D236259976D1566C2A369F8A96FFAAA78366B225FAB0B
j = 84
MD = B9B444491D717842443A2586ED03F473D1E1CAD8192117E1963332716C6A3A7757F80AB953BC16AE3B5599F921A23B870116A11C602F55D525FB5A61B532EF987E80D8D62E7062848B06684BA80F08BD6C0ABED3BF92C41FCB512A91DEE97D12
j = 85
MD = DC1B80C788E137B8FB58461080E3DC6A30EBEDA0C6B4A0204205B7B653A81C35EED7D1CCDA062D864889FCBAAC9524BA79118BE5A1F6E1AC42E911555EA464AECFC08BE8FF144AE18868F0780FFFDC759A77F00412812CDDC48672B34C4E610E
j = 86
MD = 276C9D4339065B1C560BA4B73CBBC3599913EF0CC9AC6331EB21BF7C5D3EB882A909A9F8D7E8DF43EE328191398E6B8007FA740D62D5FAD63D97FA805929987EC6819E58A9E0CCD60745B8695516D5CE05E0433F9FD501E7F7711259BE540D60
j = 87
MD = 1D8620DAE08B01204CC25CED8051EBB2BB5E4481BE84E4D4B4E97B8F0B789A003D3009BA907C6934FFF65580BF1110F57AC22852141D65076859AFC545D4A76140DB20B01FC42C4208185F14BEE4F41BA0E6D820D1ADF0B4FBE468DAE02DDD35
j = 88
MD = E827C48271A35F86F14B42A83485D4CC6629CE928BBE7EDE5909472979CE61DC58A772C2BE733F9FB7F6FF8C3B1BC3501A5E541CA0541AC5270C2FB8E456B341ABA9241D141B4C2DF993CA59D61C8C4B9A7185DAC46CA5C4F270B48D4D195B06
j = 89
MD = 4C577FC5B3020463E29CA78A5EDEA85303944D9E9DCA96EE7B4E3CA9E7C9512E5066CEDCFD8A681CE3B2A5854DDBE2EA34E102F15A63F0DB001BB90CD2246161577EEB0DDFA55B4013EEEF05FBA72E09F809F9AD9DB06EBB09B7C07FEDA6744A
j = 90
MD = 8D479ABCE4EB26A1A0C6B06730184B479BA1DA850511A475A8581F2E2F2B10C2D1F7E04ABB4A9E4A6D2035675389BC6248286E19EFA6FED06EE84BCC08F2B689C32E40B019DCC0BAE5822F00431EA1968647A4C4EEC29817D0612F2BE83B5F9F
j = 91
MD = BE0654966DA156C54E01FC370F99A63EDDD59FB7F32F1094DD940806B2F9DC8CCC8A558890D5E708D636504F0258702FFA0445FA45B32A85F94DB3A5FC732E9FC5C7C00B79670A0E56660BA9ECC2EE995F753AA8432857372AAFC5ADF7CC033A
j = 92
MD = 5B0A6E59112F72B5C1DD97E3C95EC54E2283D7760B6BE16545502FF75FF2FC2C2B8B19044CE1E18D32FB5B7FF4A04FA48FF8EFA3115A222C302F6A673B23AEA32152BE9EED38D6614EE250A0708F412E660BFD7A6F2EAA18DA2FEFE55D8ACFC3
j = 93
MD = AD48BFD443437572D7C72692828924B7EA3E380BFFCF76F3C9D6A01ACCBD78A323EB3B44803293032F6AED0B55899CE6482A0182E0653A2B4F47D42C056654F677D73D9AA8233ECABC286661A719BD6AC8DC9F682824A8E0930C33060B41EE36
j = 94
MD = DDA7C17C873A1782330FF388B105C1A1CF0D81F6C569CB0DCB79335B98E9D948D0908837621665E92ED4AB29358507CBC23151126210BAFDCACB1EB313EF0824756FC9630ECD705F897DA814362C47210DFFA3555624F505380B09EE62CBAC35
j = 95
MD = 9F875A884D4AAC0F07C396D2595AB21F9D01BD307106BDC86731AC9A42F93BE7E6DE679AA3FD553AAE3168D7F259E82093B711F6B38818C7D126003172BF67FA1C66771116465A3C910F40A9CB2238FB5B317407B52133310E21F5931BAD89FA
j = 96
MD = 8BC90C1E136170644DBCD99DF3F0C5EA227B28756A9933041335C5E16AFE8384C33F098C1EE60FAC548C8BD18419CE1CE67F933B1F8D923A5ABFD875AB1CED9E4D63AB2AFF5C9DA27C0A274C1B16D752848FDDEAAE43ADA8F55A577F28FBFB27
j = 97
MD = 13E47AAFDC74B6513C053D933E821FEAF2F8A070C81E528BA764918275764A9296CB5052001C3CFF2659BC64F617EA0C4FA16C6A88E0C6D2A8CFA339BD3D96CF30B7C0BF9FF1DDA4EBB230B0DA1FC950B6D5A146AECC8D880744FBD3A1587432
j = 98
MD = B65E9D7D0098FBECC07AEFB5F5703C2376EB9CFA1058F77ADB3D6D220CC1B3E8F82768CD0DC23B27FA12ECD9E69FE5358F2E1466441D4D138D1F479C88135653C587BBF26F84A9FD97772EFE4DEBFD7A9CE382518F14BFC42F3D4B0661B0FF11
j = 99
MD = DB9C4D6FDDDD0C2CAE1DDD9C687D9E9B849439AFE1E04317B9D831A676BF872E4493EFE07DD5EDA3B7060DFBA0A5392BF5C5B8699FF8DEF0C479F56C690B534F0EBB7BC1FC23F40F6DFC964434870302DFD45E16884854B2F78844B53F53C56C

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

328
ubi1024_asm.S Normal file
View File

@ -0,0 +1,328 @@
/* ubi1024_asm.S */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* \author Daniel Otte
* \email daniel.otte@rub.de
* \date 2009-03-16
* \license GPLv3 or later
*/
#include "avr-asm-macros.S"
/******************************************************************************/
/*
void ubi1024_init(ubi1024_ctx_t* ctx, const void* g, uint8_t type){
memset(ctx->tweak, 0, 15);
ctx->tweak[15] = 0x40+type;
memcpy(ctx->g, g, UBI1024_BLOCKSIZE_B);
}
*/
/*
* param ctx: r24:r25
* param g: r22:r23
* param type: r20
*/
.global ubi1024_init
ubi1024_init:
movw r26, r24
ldi r21, 15
1: st X+, r1
dec r21
brne 1b
ori r20, 0x40
st X+, r20
ldi r21, 128
movw r30, r22
2: ld r20, Z+
st X+, r20
dec r21
brne 2b
ret
/******************************************************************************/
/*
void ubi1024_ctx2hash(void* dest, const ubi1024_ctx_t* ctx){
memcpy(dest, ctx->g, UBI1024_BLOCKSIZE_B);
}
*/
/*
* param dest: r24:r24
* param ctx: r22:r23
*/
.global ubi1024_ctx2hash
ubi1024_ctx2hash:
movw r26, r24
movw r30, r22
adiw r30, 16
ldi r22, 128
1: ld r23, Z+
st X+, r23
dec r22
brne 1b
ret
/******************************************************************************/
/*
void ubi1024_nextBlock(ubi1024_ctx_t* ctx, const void* block){
threefish1024_ctx_t tfctx;
((uint64_t*)(ctx->tweak))[0] += UBI1024_BLOCKSIZE_B;
threefish1024_init(ctx->g, ctx->tweak, &tfctx);
memcpy(ctx->g, block, UBI1024_BLOCKSIZE_B);
threefish1024_enc(ctx->g, &tfctx);
memxor(ctx->g, block, UBI1024_BLOCKSIZE_B);
ctx->tweak[15] &= (uint8_t)~0x40;
}
*/
/*
* param ctx: r24:r25
* param block: r22:r23
*/
CTX0 = 2
CTX1 = 3
BLOCK0 = 4
BLOCK1 = 5
TFCTX0 = 6
TFCTX1 = 7
.global ubi1024_nextBlock
ubi1024_nextBlock:
stack_alloc_large 20*8
push_range 2, 7
adiw r30, 1 /* Z points to tfctx */
movw TFCTX0, r30
movw CTX0, r24
movw BLOCK0, r22
movw r26, r24
/* add BLOCKSIZE_B (128) to tweak */
ldi r25, 128
ld r24, X
add r24, r25
st X+, r24
ldi r25, 11
1: ld r24, X
adc r24, r1
st X+, r24
dec r25
brne 1b
/* call threefish1024_init */
movw r24, CTX0
adiw r24, 16
movw r22, CTX0
movw CTX0, r24 /* CTX points to ctx->g */
movw r20, TFCTX0
rcall threefish1024_init
/* copy block to ctx->g */
movw r26, CTX0
movw r30, BLOCK0
ldi r25, 128
1: ld r24, Z+
st X+, r24
dec r25
brne 1b
/* call threefish1024_enc */
movw r24, CTX0
movw r22, TFCTX0
rcall threefish1024_enc
/* xor block into ctx->g */
movw r26, BLOCK0
movw r30, CTX0
ldi r25, 128
1: ld r24, X+
ld r23, Z
eor r23, r24
st Z+, r23
dec r25
brne 1b
/* clear 'first' bit in tweak */
sbiw r30, 1+2
sbiw r30, 63
sbiw r30, 63
ld r24, Z
andi r24, ~0x40
st Z, r24
exit:
pop_range 2, 7
stack_free_large2 20*8
ret
/******************************************************************************/
/*
void ubi1024_lastBlock(ubi1024_ctx_t* ctx, const void* block, uint16_t length_b){
threefish1024_ctx_t tfctx;
while(length_b>UBI1024_BLOCKSIZE){
ubi1024_nextBlock(ctx, block);
block = (uint8_t*)block + UBI1024_BLOCKSIZE_B;
length_b -= UBI1024_BLOCKSIZE;
}
ctx->tweak[15] |= 0x80;
((uint64_t*)(ctx->tweak))[0] += (length_b+7)/8;
if(length_b & 0x07)
ctx->tweak[14] |= 0x80;
threefish1024_init(ctx->g, ctx->tweak, &tfctx);
memset(ctx->g, 0, UBI1024_BLOCKSIZE_B);
memcpy(ctx->g, block, (length_b+7)/8);
if(length_b & 0x07)
ctx->g[(length_b+7)/8-1] |= 0x80>>(length_b&7);
threefish1024_enc(ctx->g, &tfctx);
memxor(ctx->g, block, (length_b+7)/8);
if(length_b & 0x07){
ctx->g[((length_b+7)/8)-1] ^= 0x80>>(length_b&7);
}
}
*/
/*
* param ctx: r24:r25
* param block: r22:r23
* param ength_b: r20:r21
*/
MASK_B = 8
LEN_B = 9
TFCTX0 = 10
TFCTX1 = 11
CTX0 = 12
CTX1 = 13
BLOCK0 = 14
BLOCK1 = 15
LENGTH0 = 16
LENGTH1 = 17
.global ubi1024_lastBlock
ubi1024_lastBlock:
/* run nextBlock for preceding blocks*/
push_range 8, 17
movw CTX0, r24
movw BLOCK0, r22
movw LENGTH0, r20
1: cpi LENGTH1, 5
brlo 2f
movw r24, CTX0
movw r22, BLOCK0
rcall ubi1024_nextBlock
ldi r25, 128
add BLOCK0, r25
adc BLOCK1, r1
subi LENGTH1, 4
rjmp 1b
2: cpi LENGTH1, 4
brlo 3f
tst LENGTH0
breq 3f
movw r24, CTX0
movw r22, BLOCK0
rcall ubi1024_nextBlock
ldi r25, 128
add BLOCK0, r25
adc BLOCK1, r1
subi LENGTH1, 4
3: /* now the real fun */
stack_alloc_large 20*8
adiw r30, 1
movw TFCTX0, r30
/* calculate LEN_B */
movw r24, LENGTH0
adiw r24, 7
lsr r25
ror r24
lsr r25
ror r24
lsr r25
ror r24
mov LEN_B, r24
/* add length to tweak */
movw r30, CTX0
ld r24, Z
add r24, LEN_B
st Z+, r24
ldi r25, 11
1: ld r24, Z
adc r24, r1
st Z+, r24
dec r25
brne 1b
/* set 'final' bit*/
movw r30, CTX0
ldd r24, Z+15
ori r24, 0x80
std Z+15, r24
/* store in MASK_B if we do bit processing and set 'BitPad' bit*/
clr MASK_B
mov r24, LENGTH0
andi r24, 0x07
tst r24
breq 4f
ldd r25, Z+14
ori r25, 0x80
std Z+14, r25
ldi r25, 0x80
mov MASK_B, r25
1: lsr MASK_B
dec r24
brne 1b
4: /* call threefish1024_init*/
movw r24, CTX0
adiw r24, 16
movw r22, CTX0
movw CTX0, r24 /* CTX points at ctx->g */
movw r20, TFCTX0
rcall threefish1024_init
/* copy block to ctx->g */
movw r26, BLOCK0
movw r30, CTX0
mov r24, LEN_B
ldi r25, 128
sub r25, LEN_B
tst r24
1: breq 2f
ld r22, X+
st Z+, r22
dec r24
rjmp 1b
2: tst MASK_B
breq 29f
or r22, MASK_B
st -Z, r22
adiw r30, 1
29: tst r25
3: breq 4f
st Z+, r1
dec r25
rjmp 3b
4: /* call threefish1024_enc */
movw r24, CTX0
movw r22, TFCTX0
rcall threefish1024_enc
/* xor block into ctx->g */
movw r30, CTX0
movw r26, BLOCK0
tst LEN_B
5: breq 6f
ld r22, X+
ld r23, Z
eor r23, r22
st Z+, r23
dec LEN_B
rjmp 5b
6: tst MASK_B
breq 7f
eor r23, MASK_B
st -Z, r23
7: stack_free_large2 20*8
pop_range 8, 17
ret

326
ubi512_asm.S Normal file
View File

@ -0,0 +1,326 @@
/* ubi512_asm.S */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* \author Daniel Otte
* \email daniel.otte@rub.de
* \date 2009-03-25
* \license GPLv3 or later
*/
#include "avr-asm-macros.S"
/******************************************************************************/
/*
void ubi512_init(ubi512_ctx_t* ctx, const void* g, uint8_t type){
memset(ctx->tweak, 0, 15);
ctx->tweak[15] = 0x40+type;
memcpy(ctx->g, g, UBI512_BLOCKSIZE_B);
}
*/
/*
* param ctx: r24:r25
* param g: r22:r23
* param type: r20
*/
.global ubi512_init
ubi512_init:
movw r26, r24
ldi r21, 15
1: st X+, r1
dec r21
brne 1b
ori r20, 0x40
st X+, r20
ldi r21, 64
movw r30, r22
2: ld r20, Z+
st X+, r20
dec r21
brne 2b
ret
/******************************************************************************/
/*
void ubi512_ctx2hash(void* dest, const ubi512_ctx_t* ctx){
memcpy(dest, ctx->g, UBI512_BLOCKSIZE_B);
}
*/
/*
* param dest: r24:r24
* param ctx: r22:r23
*/
.global ubi512_ctx2hash
ubi512_ctx2hash:
movw r26, r24
movw r30, r22
adiw r30, 16
ldi r22, 64
1: ld r23, Z+
st X+, r23
dec r22
brne 1b
ret
/******************************************************************************/
/*
void ubi512_nextBlock(ubi512_ctx_t* ctx, const void* block){
threefish512_ctx_t tfctx;
((uint64_t*)(ctx->tweak))[0] += UBI512_BLOCKSIZE_B;
threefish512_init(ctx->g, ctx->tweak, &tfctx);
memcpy(ctx->g, block, UBI512_BLOCKSIZE_B);
threefish512_enc(ctx->g, &tfctx);
memxor(ctx->g, block, UBI512_BLOCKSIZE_B);
ctx->tweak[15] &= (uint8_t)~0x40;
}
*/
/*
* param ctx: r24:r25
* param block: r22:r23
*/
CTX0 = 2
CTX1 = 3
BLOCK0 = 4
BLOCK1 = 5
TFCTX0 = 6
TFCTX1 = 7
.global ubi512_nextBlock
ubi512_nextBlock:
stack_alloc_large 12*8
push_range 2, 7
adiw r30, 1 /* Z points to tfctx */
movw TFCTX0, r30
movw CTX0, r24
movw BLOCK0, r22
movw r26, r24
/* add BLOCKSIZE_B (64) to tweak */
ldi r25, 64
ld r24, X
add r24, r25
st X+, r24
ldi r25, 11
1: ld r24, X
adc r24, r1
st X+, r24
dec r25
brne 1b
/* call threefish512_init */
movw r24, CTX0
adiw r24, 16
movw r22, CTX0
movw CTX0, r24 /* CTX points to ctx->g */
movw r20, TFCTX0
rcall threefish512_init
/* copy block to ctx->g */
movw r26, CTX0
movw r30, BLOCK0
ldi r25, 64
1: ld r24, Z+
st X+, r24
dec r25
brne 1b
/* call threefish512_enc */
movw r24, CTX0
movw r22, TFCTX0
rcall threefish512_enc
/* xor block into ctx->g */
movw r26, BLOCK0
movw r30, CTX0
ldi r25, 64
1: ld r24, X+
ld r23, Z
eor r23, r24
st Z+, r23
dec r25
brne 1b
/* clear 'first' bit in tweak */
sbiw r30, 33
sbiw r30, 32
ld r24, Z
andi r24, ~0x40
st Z, r24
exit:
pop_range 2, 7
stack_free_large 12*8
ret
/******************************************************************************/
/*
void ubi512_lastBlock(ubi512_ctx_t* ctx, const void* block, uint16_t length_b){
threefish512_ctx_t tfctx;
while(length_b>UBI512_BLOCKSIZE){
ubi512_nextBlock(ctx, block);
block = (uint8_t*)block + UBI512_BLOCKSIZE_B;
length_b -= UBI512_BLOCKSIZE;
}
ctx->tweak[15] |= 0x80;
((uint64_t*)(ctx->tweak))[0] += (length_b+7)/8;
if(length_b & 0x07)
ctx->tweak[14] |= 0x80;
threefish512_init(ctx->g, ctx->tweak, &tfctx);
memset(ctx->g, 0, UBI512_BLOCKSIZE_B);
memcpy(ctx->g, block, (length_b+7)/8);
if(length_b & 0x07)
ctx->g[(length_b+7)/8-1] |= 0x80>>(length_b&7);
threefish512_enc(ctx->g, &tfctx);
memxor(ctx->g, block, (length_b+7)/8);
if(length_b & 0x07){
ctx->g[((length_b+7)/8)-1] ^= 0x80>>(length_b&7);
}
}
*/
/*
* param ctx: r24:r25
* param block: r22:r23
* param ength_b: r20:r21
*/
MASK_B = 8
LEN_B = 9
TFCTX0 = 10
TFCTX1 = 11
CTX0 = 12
CTX1 = 13
BLOCK0 = 14
BLOCK1 = 15
LENGTH0 = 16
LENGTH1 = 17
.global ubi512_lastBlock
ubi512_lastBlock:
/* run nextBlock for preceding blocks*/
push_range 8, 17
movw CTX0, r24
movw BLOCK0, r22
movw LENGTH0, r20
1: cpi LENGTH1, 3
brlo 2f
movw r24, CTX0
movw r22, BLOCK0
rcall ubi512_nextBlock
ldi r25, 64
add BLOCK0, r25
adc BLOCK1, r1
subi LENGTH1, 2
rjmp 1b
2: cpi LENGTH1, 2
brlo 3f
tst LENGTH0
breq 3f
movw r24, CTX0
movw r22, BLOCK0
rcall ubi512_nextBlock
ldi r25, 64
add BLOCK0, r25
adc BLOCK1, r1
subi LENGTH1, 2
3: /* now the real fun */
stack_alloc_large 8*12
adiw r30, 1
movw TFCTX0, r30
/* calculate LEN_B */
movw r24, LENGTH0
adiw r24, 7
lsr r25
ror r24
lsr r25
ror r24
lsr r24
mov LEN_B, r24
/* add length to tweak */
movw r30, CTX0
ld r24, Z
add r24, LEN_B
st Z+, r24
ldi r25, 11
1: ld r24, Z
adc r24, r1
st Z+, r24
dec r25
brne 1b
/* set 'final' bit*/
movw r30, CTX0
ldd r24, Z+15
ori r24, 0x80
std Z+15, r24
/* store in MASk_B if we do bit processing and set 'BitPad' bit*/
clr MASK_B
mov r24, LENGTH0
andi r24, 0x07
tst r24
breq 4f
ldd r25, Z+14
ori r25, 0x80
std Z+14, r25
ldi r25, 0x80
mov MASK_B, r25
1: lsr MASK_B
dec r24
brne 1b
4: /* call threefish512_init*/
movw r24, CTX0
adiw r24, 16
movw r22, CTX0
movw CTX0, r24 /* CTX points at ctx->g */
movw r20, TFCTX0
rcall threefish512_init
/* copy block to ctx->g */
movw r26, BLOCK0
movw r30, CTX0
mov r24, LEN_B
ldi r25, 64
sub r25, LEN_B
tst r24
1: breq 2f
ld r22, X+
st Z+, r22
dec r24
rjmp 1b
2: tst MASK_B
breq 29f
or r22, MASK_B
st -Z, r22
adiw r30, 1
29: tst r25
3: breq 4f
st Z+, r1
dec r25
rjmp 3b
4: /* call threefish512_enc */
movw r24, CTX0
movw r22, TFCTX0
rcall threefish512_enc
/* xor block into ctx->g */
movw r30, CTX0
movw r26, BLOCK0
tst LEN_B
5: breq 6f
ld r22, X+
ld r23, Z
eor r23, r22
st Z+, r23
dec LEN_B
rjmp 5b
6: tst MASK_B
breq 7f
eor r23, MASK_B
st -Z, r23
7: stack_free_large 8*12
pop_range 8, 17
ret