+BlueMidnightWish

This commit is contained in:
bg 2009-04-28 18:36:54 +00:00
parent 14d8fdb5b5
commit 55961d7663
34 changed files with 53468 additions and 11 deletions

385
bmw_large.c Normal file
View File

@ -0,0 +1,385 @@
/* bmw_large.c */
/*
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/>.
*/
/*
* \file bmw_large.c
* \author Daniel Otte
* \email daniel.otte@rub.de
* \date 2009-04-27
* \license GPLv3 or later
*
*/
#include <stdint.h>
#include <string.h>
#include "bmw_large.h"
#define SHL64(a,n) ((a)<<(n))
#define SHR64(a,n) ((a)>>(n))
#define ROTL64(a,n) (((a)<<(n))|((a)>>(64-(n))))
#define ROTR64(a,n) (((a)>>(n))|((a)<<(64-(n))))
#define BUG24 1
#define DEBUG 0
#if DEBUG
#include "cli.h"
void ctx_dump(const bmw_large_ctx_t* ctx){
uint8_t i;
cli_putstr_P(PSTR("\r\n==== ctx dump ===="));
for(i=0; i<16;++i){
cli_putstr_P(PSTR("\r\n h["));
cli_hexdump(&i, 1);
cli_putstr_P(PSTR("] = "));
cli_hexdump_rev(&(ctx->h[i]), 8);
}
cli_putstr_P(PSTR("\r\n counter = "));
cli_hexdump(&(ctx->counter), 4);
}
void dump_x(const uint64_t* q, uint8_t elements, char x){
uint8_t i;
cli_putstr_P(PSTR("\r\n==== "));
cli_putc(x);
cli_putstr_P(PSTR(" dump ===="));
for(i=0; i<elements;++i){
cli_putstr_P(PSTR("\r\n "));
cli_putc(x);
cli_putstr_P(PSTR("["));
cli_hexdump(&i, 1);
cli_putstr_P(PSTR("] = "));
cli_hexdump_rev(&(q[i]), 8);
}
}
#else
#define ctx_dump(x)
#define dump_x(a,b,c)
#endif
uint64_t bmw_large_s0(uint64_t x){
uint64_t r;
r = SHR64(x, 1)
^ SHL64(x, 3)
^ ROTL64(x, 4)
^ ROTR64(x, 64-37);
return r;
}
uint64_t bmw_large_s1(uint64_t x){
uint64_t r;
r = SHR64(x, 1)
^ SHL64(x, 2)
^ ROTL64(x,13)
^ ROTR64(x,64-43);
return r;
}
uint64_t bmw_large_s2(uint64_t x){
uint64_t r;
r = SHR64(x, 2)
^ SHL64(x, 1)
^ ROTL64(x, 19)
^ ROTR64(x, 64-53);
return r;
}
uint64_t bmw_large_s3(uint64_t x){
uint64_t r;
r = SHR64(x, 2)
^ SHL64(x, 2)
^ ROTL64(x, 28)
^ ROTR64(x, 64-59);
return r;
}
uint64_t bmw_large_s4(uint64_t x){
uint64_t r;
r = SHR64(x, 1)
^ x;
return r;
}
uint64_t bmw_large_s5(uint64_t x){
uint64_t r;
r = SHR64(x, 2)
^ x;
return r;
}
uint64_t bmw_large_r1(uint64_t x){
uint64_t r;
r = ROTL64(x, 5);
return r;
}
uint64_t bmw_large_r2(uint64_t x){
uint64_t r;
r = ROTL64(x, 11);
return r;
}
uint64_t bmw_large_r3(uint64_t x){
uint64_t r;
r = ROTL64(x, 27);
return r;
}
uint64_t bmw_large_r4(uint64_t x){
uint64_t r;
r = ROTL64(x, 32);
return r;
}
uint64_t bmw_large_r5(uint64_t x){
uint64_t r;
r = ROTR64(x, 64-37);
return r;
}
uint64_t bmw_large_r6(uint64_t x){
uint64_t r;
r = ROTR64(x, 64-43);
return r;
}
uint64_t bmw_large_r7(uint64_t x){
uint64_t r;
r = ROTR64(x, 64-53);
return r;
}
uint64_t bmw_large_expand1(uint8_t j, const uint64_t* q, const void* m){
uint64_t(*s[])(uint64_t) = {bmw_large_s1, bmw_large_s2, bmw_large_s3, bmw_large_s0};
uint64_t r;
uint8_t i;
r = 0x0555555555555555LL*(j+16);
for(i=0; i<16; ++i){
r += s[i%4](q[j+i]);
}
r += ((uint64_t*)m)[j];
r += ((uint64_t*)m)[j+3];
r -= ((uint64_t*)m)[j+10];
return r;
}
uint64_t bmw_large_expand2(uint8_t j, const uint64_t* q, const void* m){
uint64_t(*rf[])(uint64_t) = {bmw_large_r1, bmw_large_r2, bmw_large_r3,
bmw_large_r4, bmw_large_r5, bmw_large_r6,
bmw_large_r7};
uint64_t r;
uint8_t i;
r = 0x0555555555555555LL*(j+16);
for(i=0; i<14; i+=2){
r += q[j+i];
}
for(i=0; i<14; i+=2){
r += rf[i/2](q[j+i+1]);
}
r += bmw_large_s5(q[j+14]);
r += bmw_large_s4(q[j+15]);
r += ((uint64_t*)m)[j];
r += ((uint64_t*)m)[(j+3)%16];
r -= ((uint64_t*)m)[(j+10)%16];
return r;
}
void bmw_large_f0(uint64_t* q, const uint64_t* h, const void* m){
uint64_t t[16];
uint8_t i;
uint64_t(*s[])(uint64_t)={ bmw_large_s0, bmw_large_s1, bmw_large_s2,
bmw_large_s3, bmw_large_s4 };
for(i=0; i<16; ++i){
t[i] = h[i] ^ ((uint64_t*)m)[i];
}
dump_x(t, 16, 'T');
q[ 0] = (t[ 5] - t[ 7] + t[10] + t[13] + t[14]);
q[ 1] = (t[ 6] - t[ 8] + t[11] + t[14] - t[15]);
q[ 2] = (t[ 0] + t[ 7] + t[ 9] - t[12] + t[15]);
q[ 3] = (t[ 0] - t[ 1] + t[ 8] - t[10] + t[13]);
q[ 4] = (t[ 1] + t[ 2] + t[ 9] - t[11] - t[14]);
q[ 5] = (t[ 3] - t[ 2] + t[10] - t[12] + t[15]);
q[ 6] = (t[ 4] - t[ 0] - t[ 3] - t[11] + t[13]);
q[ 7] = (t[ 1] - t[ 4] - t[ 5] - t[12] - t[14]);
q[ 8] = (t[ 2] - t[ 5] - t[ 6] + t[13] - t[15]);
q[ 9] = (t[ 0] - t[ 3] + t[ 6] - t[ 7] + t[14]);
q[10] = (t[ 8] - t[ 1] - t[ 4] - t[ 7] + t[15]);
q[11] = (t[ 8] - t[ 0] - t[ 2] - t[ 5] + t[ 9]);
q[12] = (t[ 1] + t[ 3] - t[ 6] - t[ 9] + t[10]);
q[13] = (t[ 2] + t[ 4] + t[ 7] + t[10] + t[11]);
q[14] = (t[ 3] - t[ 5] + t[ 8] - t[11] - t[12]);
q[15] = (t[12] - t[ 4] - t[ 6] - t[ 9] + t[13]);
dump_x(q, 16, 'W');
for(i=0; i<16; ++i){
q[i] = s[i%5](q[i]);
}
}
void bmw_large_f1(uint64_t* q, const void* m){
uint8_t i;
q[16] = bmw_large_expand1(0, q, m);
q[17] = bmw_large_expand1(1, q, m);
for(i=2; i<16; ++i){
q[16+i] = bmw_large_expand2(i, q, m);
}
}
void bmw_large_f2(uint64_t* h, const uint64_t* q, const void* m){
uint64_t xl=0, xh;
uint8_t i;
for(i=16;i<24;++i){
xl ^= q[i];
}
xh = xl;
for(i=24;i<32;++i){
xh ^= q[i];
}
#if DEBUG
cli_putstr_P(PSTR("\r\n XL = "));
cli_hexdump_rev(&xl, 4);
cli_putstr_P(PSTR("\r\n XH = "));
cli_hexdump_rev(&xh, 4);
#endif
memcpy(h, m, 16*8);
h[0] ^= SHL64(xh, 5) ^ SHR64(q[16], 5);
h[1] ^= SHR64(xh, 7) ^ SHL64(q[17], 8);
h[2] ^= SHR64(xh, 5) ^ SHL64(q[18], 5);
h[3] ^= SHR64(xh, 1) ^ SHL64(q[19], 5);
h[4] ^= SHR64(xh, 3) ^ q[20];
h[5] ^= SHL64(xh, 6) ^ SHR64(q[21], 6);
h[6] ^= SHR64(xh, 4) ^ SHL64(q[22], 6);
h[7] ^= SHR64(xh,11) ^ SHL64(q[23], 2);
for(i=0; i<8; ++i){
h[i] += xl ^ q[24+i] ^ q[i];
}
for(i=0; i<8; ++i){
h[8+i] ^= xh ^ q[24+i];
h[8+i] += ROTL64(h[(4+i)%8],i+9);
}
h[ 8] += SHL64(xl, 8) ^ q[23] ^ q[ 8];
h[ 9] += SHR64(xl, 6) ^ q[16] ^ q[ 9];
h[10] += SHL64(xl, 6) ^ q[17] ^ q[10];
h[11] += SHL64(xl, 4) ^ q[18] ^ q[11];
h[12] += SHR64(xl, 3) ^ q[19] ^ q[12];
h[13] += SHR64(xl, 4) ^ q[20] ^ q[13];
h[14] += SHR64(xl, 7) ^ q[21] ^ q[14];
h[15] += SHR64(xl, 2) ^ q[22] ^ q[15];
}
void bmw_large_nextBlock(bmw_large_ctx_t* ctx, const void* block){
uint64_t q[32];
dump_x(block, 16, 'M');
bmw_large_f0(q, ctx->h, block);
dump_x(q, 16, 'Q');
bmw_large_f1(q, block);
dump_x(q, 32, 'Q');
bmw_large_f2(ctx->h, q, block);
ctx->counter += 1;
ctx_dump(ctx);
}
void bmw_large_lastBlock(bmw_large_ctx_t* ctx, const void* block, uint16_t length_b){
uint8_t buffer[128];
while(length_b >= BMW_LARGE_BLOCKSIZE){
bmw_large_nextBlock(ctx, block);
length_b -= BMW_LARGE_BLOCKSIZE;
block = (uint8_t*)block + BMW_LARGE_BLOCKSIZE_B;
}
memset(buffer, 0, 128);
memcpy(buffer, block, (length_b+7)/8);
buffer[length_b>>3] |= 0x80 >> (length_b&0x07);
if(length_b+1>128*8-64){
bmw_large_nextBlock(ctx, buffer);
memset(buffer, 0, 128-8);
ctx->counter -= 1;
}
*((uint64_t*)&(buffer[128-8])) = (uint64_t)(ctx->counter*1024LL)+(uint64_t)length_b;
bmw_large_nextBlock(ctx, buffer);
}
void bmw384_init(bmw384_ctx_t* ctx){
uint8_t i;
ctx->h[0] = 0x0001020304050607LL;
for(i=1; i<16; ++i){
ctx->h[i] = ctx->h[i-1]+ 0x0808080808080808LL;
}
#if BUG24
ctx->h[6] = 0x3031323324353637LL;
#endif
ctx->counter=0;
ctx_dump(ctx);
}
void bmw512_init(bmw512_ctx_t* ctx){
uint8_t i;
ctx->h[0] = 0x8081828384858687LL;
for(i=1; i<16; ++i){
ctx->h[i] = ctx->h[i-1]+ 0x0808080808080808LL;
}
ctx->counter=0;
ctx_dump(ctx);
}
void bmw384_nextBlock(bmw384_ctx_t* ctx, const void* block){
bmw_large_nextBlock(ctx, block);
}
void bmw512_nextBlock(bmw512_ctx_t* ctx, const void* block){
bmw_large_nextBlock(ctx, block);
}
void bmw384_lastBlock(bmw384_ctx_t* ctx, const void* block, uint16_t length_b){
bmw_large_lastBlock(ctx, block, length_b);
}
void bmw512_lastBlock(bmw512_ctx_t* ctx, const void* block, uint16_t length_b){
bmw_large_lastBlock(ctx, block, length_b);
}
void bmw384_ctx2hash(void* dest, const bmw384_ctx_t* ctx){
memcpy(dest, &(ctx->h[10]), 384/8);
}
void bmw512_ctx2hash(void* dest, const bmw512_ctx_t* ctx){
memcpy(dest, &(ctx->h[8]), 512/8);
}
void bmw384(void* dest, const void* msg, uint32_t length_b){
bmw_large_ctx_t ctx;
bmw384_init(&ctx);
while(length_b>=BMW_LARGE_BLOCKSIZE){
bmw_large_nextBlock(&ctx, msg);
length_b -= BMW_LARGE_BLOCKSIZE;
msg = (uint8_t*)msg + BMW_LARGE_BLOCKSIZE_B;
}
bmw_large_lastBlock(&ctx, msg, length_b);
bmw384_ctx2hash(dest, &ctx);
}
void bmw512(void* dest, const void* msg, uint32_t length_b){
bmw_large_ctx_t ctx;
bmw512_init(&ctx);
while(length_b>=BMW_LARGE_BLOCKSIZE){
bmw_large_nextBlock(&ctx, msg);
length_b -= BMW_LARGE_BLOCKSIZE;
msg = (uint8_t*)msg + BMW_LARGE_BLOCKSIZE_B;
}
bmw_large_lastBlock(&ctx, msg, length_b);
bmw512_ctx2hash(dest, &ctx);
}

65
bmw_large.h Normal file
View File

@ -0,0 +1,65 @@
/* bmw_large.h */
/*
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/>.
*/
/*
* \file bmw_large.h
* \author Daniel Otte
* \email daniel.otte@rub.de
* \date 2009-04-27
* \license GPLv3 or later
*
*/
#ifndef BMW_LARGE_H_
#define BMW_LARGE_H_
#include <stdint.h>
#define BMW_LARGE_BLOCKSIZE 1024
#define BMW_LARGE_BLOCKSIZE_B ((BMW_LARGE_BLOCKSIZE+7)/8)
#define BMW384_BLOCKSIZE BMW_LARGE_BLOCKSIZE
#define BMW384_BLOCKSIZE_B BMW_LARGE_BLOCKSIZE_B
#define BMW512_BLOCKSIZE BMW_LARGE_BLOCKSIZE
#define BMW512_BLOCKSIZE_B BMW_LARGE_BLOCKSIZE_B
typedef struct {
uint64_t h[16];
uint32_t counter;
} bmw_large_ctx_t;
typedef bmw_large_ctx_t bmw384_ctx_t;
typedef bmw_large_ctx_t bmw512_ctx_t;
void bmw384_init(bmw384_ctx_t* ctx);
void bmw512_init(bmw512_ctx_t* ctx);
void bmw_large_nextBlock(bmw_large_ctx_t* ctx, const void* block);
void bmw_large_lastBlock(bmw_large_ctx_t* ctx, const void* block, uint16_t length_b);
void bmw384_nextBlock(bmw384_ctx_t* ctx, const void* block);
void bmw384_lastBlock(bmw384_ctx_t* ctx, const void* block, uint16_t length_b);
void bmw512_nextBlock(bmw512_ctx_t* ctx, const void* block);
void bmw512_lastBlock(bmw512_ctx_t* ctx, const void* block, uint16_t length_b);
void bmw384_ctx2hash(void* dest, const bmw384_ctx_t* ctx);
void bmw512_ctx2hash(void* dest, const bmw512_ctx_t* ctx);
void bmw384(void* dest, const void* msg, uint32_t length_b);
void bmw512(void* dest, const void* msg, uint32_t length_b);
#endif /* BMW_LARGE_H_ */

385
bmw_small.c Normal file
View File

@ -0,0 +1,385 @@
/* bmw_small.c */
/*
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/>.
*/
/*
* \file bmw_small.c
* \author Daniel Otte
* \email daniel.otte@rub.de
* \date 2009-04-27
* \license GPLv3 or later
*
*/
#include <stdint.h>
#include <string.h>
#include "bmw_small.h"
#define SHL32(a,n) ((a)<<(n))
#define SHR32(a,n) ((a)>>(n))
#define ROTL32(a,n) (((a)<<(n))|((a)>>(32-(n))))
#define ROTR32(a,n) (((a)>>(n))|((a)<<(32-(n))))
#define BUG24 1
#define DEBUG 0
#if DEBUG
#include "cli.h"
void ctx_dump(const bmw_small_ctx_t* ctx){
uint8_t i;
cli_putstr_P(PSTR("\r\n==== ctx dump ===="));
for(i=0; i<16;++i){
cli_putstr_P(PSTR("\r\n h["));
cli_hexdump(&i, 1);
cli_putstr_P(PSTR("] = "));
cli_hexdump_rev(&(ctx->h[i]), 4);
}
cli_putstr_P(PSTR("\r\n counter = "));
cli_hexdump(&(ctx->counter), 4);
}
void dump_x(const uint32_t* q, uint8_t elements, char x){
uint8_t i;
cli_putstr_P(PSTR("\r\n==== "));
cli_putc(x);
cli_putstr_P(PSTR(" dump ===="));
for(i=0; i<elements;++i){
cli_putstr_P(PSTR("\r\n "));
cli_putc(x);
cli_putstr_P(PSTR("["));
cli_hexdump(&i, 1);
cli_putstr_P(PSTR("] = "));
cli_hexdump_rev(&(q[i]), 4);
}
}
#else
#define ctx_dump(x)
#define dump_x(a,b,c)
#endif
uint32_t bmw_small_s0(uint32_t x){
uint32_t r;
r = SHR32(x, 1)
^ SHL32(x, 3)
^ ROTL32(x, 4)
^ ROTR32(x, 13);
return r;
}
uint32_t bmw_small_s1(uint32_t x){
uint32_t r;
r = SHR32(x, 1)
^ SHL32(x, 2)
^ ROTL32(x, 8)
^ ROTR32(x, 9);
return r;
}
uint32_t bmw_small_s2(uint32_t x){
uint32_t r;
r = SHR32(x, 2)
^ SHL32(x, 1)
^ ROTL32(x, 12)
^ ROTR32(x, 7);
return r;
}
uint32_t bmw_small_s3(uint32_t x){
uint32_t r;
r = SHR32(x, 2)
^ SHL32(x, 2)
^ ROTL32(x, 15)
^ ROTR32(x, 3);
return r;
}
uint32_t bmw_small_s4(uint32_t x){
uint32_t r;
r = SHR32(x, 1)
^ x;
return r;
}
uint32_t bmw_small_s5(uint32_t x){
uint32_t r;
r = SHR32(x, 2)
^ x;
return r;
}
uint32_t bmw_small_r1(uint32_t x){
uint32_t r;
r = ROTL32(x, 3);
return r;
}
uint32_t bmw_small_r2(uint32_t x){
uint32_t r;
r = ROTL32(x, 7);
return r;
}
uint32_t bmw_small_r3(uint32_t x){
uint32_t r;
r = ROTL32(x, 13);
return r;
}
uint32_t bmw_small_r4(uint32_t x){
uint32_t r;
r = ROTL32(x, 16);
return r;
}
uint32_t bmw_small_r5(uint32_t x){
uint32_t r;
r = ROTR32(x, 13);
return r;
}
uint32_t bmw_small_r6(uint32_t x){
uint32_t r;
r = ROTR32(x, 9);
return r;
}
uint32_t bmw_small_r7(uint32_t x){
uint32_t r;
r = ROTR32(x, 5);
return r;
}
uint32_t bmw_small_expand1(uint8_t j, const uint32_t* q, const void* m){
uint32_t(*s[])(uint32_t) = {bmw_small_s1, bmw_small_s2, bmw_small_s3, bmw_small_s0};
uint32_t r;
uint8_t i;
r = 0x05555555*(j+16);
for(i=0; i<16; ++i){
r += s[i%4](q[j+i]);
}
r += ((uint32_t*)m)[j];
r += ((uint32_t*)m)[j+3];
r -= ((uint32_t*)m)[j+10];
return r;
}
uint32_t bmw_small_expand2(uint8_t j, const uint32_t* q, const void* m){
uint32_t(*rf[])(uint32_t) = {bmw_small_r1, bmw_small_r2, bmw_small_r3,
bmw_small_r4, bmw_small_r5, bmw_small_r6,
bmw_small_r7};
uint32_t r;
uint8_t i;
r = 0x05555555*(j+16);
for(i=0; i<14; i+=2){
r += q[j+i];
}
for(i=0; i<14; i+=2){
r += rf[i/2](q[j+i+1]);
}
r += bmw_small_s5(q[j+14]);
r += bmw_small_s4(q[j+15]);
r += ((uint32_t*)m)[j];
r += ((uint32_t*)m)[(j+3)%16];
r -= ((uint32_t*)m)[(j+10)%16];
return r;
}
void bmw_small_f0(uint32_t* q, const uint32_t* h, const void* m){
uint32_t t[16];
uint8_t i;
uint32_t(*s[])(uint32_t)={ bmw_small_s0, bmw_small_s1, bmw_small_s2,
bmw_small_s3, bmw_small_s4 };
for(i=0; i<16; ++i){
t[i] = h[i] ^ ((uint32_t*)m)[i];
}
dump_x(t, 16, 'T');
q[ 0] = (t[ 5] - t[ 7] + t[10] + t[13] + t[14]);
q[ 1] = (t[ 6] - t[ 8] + t[11] + t[14] - t[15]);
q[ 2] = (t[ 0] + t[ 7] + t[ 9] - t[12] + t[15]);
q[ 3] = (t[ 0] - t[ 1] + t[ 8] - t[10] + t[13]);
q[ 4] = (t[ 1] + t[ 2] + t[ 9] - t[11] - t[14]);
q[ 5] = (t[ 3] - t[ 2] + t[10] - t[12] + t[15]);
q[ 6] = (t[ 4] - t[ 0] - t[ 3] - t[11] + t[13]);
q[ 7] = (t[ 1] - t[ 4] - t[ 5] - t[12] - t[14]);
q[ 8] = (t[ 2] - t[ 5] - t[ 6] + t[13] - t[15]);
q[ 9] = (t[ 0] - t[ 3] + t[ 6] - t[ 7] + t[14]);
q[10] = (t[ 8] - t[ 1] - t[ 4] - t[ 7] + t[15]);
q[11] = (t[ 8] - t[ 0] - t[ 2] - t[ 5] + t[ 9]);
q[12] = (t[ 1] + t[ 3] - t[ 6] - t[ 9] + t[10]);
q[13] = (t[ 2] + t[ 4] + t[ 7] + t[10] + t[11]);
q[14] = (t[ 3] - t[ 5] + t[ 8] - t[11] - t[12]);
q[15] = (t[12] - t[ 4] - t[ 6] - t[ 9] + t[13]);
dump_x(q, 16, 'W');
for(i=0; i<16; ++i){
q[i] = s[i%5](q[i]);
}
}
void bmw_small_f1(uint32_t* q, const void* m){
uint8_t i;
q[16] = bmw_small_expand1(0, q, m);
q[17] = bmw_small_expand1(1, q, m);
for(i=2; i<16; ++i){
q[16+i] = bmw_small_expand2(i, q, m);
}
}
void bmw_small_f2(uint32_t* h, const uint32_t* q, const void* m){
uint32_t xl=0, xh;
uint8_t i;
for(i=16;i<24;++i){
xl ^= q[i];
}
xh = xl;
for(i=24;i<32;++i){
xh ^= q[i];
}
#if DEBUG
cli_putstr_P(PSTR("\r\n XL = "));
cli_hexdump_rev(&xl, 4);
cli_putstr_P(PSTR("\r\n XH = "));
cli_hexdump_rev(&xh, 4);
#endif
memcpy(h, m, 16*4);
h[0] ^= SHL32(xh, 5) ^ SHR32(q[16], 5);
h[1] ^= SHR32(xh, 7) ^ SHL32(q[17], 8);
h[2] ^= SHR32(xh, 5) ^ SHL32(q[18], 5);
h[3] ^= SHR32(xh, 1) ^ SHL32(q[19], 5);
h[4] ^= SHR32(xh, 3) ^ q[20];
h[5] ^= SHL32(xh, 6) ^ SHR32(q[21], 6);
h[6] ^= SHR32(xh, 4) ^ SHL32(q[22], 6);
h[7] ^= SHR32(xh,11) ^ SHL32(q[23], 2);
for(i=0; i<8; ++i){
h[i] += xl ^ q[24+i] ^ q[i];
}
for(i=0; i<8; ++i){
h[8+i] ^= xh ^ q[24+i];
h[8+i] += ROTL32(h[(4+i)%8],i+9);
}
h[ 8] += SHL32(xl, 8) ^ q[23] ^ q[ 8];
h[ 9] += SHR32(xl, 6) ^ q[16] ^ q[ 9];
h[10] += SHL32(xl, 6) ^ q[17] ^ q[10];
h[11] += SHL32(xl, 4) ^ q[18] ^ q[11];
h[12] += SHR32(xl, 3) ^ q[19] ^ q[12];
h[13] += SHR32(xl, 4) ^ q[20] ^ q[13];
h[14] += SHR32(xl, 7) ^ q[21] ^ q[14];
h[15] += SHR32(xl, 2) ^ q[22] ^ q[15];
}
void bmw_small_nextBlock(bmw_small_ctx_t* ctx, const void* block){
uint32_t q[32];
dump_x(block, 16, 'M');
bmw_small_f0(q, ctx->h, block);
dump_x(q, 16, 'Q');
bmw_small_f1(q, block);
dump_x(q, 32, 'Q');
bmw_small_f2(ctx->h, q, block);
ctx->counter += 1;
ctx_dump(ctx);
}
void bmw_small_lastBlock(bmw_small_ctx_t* ctx, const void* block, uint16_t length_b){
uint8_t buffer[64];
while(length_b >= BMW_SMALL_BLOCKSIZE){
bmw_small_nextBlock(ctx, block);
length_b -= BMW_SMALL_BLOCKSIZE;
block = (uint8_t*)block + BMW_SMALL_BLOCKSIZE_B;
}
memset(buffer, 0, 64);
memcpy(buffer, block, (length_b+7)/8);
buffer[length_b>>3] |= 0x80 >> (length_b&0x07);
if(length_b+1>64*8-64){
bmw_small_nextBlock(ctx, buffer);
memset(buffer, 0, 64-8);
ctx->counter -= 1;
}
*((uint64_t*)&(buffer[64-8])) = (uint64_t)(ctx->counter*512LL)+(uint64_t)length_b;
bmw_small_nextBlock(ctx, buffer);
}
void bmw224_init(bmw224_ctx_t* ctx){
uint8_t i;
ctx->h[0] = 0x00010203;
for(i=1; i<16; ++i){
ctx->h[i] = ctx->h[i-1]+ 0x04040404;
}
#if BUG24
ctx->h[13] = 0x24353637;
#endif
ctx->counter=0;
ctx_dump(ctx);
}
void bmw256_init(bmw256_ctx_t* ctx){
uint8_t i;
ctx->h[0] = 0x40414243;
for(i=1; i<16; ++i){
ctx->h[i] = ctx->h[i-1]+ 0x04040404;
}
ctx->counter=0;
ctx_dump(ctx);
}
void bmw224_nextBlock(bmw224_ctx_t* ctx, const void* block){
bmw_small_nextBlock(ctx, block);
}
void bmw256_nextBlock(bmw256_ctx_t* ctx, const void* block){
bmw_small_nextBlock(ctx, block);
}
void bmw224_lastBlock(bmw224_ctx_t* ctx, const void* block, uint16_t length_b){
bmw_small_lastBlock(ctx, block, length_b);
}
void bmw256_lastBlock(bmw256_ctx_t* ctx, const void* block, uint16_t length_b){
bmw_small_lastBlock(ctx, block, length_b);
}
void bmw224_ctx2hash(void* dest, const bmw224_ctx_t* ctx){
memcpy(dest, &(ctx->h[9]), 224/8);
}
void bmw256_ctx2hash(void* dest, const bmw256_ctx_t* ctx){
memcpy(dest, &(ctx->h[8]), 256/8);
}
void bmw224(void* dest, const void* msg, uint32_t length_b){
bmw_small_ctx_t ctx;
bmw224_init(&ctx);
while(length_b>=BMW_SMALL_BLOCKSIZE){
bmw_small_nextBlock(&ctx, msg);
length_b -= BMW_SMALL_BLOCKSIZE;
msg = (uint8_t*)msg + BMW_SMALL_BLOCKSIZE_B;
}
bmw_small_lastBlock(&ctx, msg, length_b);
bmw224_ctx2hash(dest, &ctx);
}
void bmw256(void* dest, const void* msg, uint32_t length_b){
bmw_small_ctx_t ctx;
bmw256_init(&ctx);
while(length_b>=BMW_SMALL_BLOCKSIZE){
bmw_small_nextBlock(&ctx, msg);
length_b -= BMW_SMALL_BLOCKSIZE;
msg = (uint8_t*)msg + BMW_SMALL_BLOCKSIZE_B;
}
bmw_small_lastBlock(&ctx, msg, length_b);
bmw256_ctx2hash(dest, &ctx);
}

65
bmw_small.h Normal file
View File

@ -0,0 +1,65 @@
/* bmw_small.h */
/*
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/>.
*/
/*
* \file bmw_small.h
* \author Daniel Otte
* \email daniel.otte@rub.de
* \date 2009-04-27
* \license GPLv3 or later
*
*/
#ifndef BMW_SMALL_H_
#define BMW_SMALL_H_
#include <stdint.h>
#define BMW_SMALL_BLOCKSIZE 512
#define BMW_SMALL_BLOCKSIZE_B ((BMW_SMALL_BLOCKSIZE+7)/8)
#define BMW224_BLOCKSIZE BMW_SMALL_BLOCKSIZE
#define BMW224_BLOCKSIZE_B BMW_SMALL_BLOCKSIZE_B
#define BMW256_BLOCKSIZE BMW_SMALL_BLOCKSIZE
#define BMW256_BLOCKSIZE_B BMW_SMALL_BLOCKSIZE_B
typedef struct {
uint32_t h[16];
uint32_t counter;
} bmw_small_ctx_t;
typedef bmw_small_ctx_t bmw224_ctx_t;
typedef bmw_small_ctx_t bmw256_ctx_t;
void bmw224_init(bmw224_ctx_t* ctx);
void bmw256_init(bmw256_ctx_t* ctx);
void bmw_small_nextBlock(bmw_small_ctx_t* ctx, const void* block);
void bmw_small_lastBlock(bmw_small_ctx_t* ctx, const void* block, uint16_t length_b);
void bmw224_nextBlock(bmw224_ctx_t* ctx, const void* block);
void bmw224_lastBlock(bmw224_ctx_t* ctx, const void* block, uint16_t length_b);
void bmw256_nextBlock(bmw256_ctx_t* ctx, const void* block);
void bmw256_lastBlock(bmw256_ctx_t* ctx, const void* block, uint16_t length_b);
void bmw224_ctx2hash(void* dest, const bmw224_ctx_t* ctx);
void bmw256_ctx2hash(void* dest, const bmw256_ctx_t* ctx);
void bmw224(void* dest, const void* msg, uint32_t length_b);
void bmw256(void* dest, const void* msg, uint32_t length_b);
#endif /* BMW_SMALL_H_ */

67
hfal_bmw_large.c Normal file
View File

@ -0,0 +1,67 @@
/* hfal_bmw_large.c */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2008 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/>.
*/
/**
* \file hfal_bmw_large.c
* \email daniel.otte@rub.de
* \author Daniel Otte
* \date 2009-04-28
* \license GPLv3 or later
*
*/
#include <avr/pgmspace.h>
#include <stdlib.h>
#include "hashfunction_descriptor.h"
#include "bmw_large.h"
static const char bmw384_str[] PROGMEM = "BlueMidnightWish-384";
static const char bmw512_str[] PROGMEM = "BlueMidnightWish-512";
const hfdesc_t bmw384_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
bmw384_str,
sizeof(bmw384_ctx_t),
BMW384_BLOCKSIZE,
384,
(hf_init_fpt)bmw384_init,
(hf_nextBlock_fpt)bmw384_nextBlock,
(hf_lastBlock_fpt)bmw384_lastBlock,
(hf_ctx2hash_fpt)bmw384_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)bmw384
};
const hfdesc_t bmw512_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
bmw512_str,
sizeof(bmw512_ctx_t),
BMW512_BLOCKSIZE,
512,
(hf_init_fpt)bmw512_init,
(hf_nextBlock_fpt)bmw512_nextBlock,
(hf_lastBlock_fpt)bmw512_lastBlock,
(hf_ctx2hash_fpt)bmw512_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)bmw512
};

37
hfal_bmw_large.h Normal file
View File

@ -0,0 +1,37 @@
/* hfal_bmw_large.h */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2008 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/>.
*/
/**
* \file hfal_bmw_large.h
* \email daniel.otte@rub.de
* \author Daniel Otte
* \date 2009-04-28
* \license GPLv3 or later
*
*/
#ifndef HFAL_BMW_LARGE_H_
#define HFAL_BMW_LARGE_H_
#include <avr/pgmspace.h>
#include "hashfunction_descriptor.h"
extern const hfdesc_t bmw384_desc;
extern const hfdesc_t bmw512_desc;
#endif /* HFAL_BMW_LARGE_H_ */

67
hfal_bmw_small.c Normal file
View File

@ -0,0 +1,67 @@
/* hfal_bmw_small.c */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2008 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/>.
*/
/**
* \file hfal_bmw_small.c
* \email daniel.otte@rub.de
* \author Daniel Otte
* \date 2009-04-28
* \license GPLv3 or later
*
*/
#include <avr/pgmspace.h>
#include <stdlib.h>
#include "hashfunction_descriptor.h"
#include "bmw_small.h"
static const char bmw224_str[] PROGMEM = "BlueMidnightWish-224";
static const char bmw256_str[] PROGMEM = "BlueMidnightWish-256";
const hfdesc_t bmw224_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
bmw224_str,
sizeof(bmw224_ctx_t),
BMW224_BLOCKSIZE,
224,
(hf_init_fpt)bmw224_init,
(hf_nextBlock_fpt)bmw224_nextBlock,
(hf_lastBlock_fpt)bmw224_lastBlock,
(hf_ctx2hash_fpt)bmw224_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)bmw224
};
const hfdesc_t bmw256_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
bmw256_str,
sizeof(bmw256_ctx_t),
BMW256_BLOCKSIZE,
256,
(hf_init_fpt)bmw256_init,
(hf_nextBlock_fpt)bmw256_nextBlock,
(hf_lastBlock_fpt)bmw256_lastBlock,
(hf_ctx2hash_fpt)bmw256_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)bmw256
};

37
hfal_bmw_small.h Normal file
View File

@ -0,0 +1,37 @@
/* hfal_bmw_small.h */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2008 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/>.
*/
/**
* \file hfal_bmw_small.h
* \email daniel.otte@rub.de
* \author Daniel Otte
* \date 2009-04-28
* \license GPLv3 or later
*
*/
#ifndef HFAL_BMW_SMALL_H_
#define HFAL_BMW_SMALL_H_
#include <avr/pgmspace.h>
#include "hashfunction_descriptor.h"
extern const hfdesc_t bmw224_desc;
extern const hfdesc_t bmw256_desc;
#endif /* HFAL_BMW_SMALL_H_ */

View File

@ -57,7 +57,7 @@ def send_md(md_string)
$sp.print(md_string[i].chr)
# print("DBG s: "+ md_string[i].chr) if $debug
if(i%20==19)
# sleep(0.1)
sleep(0.01)
end
end
end
@ -99,6 +99,7 @@ def run_test(filename)
putc('*')
else
putc('!')
# printf("\nshould: %s\ngot: %s\n",lb,avr_md)
errors += 1;
end
pos += 1

14
mkfiles/bmw_c.mk Normal file
View File

@ -0,0 +1,14 @@
# Makefile for BlueMidnightWish
ALGO_NAME := BMW_C
# comment out the following line for removement of BlueMidnightWish from the build process
HASHES += $(ALGO_NAME)
$(ALGO_NAME)_OBJ := bmw_small.o bmw_large.o
$(ALGO_NAME)_TEST_BIN := main-bmw-test.o debug.o uart.o hexdigit_tab.o \
dbz_strings.o nessie_common.o cli.o string-extras.o performance_test.o \
nessie_hash_test.o hfal-basic.o hfal_bmw_small.o hfal_bmw_large.o shavs.o
$(ALGO_NAME)_NESSIE_TEST := test nessie
$(ALGO_NAME)_PERFORMANCE_TEST := performance

View File

@ -80,7 +80,7 @@ uint16_t cli_getc_cecho(void){
/**
* \brief ouputs a zero-terminated string from ram to the console
*/
void cli_putstr(char* s){
void cli_putstr(const char* s){
if(!cli_tx)
return;
while(*s)
@ -126,7 +126,7 @@ uint8_t cli_getsn(char* s, uint16_t n){
* Dumps length bytes from data to the console ouput. The dump
* will have 2*n continous hexadecimal characters.
*/
void cli_hexdump(void* data, uint16_t length){
void cli_hexdump(const void* data, uint16_t length){
if(!cli_tx)
return;
while(length--){
@ -142,7 +142,7 @@ void cli_hexdump(void* data, uint16_t length){
* bytes are dumped in reverse order. This is usefull to dump
* integers which ar e in little endian order.
*/
void cli_hexdump_rev(void* data, uint16_t length){
void cli_hexdump_rev(const void* data, uint16_t length){
if(!cli_tx)
return;
data = (uint8_t*)data + length -1;
@ -158,7 +158,7 @@ void cli_hexdump_rev(void* data, uint16_t length){
* Like cli_hexdump but bytes are seperated with a single space
* on the console output.
*/
void cli_hexdump2(void* data, uint16_t length){
void cli_hexdump2(const void* data, uint16_t length){
if(!cli_tx)
return;
while(length--){
@ -174,7 +174,7 @@ void cli_hexdump2(void* data, uint16_t length){
* Like cli_hexdump but bytes are seperated with a single space
* on the console output.
*/
void cli_hexdump_block(void* data, uint16_t length, uint8_t indent, uint8_t width){
void cli_hexdump_block(const void* data, uint16_t length, uint8_t indent, uint8_t width){
uint16_t i;
uint8_t j;
if(!cli_tx)

View File

@ -57,12 +57,12 @@ void cli_putc(char c);
uint16_t cli_getc(void);
uint16_t cli_getc_cecho(void);
uint8_t cli_getsn(char* s, uint16_t n);
void cli_putstr(char* s);
void cli_putstr(const char* s);
void cli_putstr_P(PGM_P s);
void cli_hexdump(void* data, uint16_t length);
void cli_hexdump_rev(void* data, uint16_t length);
void cli_hexdump2(void* data, uint16_t length);
void cli_hexdump_block(void* data, uint16_t length, uint8_t indent, uint8_t width);
void cli_hexdump(const void* data, uint16_t length);
void cli_hexdump_rev(const void* data, uint16_t length);
void cli_hexdump2(const void* data, uint16_t length);
void cli_hexdump_block(const void* data, uint16_t length, uint8_t indent, uint8_t width);
void echo_ctrl(char* s);
int8_t cmd_interface(PGM_VOID_P cmd_desc);

305
test_src/main-bmw-test.c Normal file
View File

@ -0,0 +1,305 @@
/* main-shabal-test.c */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2008 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/>.
*/
/*
* shabal test-suit
*
*/
#include "config.h"
#include "serial-tools.h"
#include "uart.h"
#include "debug.h"
#include "bmw_small.h"
#include "bmw_large.h"
#include "cli.h"
#include "hfal_bmw_small.h"
#include "hfal_bmw_large.h"
#include "shavs.h"
#include "nessie_hash_test.h"
#include "performance_test.h"
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
char* algo_name = "BlueMidnightWish";
/*****************************************************************************
* additional validation-functions *
*****************************************************************************/
void performance_bmw(void){
uint64_t t;
char str[16];
uint8_t data[128];
uint8_t hash[512/8];
bmw_small_ctx_t ctx1;
bmw_large_ctx_t ctx2;
calibrateTimer();
print_overhead();
memset(data, 0, 64);
startTimer(1);
bmw224_init(&ctx1);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tctx-gen time (224): "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw256_init(&ctx1);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tctx-gen time (256): "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw384_init(&ctx2);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tctx-gen time (384): "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw512_init(&ctx2);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tctx-gen time (512): "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw_small_nextBlock(&ctx1, data);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tone-block (small) time: "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw_large_nextBlock(&ctx2, data);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tone-block (large) time: "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw_small_lastBlock(&ctx1, data, 0);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tlast block (small) time: "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw_large_lastBlock(&ctx2, data, 0);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tlast block (large) time: "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw224_ctx2hash(hash, &ctx1);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tctx2hash time (224): "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw256_ctx2hash(hash, &ctx1);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tctx2hash time (256): "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw384_ctx2hash(hash, &ctx2);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tctx2hash time (384): "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
startTimer(1);
bmw512_ctx2hash(hash, &ctx2);
t = stopTimer();
cli_putstr_P(PSTR("\r\n\tctx2hash time (512): "));
ultoa((unsigned long)t, str, 10);
cli_putstr(str);
cli_putstr_P(PSTR("\r\n"));
}
void testrun_nessie_bmw(void){
nessie_hash_ctx.hashsize_b = 224;
nessie_hash_ctx.name = "BlueMidnigthWish-224";
nessie_hash_ctx.blocksize_B = 512/8;
nessie_hash_ctx.ctx_size_B = sizeof(bmw224_ctx_t);
nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)bmw224_init;
nessie_hash_ctx.hash_next = (nessie_hash_next_fpt)bmw224_nextBlock;
nessie_hash_ctx.hash_last = (nessie_hash_last_fpt)bmw224_lastBlock;
nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)bmw224_ctx2hash;
nessie_hash_run();
nessie_hash_ctx.hashsize_b = 256;
nessie_hash_ctx.name = "BlueMidnigthWish-256";
nessie_hash_ctx.blocksize_B = 512/8;
nessie_hash_ctx.ctx_size_B = sizeof(bmw256_ctx_t);
nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)bmw256_init;
nessie_hash_ctx.hash_next = (nessie_hash_next_fpt)bmw256_nextBlock;
nessie_hash_ctx.hash_last = (nessie_hash_last_fpt)bmw256_lastBlock;
nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)bmw256_ctx2hash;
nessie_hash_run();
nessie_hash_ctx.hashsize_b = 384;
nessie_hash_ctx.name = "BlueMidnigthWish-384";
nessie_hash_ctx.blocksize_B = 1024/8;
nessie_hash_ctx.ctx_size_B = sizeof(bmw384_ctx_t);
nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)bmw384_init;
nessie_hash_ctx.hash_next = (nessie_hash_next_fpt)bmw384_nextBlock;
nessie_hash_ctx.hash_last = (nessie_hash_last_fpt)bmw384_lastBlock;
nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)bmw384_ctx2hash;
nessie_hash_run();
nessie_hash_ctx.hashsize_b = 512;
nessie_hash_ctx.name = "BlueMidnigthWish-512";
nessie_hash_ctx.blocksize_B = 1024/8;
nessie_hash_ctx.ctx_size_B = sizeof(bmw512_ctx_t);
nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)bmw512_init;
nessie_hash_ctx.hash_next = (nessie_hash_next_fpt)bmw512_nextBlock;
nessie_hash_ctx.hash_last = (nessie_hash_last_fpt)bmw512_lastBlock;
nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)bmw512_ctx2hash;
nessie_hash_run();
}
void bmw224_test(void* msg, uint32_t length_b){
uint8_t diggest[224/8];
cli_putstr_P(PSTR("\r\n=== BMW224 test ===\r\n message:\r\n"));
cli_hexdump_block(msg, (length_b+7)/8, 4, 16);
bmw224(diggest, msg, length_b);
cli_putstr_P(PSTR("\r\n diggest:\r\n"));
cli_hexdump_block(diggest, 224/8, 4, 16);
}
void bmw256_test(void* msg, uint32_t length_b){
uint8_t diggest[256/8];
cli_putstr_P(PSTR("\r\n=== BMW256 test ===\r\n message:\r\n"));
cli_hexdump_block(msg, (length_b+7)/8, 4, 16);
bmw256(diggest, msg, length_b);
cli_putstr_P(PSTR("\r\n diggest:\r\n"));
cli_hexdump_block(diggest, 256/8, 4, 16);
}
void bmw384_test(void* msg, uint32_t length_b){
uint8_t diggest[384/8];
cli_putstr_P(PSTR("\r\n=== BMW384 test ===\r\n message:\r\n"));
cli_hexdump_block(msg, (length_b+7)/8, 4, 16);
bmw384(diggest, msg, length_b);
cli_putstr_P(PSTR("\r\n diggest:\r\n"));
cli_hexdump_block(diggest, 384/8, 4, 16);
}
void bmw512_test(void* msg, uint32_t length_b){
uint8_t diggest[512/8];
cli_putstr_P(PSTR("\r\n=== BMW512 test ===\r\n message:\r\n"));
cli_hexdump_block(msg, (length_b+7)/8, 4, 16);
bmw512(diggest, msg, length_b);
cli_putstr_P(PSTR("\r\n diggest:\r\n"));
cli_hexdump_block(diggest, 512/8, 4, 16);
}
void testrun_stdtest_bmw(void){
char* msg0 = "abc";
char* msg1 = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
bmw224_test(msg0, strlen(msg0)*8);
bmw224_test(msg1, strlen(msg1)*8);
bmw256_test(msg0, strlen(msg0)*8);
bmw256_test(msg1, strlen(msg1)*8);
bmw384_test(msg0, strlen(msg0)*8);
bmw384_test(msg1, strlen(msg1)*8);
bmw512_test(msg0, strlen(msg0)*8);
bmw512_test(msg1, strlen(msg1)*8);
}
void testshort(void){
char* msg0 = "abc";
bmw224_test(msg0, strlen(msg0)*8);
}
void testlshort(void){
char* msg0 = "abc";
bmw384_test(msg0, strlen(msg0)*8);
}
/*****************************************************************************
* main *
*****************************************************************************/
const hfdesc_t* algolist[] PROGMEM = {
(hfdesc_t*)&bmw224_desc,
(hfdesc_t*)&bmw256_desc,
(hfdesc_t*)&bmw384_desc,
(hfdesc_t*)&bmw512_desc,
NULL
};
const char nessie_str[] PROGMEM = "nessie";
const char test_str[] PROGMEM = "test";
const char testshort_str[] PROGMEM = "short";
const char testlshort_str[] PROGMEM = "lshort";
const char performance_str[] PROGMEM = "performance";
const char echo_str[] PROGMEM = "echo";
const char shavs_list_str[] PROGMEM = "shavs_list";
const char shavs_set_str[] PROGMEM = "shavs_set";
const char shavs_test1_str[] PROGMEM = "shavs_test1";
cmdlist_entry_t cmdlist[] PROGMEM = {
{ nessie_str, NULL, testrun_nessie_bmw},
{ test_str, NULL, testrun_stdtest_bmw},
{ testshort_str, NULL, testshort},
{ testlshort_str, NULL, testlshort},
{ performance_str, NULL, performance_bmw},
{ shavs_list_str, NULL, shavs_listalgos},
{ shavs_set_str, (void*)1, (void_fpt)shavs_setalgo},
{ shavs_test1_str, NULL, shavs_test1},
{ echo_str, (void*)1, (void_fpt)echo_ctrl},
{ NULL, NULL, NULL}
};
int main (void){
DEBUG_INIT();
cli_rx = uart_getc;
cli_tx = uart_putc;
shavs_algolist=(hfdesc_t**)algolist;
shavs_algo=(hfdesc_t*)&bmw256_desc;
for(;;){
cli_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
cli_putstr(algo_name);
cli_putstr_P(PSTR("; "));
cli_putstr(__DATE__);
cli_putstr_P(PSTR(" "));
cli_putstr(__TIME__);
cli_putstr_P(PSTR(")\r\nloaded and running\r\n"));
cmd_interface(cmdlist);
}
}

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = ??

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_224.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = 1C6AEBB953F4DE9E084009B724405848EEE62C88311A514860B46B3E

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_256.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = 154FF90923F8925F817221748DB28F7FEEDCB16CC18D59CA581481E0FE96914D

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_384.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = 2F7C4B2F7DC990A585CD729FC5E7E667461E178A071585F9F007F1E81574194B7BDDBD68FFE6BF25396D7811A501ECDA

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_512.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = 068B5284CDED9DADCF4E7449FB36885C626A0DD445BD8E0799A4EDCDC6962F3F83FDD73C5BB91844E275C0EB22990E5CEDE42097B61BCAE06F178EF86A2E3716

File diff suppressed because it is too large Load Diff

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,5 @@
# MonteCarlo.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Seed = 6cd4c0c5cb2ca2a0f1d1aecebac03b52e64ea03d1a1654372936545b92bbc5484a59db74bb60f9c40ceb1a5aa35a6fafe80349e14c253a4e8b1d77612ddd81ace926ae8b0af6e53176dbffcc2a6b88c6bd765f939d3d178a9bde9ef3aa131c61e31c1e42cdfaf4b4dcde579a37e150efbef5555b4c1cb40439d835a724e2fae7

View File

@ -0,0 +1,305 @@
# MonteCarlo_224.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = 76556102761BBD360B67F193A3035C10A117CEA5BDBE759722F4346A
j = 1
MD = 2C9728E2930CCC92B6E7C121BA1EE7178EF477E4F0B53ACAE289C288
j = 2
MD = 3CF60680172E8434DECED0DD072C9F26FAC7CA8F7BAF3406BB208021
j = 3
MD = D53110427D51B5A4929A8D85227ECAA959F067D1D521555A0BA7141F
j = 4
MD = 17970CF79AA93558B262C07C5689BD69F437C34743894ED6E3F943A5
j = 5
MD = 1552FCC0F7DB45D8009785C43F83434581A719871C181952D4B5ACB9
j = 6
MD = 263A9E6647964C28DF7BE5109FDD0B28743C11B0ECC09F4B05DA6474
j = 7
MD = 60FD954E895B238FC7DFE6C5A884E9FB4F0EEC370DAD491BAC901F45
j = 8
MD = F3F46CD6C7932573D6075A4C03C65B1257C2088E9BEC3A92540CF446
j = 9
MD = 49C9A0DA7EAAAAE3846B376F11BD9A312CD42F430B58F59414359073
j = 10
MD = 3BD41460D129F083E4949DBF0FD23FED847C3D6CE45E665DEEADE218
j = 11
MD = 37D1335030C16A240F9B4E55340268C437A6F7637C190BCBB7BFD0D0
j = 12
MD = 7096C729DCE4223BAB62B54178D7C3B413DB8AF692B4D85DD524E22C
j = 13
MD = 59581177A0E42EC99A0C88DAEF192A0B9575FF51FB09E623F3CDD7BC
j = 14
MD = 1BD2A901A358BB6B60979DADFEC729C2E6AEF85B12B1218DDD1F7CB5
j = 15
MD = 701640321007A23D22C791E24259E211C37D0BBAA5C2B92DD4017E54
j = 16
MD = 7F9AC3E0DE0EED773EE0487A7DA1287CA6ACAB5AC71C4D733164341B
j = 17
MD = A29EC32C98DCA91F9990A8B7F59CFA4FD6DF541006BD4EF00E7A6574
j = 18
MD = FA438E650CB31ADAB864B9E43365C10752FD1CA87EFA06B728C1000C
j = 19
MD = 3CAC0AB990E246A8642E6CF815A5A733C631FB7C1FE5EC93102D5493
j = 20
MD = 20C79BFC8CC47D9C9B869294AEDEBB0951954380FEE9D30B0C846BB5
j = 21
MD = 2AEA027BCA0B8DEBFA1846FAFA4A2D89A395DECEDA8B753930CFD741
j = 22
MD = A8EF7FB190F992FC2F5D7B02140CD3A21380D32ECED9C3E8FB0D7AEC
j = 23
MD = 98581E6DDA02BD8B5D39BF63BC2B069569293AE3AAC874B22D8EA2DC
j = 24
MD = E49EC4E2EE05F92127225E69D9215BC4C221E89B5EB4A38DAC2B29A2
j = 25
MD = F1B41E9FE24B62C6D814E2CD11D4A92B5480E7003328312C1F91EFA8
j = 26
MD = 275007A5B964B8FF5212D8EA29E47AEED014612861C26F8074DCE72F
j = 27
MD = E725A378B2BA84A48F2362D168E62A588EE6A6862707BE984A0DBB16
j = 28
MD = 829918F41C5D2FB6313FD4B7E067712E87BA3E4B955F769F45B14F3C
j = 29
MD = 17DC2CF03237E3A3832BC863DF6DE0262CAA35DC3EC97EAFAB5C8B86
j = 30
MD = 62A890D9446677480FE7596D6D2FC905FA87EC89D397D28E8A3A6E6E
j = 31
MD = D30C38B3B681C16202C80AB364735F19F402CF82A7382EF053766328
j = 32
MD = 32130233BD45F410C368582A5CB1080684A1721B9C8FEA2377044133
j = 33
MD = 02067EA6D34E7515676203528CD30FC8099ED7E7ABF827160E41AE37
j = 34
MD = CA339D7512884446538BEF66D9A0CF886AD72428C6D0C198CF2D5631
j = 35
MD = F0B16AA7C4A0398CFAFE015FC10CDF6267521E2E4C937DEFFD51B5CE
j = 36
MD = 2221C9F9886CF9E3ACF3C01075EE4CE20F47CDDA6B1C0790F329B3BC
j = 37
MD = 2AE581AC47520A10BBB4F67893B5AB86EF2CF7BCB27B285F68E41882
j = 38
MD = 4B6E7EE2E16426EA29D4C59BB56534A08A36C4ECD3D1B0E0CA6E350C
j = 39
MD = 7DF0DAE210EA6A8F95B25BB13C2151A6BEF7750820AEAA4F3F87F9F9
j = 40
MD = 2C4773A0B9E593448AD9BBE83694A9BB4DB09B754A0A4D8EF42C14B8
j = 41
MD = BDE74EE7D6B130C232FEBC09A71FD73D5FAD7422EE02808AA564E3B1
j = 42
MD = D258440766107DD8D915A34F6B7715D6ADF36971185B854996C326B8
j = 43
MD = 0DFC42393751146D1785D695203CC1EDB260D4A8B783669DC3B168D3
j = 44
MD = 6AF201FBB5E141826BB0C3221B7D46271A801F475A1E3F98041B89DA
j = 45
MD = 8CDC817A33DA4E1D34624D92E9F17D0D728B95A16D65B10701CE230F
j = 46
MD = 88BC7E0419D609D03576312C16D88340DEC5882F2B72E2E20645AA1A
j = 47
MD = EEF022E7A04CD058206B36E22C30BC37D5A1439B20FC6BDB89A977CF
j = 48
MD = 749A7AC16648E53E1DA31B41641A317B2AF3059B3CB2A665D6DDB394
j = 49
MD = E9B0B454489B54E0D9EAFADC7B830D868CA3601E56FDF7E7DD1A9BC6
j = 50
MD = 40242A963466099F0424B2D36259A3B19FF7DDD6E2C56E81884A06FD
j = 51
MD = AFCCD10CE88FF7B5E4F729ABE7AC151F1BE047217BAF319461A74E31
j = 52
MD = 2FF278BFB6E3D6781BD9FF23431D63F532DAB06F10876EC9DA137456
j = 53
MD = C250E2B2D8B87E9E4537ED94B07394ECE5203E8C4C60E0B4AB784808
j = 54
MD = 91DF257E207E0B935B1D72DB311FE1F8B26D5DB106F10E68982FE6D9
j = 55
MD = D0E431D9F90AFDC60D253CBFECE3C170ED832E674AE9C3E14F88153D
j = 56
MD = 197D58B179F51EC4F7486C0D82D85B7C2D4B9EAAD0235CB0D92E19D1
j = 57
MD = 92010C6226DAA4D99F1AB63842A773916C56AD5FC5E1EB689BBCC8DC
j = 58
MD = A781D5A497B77A6303077753E2F3C0713A783794324483A1190BE8F2
j = 59
MD = DF90013D0E7150D5F9B76D36C5651A95D658A4F7CAD3F822B2B8A2D7
j = 60
MD = 43E3EB5F10D7F0D012C35F1412E812B7DB4B0DFC1949846ADBDF738B
j = 61
MD = 0EB54963A557DC7A2559574C28A83FA5487FDC7B742EB1B016112FEF
j = 62
MD = 05C048A02B7376206CDBEDAEF3DEE5AB7132CABB7C8F663E23063780
j = 63
MD = 003F95064FFBDF1D43CE09AE3EDF3F96ABEA38F760687013D66FE1D9
j = 64
MD = D3E17C18958315F683090DB7CC58D52C57FE49C00FB79BCD8A007F07
j = 65
MD = 26C4A783EC68B73D4733033D475EF1870F56A1542E9B614F8F89BEC0
j = 66
MD = 7EF4637255602AFBE15F92DDF4F6945E8F9CE57AA5A4CF9E8A3C038E
j = 67
MD = BCE01511EDB8CA9AA9DA888492DE864395CDB056D1797C6B5F14A47D
j = 68
MD = 8234F4B9F51E488B986AD9D45BF6479A054D4CA0FD61333B992259C4
j = 69
MD = C9C3A8C46CE878BA9CC9050AD84284979202EC1EBB860291E82EDA6F
j = 70
MD = 4DF01D6D7F7DBB48045D528BA2A60910171573AE18EB006B555AEF7B
j = 71
MD = 39E242AB88C9C1B24D10E7B2D80B33A07ABD4DBC15727CF5B591D94C
j = 72
MD = B0E5E1570BE6A90259D7B3EF7FCC669FDCF24C8EBF067CF6C371867E
j = 73
MD = B9FB5C58DD37D6394C5B4C6DAE22D4BE5592F2015FFC78F7C16F5175
j = 74
MD = 4F619E9114972D2C32E65AE49DCCA0DE0075ABFDB55BC489392F2681
j = 75
MD = CD8168AB07EE66BE9BCDE63DE86E7AF3AAB83FFD34CB0BAF80C7AF98
j = 76
MD = AAC93B2AE8844734463A3147EAC94D6D676FDC562CB5CB21B702ABB1
j = 77
MD = 26059E100C71CEE3BB1CA4E0CE96FBA6B5D9C0174A6C47D8595C0045
j = 78
MD = BA04E583551E65BA0951C25818603D46605342052A48F655EEB69655
j = 79
MD = F3B52E510BEFA34521AC50BE6EF16F0FBDEA0CFD2B674F655219216E
j = 80
MD = 80682980439C32676D9771E3A86D4DE465FE366EB5533A3D529DE989
j = 81
MD = BAFF1851E204C07BC86F487A986D08DCD6819A5FBFDB001C01703458
j = 82
MD = F9BB1E975BE17B6B9CE56FF8D4D4A047AFDA3C0FF4C87975BEFB8A16
j = 83
MD = 7F938846733627055794AB3606D89C2EB2DF55740576D07E466730F7
j = 84
MD = E58F8127792794E15A48702F92694738A9D70C884EFFEFC588C4B0B0
j = 85
MD = F387635B10635C2DF1F2B1881F19A97C67271425A95D59A10E177D46
j = 86
MD = 9C19F580B97FD5DBD6783237C1D2458BDC2CEDE82C4A3D9A52B59078
j = 87
MD = 9F0AD396730A8962DDF11E623072E3525BC850EEE567A3A5964C3727
j = 88
MD = B124F21F40AA07EBBB6CCEC881481CC38C98F3442BAF39FC4BE21E72
j = 89
MD = B4846981B020184DA92CD552E7D9A7FEA0E87754C2970A5DB148C1BD
j = 90
MD = 1501A24A5E5D966FDEAA0AAE24ABE885343C496BA5F910FE1860915D
j = 91
MD = 84764A4485BFE7FEA560ED04B507F31C8FA355DC41E23D43180D0490
j = 92
MD = 7A79ADE6CD432066176978897D3CEE178425E02695A3EC60E11655AC
j = 93
MD = 8B32482105113643521D9B7BC2D5730FA89D285A777C7747BD5FED1F
j = 94
MD = 940FE61A0A15F2A63A0760AF2DAE592C70B6A342AC06EC1EE357363B
j = 95
MD = D831B2A317DB5920609B1E21D5FC86B7C40BD0E77D3DDE0DBBF7BCCD
j = 96
MD = EE02BCC0AB0D6B2C57BEA506FEF4212BD06970ACB2EC5623FD3DC975
j = 97
MD = 93AA964B502520C0F0D5D48A60E5647D0CF555B2846F6B659410AA70
j = 98
MD = DDF122BBE03C99FEFF088D11D399501F380BFA2D6729ECA8D92A453D
j = 99
MD = 83AA578EA6072292E65AC81E24DB1982276B11C5807FD558AC01CB9A

View File

@ -0,0 +1,305 @@
# MonteCarlo_256.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = 16CEB5C707613F4021C8471715FCCAAAF1C7CC6AAF2DE9F1161986CB760AC6E4
j = 1
MD = 76D2CB3969B6E848C21C5B777DB986C2BC5B98487B175BD091C4B3368741D1E0
j = 2
MD = 73B8FD26DA338A131D0DA131F895942B1CCF0359E3C9AAF2E8C9152FA2922A73
j = 3
MD = F67A1A4C2155C9E0F0705166E536B7AAA72FA6584759E7FA5E0550FD29BAB949
j = 4
MD = 8574D6BB47AC3189F3AFEF649AB1085D70EC1FA609DEFDC930A5163DB8236DC9
j = 5
MD = AF3C40027F5C208B1755F089595294C21A28505CFF7AE734C9796B45261B5BDB
j = 6
MD = 617F53233E0C4112AD318BFDFED9A4418BB2D3D083D33634E94038F594B8B6B2
j = 7
MD = 12C6D1988F109227189BB03A95D67181A83B874D3DA5EDC571F3AED668C503EB
j = 8
MD = 8F44170516CE09953F28E4FA8B3A5DCD9E69B232EEAA56B10F865D22469681E7
j = 9
MD = 6D88BA9324F1DF62C779FED407891F059643EF1C23A6A26D62F4CCF0A984FE4C
j = 10
MD = CE0469027B56033F303AA758FF81F086B2AD230D15C7B1110C19E5FB5764CF7D
j = 11
MD = 4342BCF5CC9FE7D26B62C624165B7D0EE52C1964731EEC36C16C87C8779046ED
j = 12
MD = 7F7EBF054FB57AC5DF3B2CA2C12C4640C8D7184F0D3041776EAF60411A1A34AF
j = 13
MD = 69E0FDC9296287002FDD879CAB22799A54294B144274F0FA7CBCCD4293984F4D
j = 14
MD = 6B96756A221445B9AAAB70FB0C0A0BC53C64790731D8EF163F34750846297D73
j = 15
MD = 7655AC45A004AD1E3F7A2C169490541889108FC571B308D1967075F18778F17D
j = 16
MD = E078E8F6646242D43BE759519FD35A619AC630D1FAB83979F7ACF249894FDC44
j = 17
MD = B5F369B25B0359BA1A559D29842DA7325AC2654E017B644B2316B00A10400E58
j = 18
MD = 5EB82CE533C7AA36557EA50C5B1819A921D17C97793A8CED4841B55C12C7CB45
j = 19
MD = ABF11BE5731C82502AC38BD440EC025E66962118C71B9755EA636A1C61A5683A
j = 20
MD = E0E1DEEBED3787D8CCF1867A4FC31827BC0E9DC4CB36DD7219B619AAE22B7551
j = 21
MD = B4D2C761262C424AFDA02BB1E27EBCB636351D48848F4098F1E87C5F8F46B3C1
j = 22
MD = 674ED95A7BB3BB2CA9FDA6BE874A503A31C98FD3DFDA8E79EC15506E0A535251
j = 23
MD = 8D2A924882E94C20E8D520C31AED4A6C4629BB72750309EA5EEACE0543D2E266
j = 24
MD = F0510BBA8E86969B795168443C214B09F4DC3764B55FF11898FC173B1F906460
j = 25
MD = 7203BFBE7EAE13326CAB3BFFE56FA5CF9F820D819342040D778DFE3BDBB22526
j = 26
MD = 7286ABE0019DF88BA88B683CBA797FAC9ED2748CE39901CB0A6AFB32D31F59C7
j = 27
MD = 1060EA9B328B2F294A038BF25D8F63E27118C748B6B95DD438AB7B5410858B26
j = 28
MD = D16A3D02CC43A896D13BE7632B2ADFA005E58113C464CAA5BDA520FFFC856A76
j = 29
MD = C1447A0531EF063E611CC98EE6E8BD3D0D70BDAF7089FA2053D5A5D5A3590FC2
j = 30
MD = 59275FB3CE2994050C53C5BC47D7DECB7CE129A86F0152BCDCFE755511394E55
j = 31
MD = FAA6D928F159F2D3F494BCB42425437CA93A1D2954FD5B2655AA580AAF1060F2
j = 32
MD = F872C304227C48E37D882801A367A13435A9DAF6C4A8D9E946453E554B78C202
j = 33
MD = 89F89454B6FB5E78838C363825CECAD9F87D0BE1EFE7DA1D43A9945399079AC2
j = 34
MD = 489C11BA865A4AAE459F3D17474055C5B1ED5A40A31363EA0CA39F78CACA4324
j = 35
MD = 15E49096C85A1735EB46669652D578FADDBD04A8A99411C5B7F42923B57ADED5
j = 36
MD = F323C3D5E94744D8D8477678E45E411900E471FDBBED70E658F64A75A2587227
j = 37
MD = 2844815C02F5D4B824D046309A2FD5E6F9DD25D156384814C7F170A7DBA57B61
j = 38
MD = 11BB48FEB41B2F1535BADD793796E78F9C2411808BCBA7A9F22275B6BD2D0CAA
j = 39
MD = 192C5453417889659403F088FDE551DA30602B281BE900371C05A7D7731BC7D8
j = 40
MD = 9481AEB25D69B64E04569CAE441C4326B36B7E1667362C355669DAF34FFF85C5
j = 41
MD = AEE02D52614735077821B24466194ACC12CB5E177A826C529E105F9C58E6BC40
j = 42
MD = 9547EBE5A97B0B14D47097A147DCEF096903B342F1A1243940B8967D491C120C
j = 43
MD = 7AD2AFFDE7C5C32B3827C992E7AE57583E58C8587B1AE252C647BF38A949BD96
j = 44
MD = 11B8A04C94CCAB45CFE296F8F3A0A8D3DB5A81A6BFD68BA7EB0A9B9CDAD940A4
j = 45
MD = 47BF36CD5BCE4D09DD758EA4343A32274C0AAC5D3CA3081D81FDBD3215667D3C
j = 46
MD = D1B0E5A91F29C98CDFECEE5D6524E6DE60B4FFA3AAC32842025BDD9B6073E886
j = 47
MD = 1FE7592B5ECA1870ABE1F015FD74D899F794849B7F05B29CB5A9E966CA0B870D
j = 48
MD = C6BF02F34A8C52B2F540512BCF9128F68C5761F9C0D742187C00FFF41DCE219E
j = 49
MD = 88BF5F70D522A9F99B0904C60D51727B26D3BB0AFA41E0A95547F6DC2DE2458A
j = 50
MD = 9A9AB9E9F8E8533F5176D07897440C847446B525D81CAC2E930A6ED70641EAE4
j = 51
MD = 56460F4D3DEFF583444BB4084363F575BCC1259D248F5E1CC7765458719D3D02
j = 52
MD = 7454D9F9C5E8CCA084F69B9A12AC76D21CB6C99A66CDF175D05824082F6B5B9D
j = 53
MD = 71349E4FB142CAC381541AC39E2A052F0E790372D23139F7A78EB127A33F6995
j = 54
MD = 1CA09941509BCF1C2313AC80DEFBAB6B5095DFA809AFDD3715C351D06BB3CCF2
j = 55
MD = CB9968B9A9A2F7D2DF9122C4FDE438839450DE01A947FDD686A7CC2DC85A59B2
j = 56
MD = 971EAADFB29F4768670CB33994FC4082590BB3443E016B9E6C20219EB53C2B8C
j = 57
MD = 7562A71CEBFD0A91A6ABF95A09EC4B33AACE7D7950B76CD165C6545F3BCCD7CA
j = 58
MD = C20E9CB0718D331ED15A1C1F2A7DB85F9A8FEBA2DF9B645E9CE81B925F1403E3
j = 59
MD = 26F529C778527FF8CFB15B9AA528C8B01825ABC9FB4F8CF8AA8C67194D882DD1
j = 60
MD = D646460DD8DCCA675665663C01291FA178D8B928469B186EE013541FA961B7AE
j = 61
MD = B8319D77F31F6DB675E71A386183E2E5AB8D4A8CAFAB66863F5BF32E2AAD93F0
j = 62
MD = FE185E86D9B0DAD1A656766E68186321E835B47A53AD896041C87959C30A5CD7
j = 63
MD = 63D3B4AD30ABC43282767DA427C6EF47B500874CEECAC33284FC84160ACC26AE
j = 64
MD = 730D598E997F0EB2152568C924ABD0E035EA5776520FFECE44A273F90684DE45
j = 65
MD = FC18AEE76926D91992BC98EEDA3805E6A163C07F33263305862FDF3187E4418F
j = 66
MD = 81C37B5DFE527582245107E79EB1A7A3615093A9C356123CA2A6A094FCBC4058
j = 67
MD = B7FB487E6BD08BB045295291438F8BB178F4B759F5B6CC07432A1BE995997E57
j = 68
MD = 8BE8DAEBE95C6C4EC1292D243398631E2A571A11943215B10CF6BFD0153C42BE
j = 69
MD = D096E01D6987405A62C9319D9E841969B0363C909CFEDFAE402DB794C2067D6D
j = 70
MD = 31FD2EDAA0AE640AA91D0305760A6C0831AB6413CF175542AFB9481F3061763E
j = 71
MD = 7163D5EF4FE9C76E61A890A5275F605DECCE249313E1DBE4A7D28E52021162FE
j = 72
MD = 09DDF1E7AA589373FB1EBBE2AA65105661C71BEE6F6DBDA6344AB1D9723EE73D
j = 73
MD = 60B385A2A85C0B2B474A818650019AFA5F8B6BAC7778CCB0DCEE41D23270B374
j = 74
MD = 65F8100CBD7654EAC14EE57A3850648F3D6C627FA320AEEA42CE880B76D2C482
j = 75
MD = A8E602D14BB5531CC4598622629CFC4BA6DC4D5E946305B8E0A02A84DFB3FEE8
j = 76
MD = C35208EBEDCB3E5C4070716D2A0D10B5DF5CB7B7C6A1615385861C23919D821E
j = 77
MD = 0AA1F3DE06AEB2B842776BE830F8B81E89F5E2BDF51B04E4762E8BB14FCB1DDD
j = 78
MD = 980512AF309329AA5B1FD0962A3E81A5AE5AADF60AE58E2FCCF67BC49922AB61
j = 79
MD = 9D925A98EDFEBEB72CD392146AC0F53F80D2F058BACF708B6D000FE7036CBB47
j = 80
MD = E41BF873C5CA08F903A4C8EFF134DEA8C8E3E145CDF71713F992757898B85B05
j = 81
MD = 260F1ED9D498F24D9952CE533ECBEC9134B345BD13F88A1B0BF02031CD678D43
j = 82
MD = 9E08EF39AD868E8458460D93A219A0070A333ADDA63C6C8E9818D9F33ED530CE
j = 83
MD = 43288B40739542442DC8A1F02301CA4D9E07E3B55E4D8C2A5019024CB82B9685
j = 84
MD = F9DD14E7B8EF437FDF8E5F30D4AB89FB06D96C50BA7BAC2D2C0985B01D69DC19
j = 85
MD = 267F358C790A651203ABBF2DEB3875CB6EFBFFED2ABFC5FA6EEB31E622E6F3B7
j = 86
MD = 2BED0D75FA2E47C1DD089E3A36E8CBE43E5E28ABB36D54F0CDD31CB0D67D4D39
j = 87
MD = D053E3C5F8B5CE0859101DE2339D6D8E178F51A5126B3A1310AE22BCCB1EDDBE
j = 88
MD = ECEB9DF41F982A3820619E9752167103507D9C2B35A77EBB4D3C6FDAD8E081E3
j = 89
MD = C59F1F6BE074C493FD206670D9D427F498B7F5F5C35126B94A4A7E9551643E21
j = 90
MD = 8FCB1678F9FBD2449190E7DD7E8ABFF2D7EA6242C6E8C43EE3B71E810DD6D0BF
j = 91
MD = AD753645888110536617299CD922E32840EF6AFA74207F4236D6B4FBB2F34344
j = 92
MD = 10BCEFC29ECE270D6D7DCC60DF0465ECA9720014CFFAEBE0291DB84E290D7B99
j = 93
MD = 2E58107735A0FE6D1D024F95209963BA508AD5364CA35CEC4452B2A5B235C5A0
j = 94
MD = 577D89BFBD3ECFED813141630E18A7B4E311DC55ED58F2D20FBC25F625EB757D
j = 95
MD = 7F26DAACFD56A32A157FF245704A76DC788FC033FE782C18345756F197649E5F
j = 96
MD = 77EB253A4EE777BD1B4C1CC33DF421F21994FC68642076BE2F4B373619F67E99
j = 97
MD = 5AE3819B90F47537E8404482C6E7EBC6FC56A49C51D1F18E9CE1C60A338ADE6A
j = 98
MD = E85B7E1A2A9E699AC629BBC565FFB3C2FBF8FB2F9732AF5DE231B6D7E6945012
j = 99
MD = 26ED8BE1993C600182381B30327352AE2D638BCDA547C87172BD1D5F650705FF

View File

@ -0,0 +1,305 @@
# MonteCarlo_384.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = BE4ADB7645B3BC107EEE8C779630B49332C351A7109A61274C38C3F17CC5D15404F9B407685EADA7D2A3F529DCDBAAD1
j = 1
MD = 880EAED7114DE6DE66FE26F8D2C047CD0FFCECEEB639703F597AE05F3757D95648F0C3D168912E8C55E216D2C8D391A7
j = 2
MD = 6CCF7A3EF29F80125E59D5FE0CC6668E9CCF017A81566DA174B96739E5C337693449A0562091CA0C7E749A4AD9DA92E1
j = 3
MD = 38E49F7064F089D90018C022BFDF21E187A592F21E8A529F69D05013C9AA6AD27427C4E100133463DA434B3775E7BCEE
j = 4
MD = 1F8CD0CEB33B7CB29568E318046D01A620DA6D98C393EB12F1D98EA82DD66E69D1AA0734266BC67EEBD2A225021147C4
j = 5
MD = F0028985D491105EB18ED812F30C91E231601D7393527A37C6D48BA7DDEA1B65DC7F44A044C3268DAF3C807C335E8AA1
j = 6
MD = 82CFDC3D56967C70575CDCD6B999461F15EADDCFD28C25313109267BDF794AEBC5E2B97FD1F7C8FF3E1CDA3D45FCA9A7
j = 7
MD = A0FC6013BCFB6016FDAAA54A1FEE23EDF0E5062C14C83625F1C7E9ED8062167A2134442280929E62A271B3C5ABDC530A
j = 8
MD = 3C466BA3F2FA4E44B3F2E4A5B57E61E5C0FFACFC916E6368652E5E15C4D57EE0DAC4D3EDCAD9CE859F5726A37926169A
j = 9
MD = B028FD26A421C33E35AA39F9922899E888705D1C4E78B95D17F040A305C73B8DDEAD16219CCCDFC54ED9DB55C66014BA
j = 10
MD = 72A787CF72B74361D35DE74CE6B7DEE288DAA737D5FCF8F369B44F7F183A619E38065FA759C4F6E452969C8EA4AF33E2
j = 11
MD = F6ABE15CC8AA6112A41C91E16124AA04FB0476739DDEA349B15AD3254F0EFF6BFF11B0BAF81B80987544EA9D4D57BE49
j = 12
MD = 98116BA7F8295B44C31370F9E50E3F1A5EA2223DA1E8DA3046F7AB440C5F7A1B9FCBC1BF5FE6584327266EC2295AED14
j = 13
MD = EA91D3D3E2C9FDBF5752674E6D80A980E9A959E849A3068314805F5267AC407269B8FEE4BBD76FEE774A9898CCC60785
j = 14
MD = DD637E12CFED26E7176FB816CA7BEB07AEEF6D0D1EF2FE0C781F8E5E2010A108C43756B52CBCD9AF0A95D0AB116A9385
j = 15
MD = C1FF993ABC2A36402D49F18923F65BFEB11554067A079737373260E4313B38CAA8EF1C5F24E35ED10E7281FD024BA2E4
j = 16
MD = 4065AAF6009458CAF40E92484F5A1FF32FF0407531001F84452B2C6EE186F3EEE2AAC7850BA299A66C5C651ACC9483AF
j = 17
MD = 805FEEE2B0C47BDEE787102EA5CD2DA92C95B9D43DB718F1BF1AA8B3D1E58D95749013341C6E500B28798A792E8EF385
j = 18
MD = 68F6285B08DB3E188F34834F3D015E1AD6DA1FD9FA414A0CDFD3F7C056CE952B5E41EA5905582B5A8B77277752413E42
j = 19
MD = 538D84CD845082CFD3D46A8B7D7493B905CB350FAC7563EFEDB5F8C49C80999DEB5566DBF7E3DA50FBCA8D59B27AED4A
j = 20
MD = CC36BB3E99E086F1CD4E368F514FB7DB94A75B73CC4B3C75DC95D081D36035774100CF98FF47E776F7B4BCF5C9DB8717
j = 21
MD = 6AFB2AEF4E8B9FCC0D7199A4F2FB55CBF801290341B8060989ECB88C926C9159D11ED5E0C2E97A15F1EA79C17650F093
j = 22
MD = AE91C22CB02CEF6A6943557879BF6629EF3D79882F27D7F92C198B7CFC0E374536D110F580849A5DFBF1FD8DA7BE50F5
j = 23
MD = 65FCB2AA74A4848F2E0AF4F2DDFD48B4624B74EB4D3396BC72D32C88EBE2825E008EC7A4D5E496458FE9904745CFE9B2
j = 24
MD = 59A7308A66537F58A3118A7588731D4093D399AF1A4701CA235094E2DA52AEAD09A564093E9FDFD4E3C6842DD28DBF4F
j = 25
MD = 5F3BAFE74E07F5B1B826B90BA8AD0A2094FA1459AFF0234F2D1256B363AB9D866D390A89F27D170769820493B4B2B0DC
j = 26
MD = 19C32030BCB766B3D2C5863FD7A3BA3F7620C83D679BE919497624CB715ED0E497D81CF3D95CA6D530FF8DD52244B12C
j = 27
MD = 94478F30701823E1774BD23D7E30050B8A0C5A461578D69279161A03AF7CFDC9A058409291BCE47BB6FE392F7D0D6610
j = 28
MD = 1FFEFFDAAFF021180DE68091FBD0A8DE6358E7C73762AB0CC68C17E5DDD6F280F8AE921C8BF700BA3F0E0E7801E4895F
j = 29
MD = E2064A781E2C52F8F4BD2BF2FA80219782CB24F611328840DE9019759027B25C905D7F6D0E42B65E5344A32A830398C4
j = 30
MD = 5F31B732CF4613DB8F200A47E5535E511C37C0F2D20D3A788B4AB2C87B3DDDCF8AB3389BE782A599972D9CA3D02502B9
j = 31
MD = 47F10A4176C5044560706B8728B7059FEB47BB6C89945BAABB462D4A0636807648B472BD848804F31EC5BA145F5FBF95
j = 32
MD = EDDC79D77B161DC97B6E3111128161ECB6F36480034C2F9AB2549C32E86D2FFA89896B5F68D7834EAC45046FF273137B
j = 33
MD = 6C2999BA8E41B6A50DF2DD7ACCAD56A0470AD45A2FE724F7D46AB9C02894BF4F3D278147ED475B71ABCEDF2A5149D8A3
j = 34
MD = 70FE28F79452561A781780E04B9DA5AE8E92D7BA270BE95EF06830590E107EDA140465989C89DD23AF12371C17D94A60
j = 35
MD = 5B96243AF873B59746634272172A1D267C662375D24E34C7E8D72384D119E180F76C65C0674DF088A7113E7A87270BAA
j = 36
MD = 2097BCEC18AF06CCE543AF5BFDA6612FB6D6C1DB8F09D8B7627A944098925B3A6A5DAB332456EEE0BBF43244964363AE
j = 37
MD = BC1441846D3C965EE46E4DD0E7AEA7BC21BA49532F28C1F9BA168808916B886748ECA9284217DDF94C096E60E4384DD5
j = 38
MD = 3E3A9DFE14A009C76DEAD785ABDFDD0B5A4A0F6D044E5BBC8FD3966F158CAEB62A10E007F170E58F8BE392FC3D373285
j = 39
MD = 1DBFA4614D7D64FD76CF1629A35806DB83E4DBE9224F05961B495639627704ECA2E734E6AEE0274002F962F19024AFA5
j = 40
MD = F2B09D24C14AC5FA0AA5A5AFBC91826285A4FC22369DFFDC01C17564844C65B9B06728B0CCE620EB2D48BA19F6106070
j = 41
MD = 283B6C8E5AF73D2F250696CAB1F287918CC6B9060E95434CE9E280EFF43F9FCD5508348B6439D4133F8FC67F26FDCD0E
j = 42
MD = 932C665C7C4A2447DD818B8E04646920D22CF51D3C4C7BB2C4283F80D50CA0544383C2B8F907233E581FE45E39BC123B
j = 43
MD = 02B49C6A8784B115EFE66EBC046BF231095E7296F12664C2CDE40F755D4D50324A951CA18AD9ADF2E734F3A8173A1531
j = 44
MD = D14680B930CD3E6675D0CC714287BC4CB41CD6D62D1BE2EE9D02A3EF9FD47F53722413D9EDFE2E2027B9FDF4A63FF97F
j = 45
MD = 9D67D907BA5F1ADE41483604FF9BB351E5AC1113F2F5A67C84203BD9A26C0ABBB36E00FBFD019C9917A7C3E97796BD4A
j = 46
MD = C8A773911DA7C09A4974657CDC288393FD34FC6A57F16F6D33BCAA021AF054C6D0F8D2471C7E8BBD4908D43A5A2F0D1C
j = 47
MD = B35EB336006511281D0447326329CD8C8DE72F0F40FEA651E00712EA6C8B7CC1FAC3CBB63CEBFEE25A36F4DF77EEEFEC
j = 48
MD = F90868A210ACC7A84AFE15B2CB71B7BCAD48A33142E2D22C8E6AB7E9FF44577F8F2493B842D601FCD3695BD6F2EB5206
j = 49
MD = 044973221D73E7005EC858545E9A03DC3CBF2D536120B6846630665E76B6485E7A95EE4D407030F1DB22E9E6AE175328
j = 50
MD = A7DB815BF899A0FA6C910D7131299B6D3551BED097DCD2C43BE9F723F0B549305E6A696540CA70D5233D24258F0122E9
j = 51
MD = 3E4336A3640AD8331C3BEFD1D7EC9CB82F4C924709BE2FE8264AAD25356E743CD5EC1AEBE56488576403ADDEF671E800
j = 52
MD = 37D3C895C885374D73FCABB8C301F8108D2673F6082EE7A23EFFB4AA6EE9250F33F1BC303A19F291741EA1FB3AF0D279
j = 53
MD = 6B730880DE7B2D89D340A410904A922B7F8FCF2AD3EA4449D31F4B2A49D2097294EA5AEDECFE0207852D19E4278223B6
j = 54
MD = 37FD76837AE46B0BB53757A165FDCD75A0D56AA461080A0CFA74EBD6353C6F562C95E995650EEEC60928445A0A884004
j = 55
MD = EF8F2755B6AD07A18717169E11BAE6650A15968A95C6869FBD743E2BBE6AF402C741AF5F6A0BD1CAC02460AE3FD8F6DE
j = 56
MD = E2EDFC89EFEA5EFF57A8B29251165A593EE162A8B18516A216AD6420DE06032C0A7E759D0A3A6F44E7915700EA787B29
j = 57
MD = ED7AABA9E68EF8CF0DCFF36E9109F9D458BE560192E93A44EFBA9DE1051A3A8E83A4B9A95B7A48BEFD51C2847D0DAF6C
j = 58
MD = F54DE77761DB42CA908821E885E30C23D1BB114BC1AB7F80F79BAE33A2C4313532A90F46B430BDC2A3DB928377EE9B34
j = 59
MD = A65214EEEE1E8B451969AF845083AC449DB518BF2037F368141A87451F9CB2FF2CBCABD60D636EE31F614C2888136FEA
j = 60
MD = 2981BF6C629E24AE09CB3C65FF61F9CE12B189D03BD9522C6C2C9C953C36BBFC8405FE0752621A988C1CC96CBDA444AF
j = 61
MD = B9FC750C0745CC2CEC8E81910584E876FFBFB7616FBBC99156D47CE8C2264BF26B3199CAC070190EA28A0370A1415526
j = 62
MD = 357820BF97ED7133F4A2E1CA2D488E452C328CB12E9410377618F3AAB61885FAA9050D9E173B560F4F03500574E692E5
j = 63
MD = 1D721855C5363F334FC3BC58009DB3D9388BBFBACC5A71B6EA226D66EFC3911635F8400D700F18CF92EBD97B6E2315A9
j = 64
MD = 27DA7D6413F02D71DA5EEC129ED63F1893877C7C801D0286BAEB5AA58CD30683AD13BD030F701C67E92693BDDEA0698C
j = 65
MD = 9D30CD001830FF11562233DE886419E1CFF49FC498E858AD0623FD21F938BB2EDF01E6F971E4A2A082F3783FD2D6C766
j = 66
MD = 496BD38D665990860217ADFD8FC037AD3A66C8C8087CBC12CB4C3F4E610DC0A9AD216FD442729B5852F37DD39B0B66EF
j = 67
MD = 9E04B03F24A6883365FA9959D392381943185B29A65F0303495853F0FF9DA225CC0C5426C5A5AD8EED7C917ED3DD835B
j = 68
MD = 0D5C98DBC752C00A0D009A4A83F956D3B9B837EDDA055DBF0C162916241DDD18AC4D675A01A7D41EA7F24A68193FA498
j = 69
MD = FF5FB80E26219F2E0FE5FCE71C348748C6568FE34D2C80956D4904186B27BDAAE39F67439D02983E2961A00BA5333D9A
j = 70
MD = 3B3F97DD7E8CE7C494CD61174E56034DB2F75520B502E8161A9D6C2C9A363D1991FEDA17DAA0533CD41314C43CD44FF3
j = 71
MD = 8A33767073EBB386391B75B744CBD7C4DDD49DB4F1A04F94EE9AE1FDACA449F116156D15A14F5F00BABC7BEC3436CC85
j = 72
MD = F7558E0ED44085B13FB593665299FAB79700CE1EB9436E118A9996D6CFAFC60BE31094FD6EA42629EE979641C4DB8568
j = 73
MD = FDB33254221D332EDD9A93C3B3741874054D89D98FA2A6CA8141762006959586ECFB3A5C2A1DD0408FC8FB9FE0A6BF08
j = 74
MD = A678E7922FDE74D96059B87849B67A98DF8A65C1A4CECFE7EFA97F55024D138AF1B77B145EAF69FE4C2ED194D53E11AC
j = 75
MD = 7086C7A03A24D9F651C5B31D96C89D38216FE451A45BCFCE2FA0F5EAA8B0C1516AB14D1850F29761E45C609B730A851B
j = 76
MD = C7B543638FE797BA17BFE3229084CC16589614107E8F112AFE4332CDD690A4DA7C89A3BA71F4220A3B3B7DC2099366C0
j = 77
MD = C59A884EF771A44AEE88AD3AFE344744E3291BA1E30627794E6DB05DF447D9889161C5E1ABB2673CCF90A9FB1B0C8633
j = 78
MD = BB0FE0323E6C8ACDA27F69B968659E0082C515B43A60A67513C8210CB3B7E343A3F320123CD8A2ABD317D8ADCD2A6D85
j = 79
MD = EB6C5406AAF48A2B8F5473C3A665C839640B0EDEC0EE14AE793F82539202D58EBEEFAAE8A70BE27355BB0A34EEF88F6E
j = 80
MD = 9285CE4F885FA5B9F76DE838C75B44533883FFD679F5C4471E20155E15856FB9BBB08E6C1098FFF8AB6CC43B015A6007
j = 81
MD = 50AE0DF79C8EF2344FDA59B2E5D6622466F9894A7A6560A4DC435AC2051F9E282CF96F334FD603CB9D6C5B5CBD9B1ECD
j = 82
MD = AB326FBE7B982C0F0CEC2C68178F2C6230055DA400EF5363C2EA8FE041CC6887BD8F4D159334D70FA69909841C0A0138
j = 83
MD = AF439D0BE6ABC19E6194C7913414CAF66A7956A3C45E8E7FDCD7830726C4DFF91C5547D2F3182CB09B59BDFC10046234
j = 84
MD = A90BB663D3BDCF096610EE9393678960D1EB5FAAAFC7BA71238C723EA44D4D114ADC33D576A62F94EA332272CCB0FE97
j = 85
MD = 046723B80E5AEA59C1EF48B668272ECF00AE3538E0F38A50657941159C4E81205380BA12AA5D1E6730841871BD560216
j = 86
MD = 5B84596CF101591C0C19B1475D87CB3939683C1E7EB2F88B0FD5849693F91F7A08BC99F700B54F524E8EB74476DDD88B
j = 87
MD = A4935A9D5C6487AE8D217B0A26E049C14BCC7FDCECC6EB91B281462525BE031972106E9A28A1704028D98EAFCBA8B4A8
j = 88
MD = 6D873F3CEEDE6E757E3CE348353DB31E38DDC972B38BAFBDAEECC5912306AFF8C625F8FB19B9A974BF06A87E39327A70
j = 89
MD = 1A06D8FF07E0C07DD702724D6F9D6D393043442CF31C1887E0D97DDACF6853DAF9A7D3AC9ACD5F4D4B2B11E3D2D5E074
j = 90
MD = 382F8645E5191C5052DA02E7B3C53E4641924CC25F0D3775E550DA50F850823449AC9959F6F745E1600BF36BB6D61AE5
j = 91
MD = E731C390E93053CFD1759CAAA2AE2EB325B44DF6A4326905FC03AB1AB4F75C2DBD2F56A20316FFA3DBEADA0EA1E76D18
j = 92
MD = 4A21CDFBFC15917E6058A3C995F9ABDA913C0EE0EB4613D4A6D73C2FBF60E3907BD20532744FFC67EDA32A56387AA161
j = 93
MD = 8139D8568ECECC62B77A320C14B78955AA25C780DF3FE3C1AEF25805980C797E1CBFEA876DB80A25AB2626189F795A1B
j = 94
MD = DC1EAC77D40E0BCA1635D17B002065574431C0E3D055C462C5CD8DB31773BD11C07C3582161185C16E3AC4B016B4C10A
j = 95
MD = 8A6019479CECEC96069040708224F571E83F019D8EC151DF904FB8FE9FF1E3BB5F3CE9914FC08D0A472D5336BE428F1E
j = 96
MD = 0292EDEDF883EE3AD36378A7C82A43509E27618D1AB181E5983251C22DAA9F19CF2206DD28DFDB46EDB6D5092158DC5C
j = 97
MD = E75094C523FC35B422942844092C77C24B83BBA8DE4D8C36AAA99ECF8DADA85AA08DC2B696E97F450BD56973A45E5FFB
j = 98
MD = 64F7EDC9AE6EC8F278B19F0ACF810CF4D87D7C168879D07562E177EBE53FE530AAB71B636DF39BF4B0EB224123F670B0
j = 99
MD = B8B82E489C963D2EADB7819089D25EAD67C9CE07C3F7A7B0B052BBB6BAD47E1E319485A8EF914A48FFB1E31AF1EBA2B3

View File

@ -0,0 +1,305 @@
# MonteCarlo_512.txt
# Algorithm Name: Blue Midnight Wish
# Principal Submitter: Svein Johan Knapskog
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = 05B6631C0D75E1C0B7972BA36985EC15CB3742FF892EDEC4DB6CBA0D7878DAE2D526A9FD1286A81FB2C10DD853F05BE0A546472D2C0BFF070224CB465EC671A8
j = 1
MD = 514A3B886006464CECF6E4639F93109BBF56D2D9A889D1E031DBB867B0BA3516E7565327DB008B8F362FF6D5C1A8BE76D037D273DAE071C716A8F68BD94E61C6
j = 2
MD = B818FC3647B1B72951A3F540222DBCF6AC6BE2D96252F4AF3E064D1A8493A200CC4B2E535CCF0760AA423C1C23B932A630D06C2585129D4960D17D999F62BB3B
j = 3
MD = B479BFDAE8D0A2A87144BBC4579747DAE441ACA5B413025B2C28B3516ED5BAE87E3266C0E24F05D1E71A78B52BBA1618C5267344DCB3122A09D78E4E33733D9E
j = 4
MD = 22A81EC95E6C78D66A9FA6D63D858A302DC6CDF6B8956236DEB81B4B6CD831B23E9CC6B977B7F0863CDC5D69B834E91C663191BDA3B62A26F29AF99224BC1366
j = 5
MD = 5C7612311EA8F1EEC8A432A2F3891961D809601C876A3EECFE266FFA0052844C7F1027132BC7C775D862A3E9E849D5347546A13761D7EE0EB5C953E7388E3AB4
j = 6
MD = FAD797B74F7B64852B7D79049628D2204D478D68B271DEC4964C2849BD87FB980DD4EC98C0BF488081156E7CF2C26E22CBDE7800A1CABC5E232FC5FFBA61967B
j = 7
MD = 80379851AE68EF0E51B77DBA94B164E308E969E633613CBC45CA5DCBC604884F2083159C4EF234DC5D8F38A2C49948CCC15F2AAA7C24D969008DE945661AF04C
j = 8
MD = 7EA654880313117958E4DF2CF59DE1AD2180CA01A852512A2DCB915D9B3DA104BCABE9139C11D3947606A3B4FA349725CBFF9DEC34DE84797EF61E406D98DFD3
j = 9
MD = 08E99551ADFDD1962BAE94E161C7F65EB277953E90A422751118818084519EDE60D7320882EFE8B41CAB482FDA620CF2A22FEEAFF890FCDB2724F08096B73DD5
j = 10
MD = 1FBF73E7D1001F14947758E617E636A410AFC0E0D7CB449B6796D1EDCE9A3C91B2E6150853D76537232448F2CA2F3395B8EE13DE3163D82ABBCEFC1F18EFCC86
j = 11
MD = 4DA6A3D3823E58E837BFA93E099708D1F21F69B38DD68F5C79D4F07F9EE588B0B14AFD690705A7CD54626BBB18316FD5A465A54E8F9C4E5E82579CD859DDF833
j = 12
MD = 5E4337E938F09925A6E395488FD065DA5ADB2390F9B1C44370D976485237D4E406CF27030FC048CA784023119FFC7BC1875901DD31AD3AC486A428F6FCF6AC9F
j = 13
MD = BB6CAF20632143F980BBFED65A2D3CBBA7315AA2C36B41BBAE48C2712D08FF3AC394FBB375C75DE8BE9B4D2AAFA32D0BAC7F8E72C844A94632B5F176227DD365
j = 14
MD = DB5A50D13ABB3F3784F65BF81368AADC1F61531642E64ACBFCD6434E667518613A83B72791B61AB99C78EC957428619B0322CB54ACF8B3E4449C6072F2E2F8E9
j = 15
MD = 27C4660419EBB7D189200DABF6CA2585F28DC20DC8E5190885A0E19F24E90ED742E797D4D897C3AC412C3B957E06A46C27F3E0058C52B476CF8B56729F9A08A5
j = 16
MD = AF649676D170FBD6F7757A5DDAB654CE267312A1984C47E373686E5DB02C8C3ACE997103076A5C14EB97FEBE62610FF0CB9F7778977379100DDD7EEF244D45BD
j = 17
MD = A5A527BD5BD6634D9EF4EE6B4E9AA3268BDE3A982C82778FB05605555DE7341483A0C7D6F09062F71BF772590688F0C142CDE3DCAD9920E88F88367327A47A26
j = 18
MD = D4B2656E1300B28CDE91741100D3DECBAF3D0B88459239CB2A98C438C2229A0BFEC0E573FBE936FDCD3EEC5AC449462BBDB5C9D16D37E8DC5D65F3865E03C993
j = 19
MD = 201EFC2A07D1E497ECABAAF70FFAF1CEC8298B7FDF8CA2AE43CB9ABC0B93C6C5741C2174513B72597B842D729459812BEFFA8387E75AB4A1F18CE4F7E756117E
j = 20
MD = A0ECF3DEACA4F2F0EC1D3EF69DBC1FD4A3B66941562171B4AFB915147BCEDEB6FA8DDAA4E14E8A595D8C3293F89586C347C098D2BACBD6EBE193F22B9EF64C0C
j = 21
MD = 63134726E843E8D9B276E6C9718B3B236622152CC6C0326C921C0FDB5DCBD3B41AFEC0536FE970D5B5D2961208E8FA3B1EA1597305DA62EA6C42610BF49F2608
j = 22
MD = 322441BDFB5E68712EDECBE6E9FBF428A2DFF02B27CA840A9F33445A29DE063627FC138CB7773209553969211225B9463AF4661ED5C067CAB025576546719804
j = 23
MD = CC51D58EF17268438044CE4567BCEBA248E41F136CC32BCA5B62674790365A36E28CF29ED9A596EF66115CD5C0CA0DB9C2CC04CB504E9135C65E3CCAFD41742D
j = 24
MD = 4B59EDDE9C58D71AB08A0FBEF064DDBF7EC372D8916C7E557C13B12235B6A95E256290682BA241666BBDC13FCC7731F308D219F31DF1C5EC36DE5FF065740D5C
j = 25
MD = 7F3BEBF284B998CBE8D002B0D65B3743CA831B79543CE2ABA8939D97D9430DE1DFA6B531E677CE15038659F27903279A4A126B89DB237C9C9B69854E03F96D14
j = 26
MD = 9E3C13E4F378A933327CA0F10DB679436D49EA7872717FA0C49B7D00521800ADF714DADAE68E1DDDA97471EA7FE4E6678935B1B75498481FFED918A98CBCA251
j = 27
MD = D14822BF9BD1A4F14622C0331F70EEF0D026745A666905E60188ADACC7C6B3FA9E2C5A528A5155EBE5A2E92564B49600A62CFB3CBDA6F370F44955D43A6973CC
j = 28
MD = 6AC8C97905F1F149DE5EB5FC639CD67776548EE448A8D8FFB0F72FEEF02C077E7F01634741FD46FD4066E6F5437CDDFB58DCEA2F4284DA2275BD631ED5A19432
j = 29
MD = 08DB5BC90F8F3ADF9E5F28489EC091FB1DFBA9C8AE5088D66DA7FE9663EE5571DC59701BEE85321DAEA15A72FC089CDD4D84BC62AEC62EC988CFE4101B95B814
j = 30
MD = F2366548FE0EE0702356E19D95E88E793734D33D3275AF526594B5A4B720FC6673554A6C1816295B4AA0276D8DC948D2F74EF71CD838A2A74A717CE50C395700
j = 31
MD = 596EF4DE3C2987D396B22962F9548BD865D75B3A6A065792BA40498EE994FCA2B34724FED131548404BBF47A02387F237E5E5969E066A22F13EFE079AE24CB55
j = 32
MD = 54B07BE618E31A361495AB25F6447F8672B7F5341EACAD515A685CF7788E81D09E11B55776E49066B84A678B6F1FE80EED76B8A6A4020255289CBB5927FB93BD
j = 33
MD = 19D6E9E68DD1BDC91AC222158B92371537E631FB3BADEA2C3BA138EA01CC57A5CCB8E8888C62DC5AE0335F24A8BE55E270E81608E4BB6AD72980E0260FF507B7
j = 34
MD = 09CF301FFF18F02E5073C01FFA82D049991F4C37C32AFAB366E9C41706D3BB277C947BA64B2817682E932F9F9CCB2B714167AA06BB56191356C100E009BF5312
j = 35
MD = E43041577C99BA91287802B426CFCB5F03EC911E4010E79717700CE1DB329B025D74031D7963425B8E1FA3466F8032B6E8898A9D8278650CA0ED210CE9B7943E
j = 36
MD = 869F3D4B71BACE257ED6A50EF603696CBE83CC5F8A5AD3B25761778EEEC95FD15A56E366F7E2FC1CD639CB3C04893E1C827F8257209B87582CC59059BC397414
j = 37
MD = 98E8C0173BE0F52EC5E02C5F88DA30AB8B34423896415D4875222133D59DAF6EC0D9A423FACE677E16DA9677F677F5E56B935950EBC7BAD05CD6F4905D50BF7F
j = 38
MD = C26D08218B319209B3B71596678692BB4FF0FFC7B34A5968DE41F14BA2F3CB5F14BB815A55D50654204BD7F883D0906C4B970D4711523A92DFF938FC7B9DEF44
j = 39
MD = 47587B560D52A42CCB1C0F0832709C583A81BF201FEC50FB7FDE9F5F59863F9949E867C06476E485B2804DB6CDA776F723F5AD7845FA1D1C99DE593871D54EAC
j = 40
MD = F2B23140F8B987E43BE2DA2286C61B95937AD4F677FA28F6AFFDA55B9E17C862898BB1EFAA6A8954332464B59469C532FDE53F4042EA2F69D75ED513F1A71A5E
j = 41
MD = D77E2302970E031D4ACEAE328ACC9DC34E313E7F45A45CC27E816F7D6572CC6F73C6BB915A7AAF397BF616AABCB107306299B190531FFCE1E9E050D3C888763B
j = 42
MD = A4DC5440874E6928A94ED98A4060A7505437A4A42F5B8A3A9A417E7268C52006B5A73E2094D0EF07DBE2A2916B5443CED1849BD14D94918EAEB1575E8FC60E03
j = 43
MD = 45169847FF07271A642139860FCEDD5CF31E01703796328E6ADE09708129ED0EABFC4D0100A14851BDC825E66ADD9554A116036FE2B2E96580D53C145B1E31B9
j = 44
MD = 28A16789C6D20B04D72F97F454672A931512796A2E86503B2ADA766EE51D14DB3D9C8F57ED693ED579193BA33C37464BEE80606F14D9C72967B143B7245C50F5
j = 45
MD = BEBF4BABBFE6ED87B3237D3472A000733D021736844BD9CDD2F20BC8AFE8DBB0AF34FB0C79434C977C72A040389AD54D3D534A0F949A3745A0DAE67CF4B4C8DB
j = 46
MD = 305634F12468AE8FD8700A50B844338EE88D91B5E4C40E49D921F889D62B73060F9A8FF0C47D3858F1CFFFD2B19BCDF06420AAEC20DFB92916B19FCD3F6F143B
j = 47
MD = 1C65418C8C01547BD229BE662F397E66D3AD803F51C546986F57C37BC0DF3B3AC661BAE906C10A400CAF36E9D477035839609DBFBB72A93009A2E53CA4DABE68
j = 48
MD = 366EFC559A39C59226A20631A098886178FA2073249AFFF8E3DCD45D06014D94CEA6ABEE329B12CF91CC98C7EF1DC5FB11983C7E1DEF894E0CEB4BDA816596DC
j = 49
MD = 4A35A3D68E0668DF7A2FE708A3F3E3EF1B9B79FF35FF9CA366502C37EDAD46BA3C73B29E5F0056E6638D2C14887ECC6EAE479816350552CFA9F9E9B4901F2CE0
j = 50
MD = D50942B4D92302578639CA6B57B4B575345B61EC41BD79D75D5D4C03DE491728B0AA3F4B5075B8E0862EA647430432FF6A2662418096228CC6489BC0785F4D7E
j = 51
MD = EE12B0851E655CCFF3C305D9832E28887328449DE7F03CE0E43847BECA1046E3AA3F8418D30D18D21F2D1427046A0AB27EACCDA6DA75CA94E5C2EB4AB619F6DA
j = 52
MD = 4547EA5018592CCCEAA7B1D304AAD78BEB4DC9F23B1E2238FC2D89D879E6EBD8D4CE84630C5BC0D2E154D14A3EC925348059D787571CB36839C9F5C17D99F5C0
j = 53
MD = 95A69875AEBC671C6536F0257C84CC2E5BCE30AFE9D763F35D1ADF9ADA233E8F7F310DFC0DA85778C2B7F533F5053CEB49E8FC474BB6CEB18094C73B9D3059D8
j = 54
MD = E0F3336FB3F1478FDFEB8C9F9B3E5CDF01D98FE523E8D6F379BC89971FB4AC1005A338AE822662241F541D54881672B6E9675D390E1978FC0EE4051039949F5C
j = 55
MD = 7A8FA19FCF51338F38F4250607C99EA854479A995A91D00D7A7B80BDA6F5DF0E210A29DFA8932B8EDBECCC25A2423E0E2269506A7E871ABEEF99DCF7B96706FE
j = 56
MD = 2133B2AB833553A16D3CFB3C9312FC8F3CBB2B8AFEDE54B27265FE42E6F952FC3CB6E5469D4FEB10414C65606F75CBB02D8BB564B1654576A325C2C5BA63F4FC
j = 57
MD = 258D6CC04E178AF12C43C575E3DE24E619FDB168E35E43C4165216D5905778F0F005C44652E57BC222BA607A7EE8471109488C66A166ACA7C9296BAC45E4CDE7
j = 58
MD = 5F0E7F47D115943F7C63A1A43DDAD2BEF20B6855B37D0D81A74B30FE8C56E2DEF3F82FFE89338361E87A7C0FE980475A2E98A24E98A81B866014EA11EED3857D
j = 59
MD = 5AD14C6BE2F3DBB1E9B71A07EB82A18716F84F79E6BA13EBA2894B4BA4CB83E898BBF07F971E497A6EC746D1A3D9D5E496B06EF4D9F12AA6E67874C192DDD6F6
j = 60
MD = E830C9ECC7CE91B0BE530B79770C820593EF1207A801F654F917CAC2CE0C71C3C0E393EA1360EB076C49A615CB3DF6099D07DFCD9EE01CFF167BA720B328BFBA
j = 61
MD = 3CEE9756560341BDA1D9EB480FB9FA56B10A2330265225E6EB320FBB450DE9BB7A519EF8DD750578AAEBF0D736A3D09748C294A0F15A4DA891A70C3E132831D8
j = 62
MD = 3FA113192771C2D8698A434C29BB19B4377684D32D7C1A11CD0648F845157B5E8FEE8DC0BF68CAA06C3BCBD27568C627B39AD7E35B95D5F35725D8D7158C6B71
j = 63
MD = 22249064D45195231511124B05D3B0CEC95188952ADC4AA6C116907EC737DE7DDA92800FFA1A9C48600F6EAC810354DE908B3FA60EA057739FACD636923DCAD6
j = 64
MD = 2741B81C5E3CF56599F29B32F918B71DF3E8FA57DC2937F019824CC30C73BDFBF3951902D11B761DDC80649ACDEA3A06DD134AC1C4A39BB0F568ECA986287ECB
j = 65
MD = 73598640FD5C557CE7FEEF2E79651B9FC49041BB60C0E00CC546036239D08C447983A851A53C284DFDEA87EA4A12AF465AA0258EF9C947E5A3597433A9FC8F8D
j = 66
MD = EFD769ECC5A46D71CEA7CFC1E69977E4C4A0D1D6F448713643B2B089BCE9BAF38BDC66A3297C86822C473D368BCEF58DAE355074465D17C4E12A51C8E439A4E9
j = 67
MD = 78099BF328137D3D84A339D948F078BEBE8CC1D0992E3B5BC5D6AF98DA1F3C9BDB10435AB6860819E1ACA7CC5E93879545536239E178FB8BFDCAF63804CA12AF
j = 68
MD = FB9007B0EF758C9C3BB3981C29794F4D5793A9352EF314CDBFD560956B5BAAFC6F02DB25155EFB4498607EEF7BFA9D6BF6E6FF49FB02D60CFA9B11310FEA1A56
j = 69
MD = C3AE0D7F1CF9C31D351F07B809814F62D566907D572D7E645B0EBF527122F5B2DE5FBF2B3B25D16EB1862DD804FD65976F8DA4E9E91C4CFAF326BA954D55D22E
j = 70
MD = C85627B04E075D7296257D30168B74C9F60EBE7673EC9DCE29A91B38B80020371193F2EEC1A01E964DF637FF09CCA7642843B7254976850B5AE0FE2C734A4A61
j = 71
MD = 72F9030BB3B8DFA6DB34D28BC981B5B3050F436604E1D4F93AAF3D4422E08FCB65AB89AAC710E4797EE70B7170422BA0426C3F99F5EB6004225D3EC835E047A0
j = 72
MD = 45BEF78915C109B34746B2878036A2D7BDFD3A758F68C5C511C25F8C4857697EE6265D2729CFDAFA05C6915D6618CBC76FB1950F0DD063AF4AD0270A81CACDF9
j = 73
MD = 79551349B08B60A27BA8DC6455AA80B7755AED5214D99F0B099A9B8271E53119AE1645CA87A8FAB8C753A9BF8BFF80DAE53F251C13E6AA11435D80CE21BEDBD8
j = 74
MD = EFC9EE529414410CC9A4F27DE806D46650098342DE3D017609FC598B83596F50D36B7B46BBC5F0A9A5622E8F0E8D24FE25F7006CE9971FD4E9649990E021D5E5
j = 75
MD = FE320057F66431FB97C259A5C066292DFC6701921B23AF3DB98C8A04013D138C814CF2935A708EAD900F77911D1C0B73177B851241E7DC94E4900068630FC3CF
j = 76
MD = 3CBC5D93C240B173E7A89927180183CA92388886FFE3068D366F95D17D9F603FCC168DA81EDD5F28944AB65D97241B5BDD0D29772EE9A79EABC546D2B43AB543
j = 77
MD = CF9533350635BE8EED31D92550EF69B66EE03022FFD96219699DB3CAC406FB4B1E998AC4FC60EB22D8D6FAAD316C858A2E5D38DC2359977AB01AF843C61FB34A
j = 78
MD = D9779BF8526A0B04F754B45C09C05115DB8496B46C92C4BB0EC7A7D03D3F87D9CBF25B8A581C588795E80BBAC2644AC9B13AF6E0107239DF39A551B180FAC4E0
j = 79
MD = D582C7E6081E6BDD333AC051F45384B983147D595B7A85B6AC86BD46DD3034DC39710BB756CC7B4D4E6BB77C6F12F011CA63028A111B95751B9EA9B347BAFECC
j = 80
MD = A7E9CCD59C4E99CA912DABDD51EDDAF7A630305339B506D30A14AFE9CD4EDA440D22CEF637FCDDB9E7B77C42EBF75E7029747B411B1F4DAD8B722C1740324D78
j = 81
MD = 916E1F434530422AF87FA957B4D8D6E88812C10D0AADD801DFC8C93F41016FF02D909DFA8A38812E9039255246A34201C2D5785ED11BFA1B4C3C5FB7115B4103
j = 82
MD = 634DD6EBC27F53C37E7DF31EE457578CAF25B64078D91B900C216D0BCBECE1B39BB7D900244ADDD7B52B891F9EA3A22D71116DC81D65A70BB312B7E39778160A
j = 83
MD = 49553B556AD192FF9870534701B458210AE22D4BB7BE79EA23C24436A1B57CBC387B124B2C319439316E26C31F39BBCB6503E011D50B6961BB960683F7EECE5C
j = 84
MD = 5EA5AFCD9EA6749CCF241D1E59A34FA84949A983B9A1ABEFD50159FD73DB116EBCD80C54BD2EE33A19C9012584FC1CA5ECFFD9A3F2A5B48E98817B31D431095F
j = 85
MD = 4EA0791401E333E110D7033FF8EE7E28CF0F863E8C974245D2D1CA2AFA367E696A59991ABE68594915981CB3457AAE8F902A3A7D918824C8046268ADCB088E56
j = 86
MD = D2E7468B631F44E836F43A729F1183A343B8CBD278749440B4A4CAA245E6F9E7E28916C4EDFB304B771D776E28117BA731B97EFD9CB376B766C390F10457BDA1
j = 87
MD = B21CA882F88041CD925F1F905F4AD977D847D777C40602C596BB67087E2574F103C4947A94547445203CC36FEB1336BD908214A613146525A13E9B977DE81FD4
j = 88
MD = 7C9652096489A5E71A8B9716B57BE4A536F9158C9844725EFD956F47ED178C9BEBD5BDF12A0FCA6C67CAEA267C4578D93F44A743F0FA0250E8AFA2EC8F920A5C
j = 89
MD = 05768395D1836E2311DD25D68EF9C12BC6B1586804A4DC10A20827E70C59572B18FBF13B16849D2B9AC50F3352AE800F0C90D15FE0F9E5241D7A50AB83D9DCA6
j = 90
MD = A956F6A8EBCA6F4293FEC1D6CDFEB83666D2EA77BCAF597F5939ED574BC03504B95C177C06503B622CB6F8604D5873CB67F69EF7C051F6D817C15FBC760FA329
j = 91
MD = 175CB23B223F34542ADBB5DBCC208575EEDCA46EBF88BF3D60E642094E6E6F0E1D204632D2CE80172AC851B057BD14712C0C6DDEDCA6316BE7E93EA432B006CC
j = 92
MD = 08E3756BC8E2A0CEF83C83549DB7C771B0FC6401C8515114E5893A3500A70DF0206DC8E08CF69C6CDC89045C4ECC3364DB4354C33A48174DA91299EF1FAD30FA
j = 93
MD = DB323177B76F5871B03C11E10F3B8E80ECBFC6227DF9AAA943E1BA82F51D6DE9C4D177BDB9C0ED490D2FE808B641A623EBC945D7830862B2C544CA426CC9A59B
j = 94
MD = DC4C7086656796EB73C9E54CB1047AB830BD2B7171F5BB9A9AA209BC5DCB5A367822B3D1ED747C2494721C471145A56CFC2CA0090F1C34219A1014661B3794DC
j = 95
MD = F922ECC099B523EB9043A89C74FE97EF4299FD74A102EF6A877E8F8D366B57F7DB45BD618566866253C6771FB6D2DF0E128C69FE7014C0E7DD4F2915570F5BC0
j = 96
MD = 2F2BEB1E2F5271A134235AC36C1331B3B01B820C006E6C9B8017D57E954E751F75D2E259C795D3DF62DE1474A268C3C9F1A6711BB48E037CE13526CF12F90BA9
j = 97
MD = F9CF13A50ED8BF05DF151E29E303A7EC0CDB03245566CDB549DB6D00349F781E5918136978220C21CED63FA3E9B1D1D2A698DFA9FCEBA502AFF2CB6E573B0346
j = 98
MD = C291482F994AF075E91AF44D2A333442BF75B0F5995DFCCE298E24B83D3CD6A8CF0AE6516BEABD8C330E479572BFD0AC725DBBF507CEDF337AE790D004CCA91C
j = 99
MD = FF0CE0247E9F1B08FCC874EC8950A587336360FAB124C5BC3028035396DCB141561EF3D9A75F4633C27D75131EA1492B1F19FA4929BD1697234636AAAACCD876

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