adding JH

This commit is contained in:
bg 2010-12-16 21:52:56 +00:00
parent b8d6b2bd3d
commit bd740a03aa
26 changed files with 41314 additions and 0 deletions

99
hfal/hfal_jh.c Normal file
View File

@ -0,0 +1,99 @@
/* hfal_jh.c */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2010 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_jh.c
* \email daniel.otte@rub.de
* \author Daniel Otte
* \date 2010-12-16
* \license GPLv3 or later
*
*/
#include <avr/pgmspace.h>
#include <stdlib.h>
#include "hashfunction_descriptor.h"
#include "jh_simple.h"
static const char jh224_str[] PROGMEM = "JH-224";
static const char jh256_str[] PROGMEM = "JH-256";
static const char jh384_str[] PROGMEM = "JH-384";
static const char jh512_str[] PROGMEM = "JH-512";
const hfdesc_t jh224_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
jh224_str,
sizeof(jh_ctx_t),
JH224_BLOCKSIZE,
224,
(hf_init_fpt)jh224_init,
(hf_nextBlock_fpt)jh_nextBlock,
(hf_lastBlock_fpt)jh_lastBlock,
(hf_ctx2hash_fpt)jh224_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)NULL
};
const hfdesc_t jh256_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
jh256_str,
sizeof(jh_ctx_t),
JH256_BLOCKSIZE,
256,
(hf_init_fpt)jh256_init,
(hf_nextBlock_fpt)jh_nextBlock,
(hf_lastBlock_fpt)jh_lastBlock,
(hf_ctx2hash_fpt)jh256_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)NULL
};
const hfdesc_t jh384_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
jh384_str,
sizeof(jh_ctx_t),
JH384_BLOCKSIZE,
384,
(hf_init_fpt)jh384_init,
(hf_nextBlock_fpt)jh_nextBlock,
(hf_lastBlock_fpt)jh_lastBlock,
(hf_ctx2hash_fpt)jh384_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)NULL
};
const hfdesc_t jh512_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
jh512_str,
sizeof(jh_ctx_t),
JH512_BLOCKSIZE,
512,
(hf_init_fpt)jh512_init,
(hf_nextBlock_fpt)jh_nextBlock,
(hf_lastBlock_fpt)jh_lastBlock,
(hf_ctx2hash_fpt)jh512_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)NULL
};

32
hfal/hfal_jh.h Normal file
View File

@ -0,0 +1,32 @@
/* hfal_jh.h */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2010 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/>.
*/
#ifndef HFAL_JH_H_
#define HFAL_JH_H_
#include <avr/pgmspace.h>
#include "hashfunction_descriptor.h"
extern const hfdesc_t jh224_desc;
extern const hfdesc_t jh256_desc;
extern const hfdesc_t jh384_desc;
extern const hfdesc_t jh512_desc;
#endif /* HFAL_JH_H_ */

62
jh/jh_simple.h Normal file
View File

@ -0,0 +1,62 @@
/* jh_simple.h */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2010 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/>.
*/
#ifndef JH_SIMPLE_H_
#define JH_SIMPLE_H_
#include <stdint.h>
#define JH224_BLOCKSIZE 512
#define JH224_BLOCKSIZE_B ((JH224_BLOCKSIZE+7)/8)
#define JH256_BLOCKSIZE 512
#define JH256_BLOCKSIZE_B ((JH256_BLOCKSIZE+7)/8)
#define JH384_BLOCKSIZE 512
#define JH384_BLOCKSIZE_B ((JH284_BLOCKSIZE+7)/8)
#define JH512_BLOCKSIZE 512
#define JH512_BLOCKSIZE_B ((JH512_BLOCKSIZE+7)/8)
typedef struct {
uint8_t a[128];
uint32_t block_hashed;
} jh_ctx_t;
void jh_round(uint8_t* a, uint8_t roundno);
void jh_encrypt(uint8_t* a);
void jh_init(uint16_t hashlen_b, jh_ctx_t* ctx);
void jh_nextBlock(jh_ctx_t* ctx, void* block);
void jh_lastBlock(jh_ctx_t* ctx, void* block, uint16_t length_b);
void jh_ctx2hash(void* dest, uint16_t length_b, jh_ctx_t* ctx);
void jh224_init(jh_ctx_t* ctx);
void jh224_ctx2hash(void* dest, jh_ctx_t* ctx);
void jh256_init(jh_ctx_t* ctx);
void jh256_ctx2hash(void* dest, jh_ctx_t* ctx);
void jh384_init(jh_ctx_t* ctx);
void jh384_ctx2hash(void* dest, jh_ctx_t* ctx);
void jh512_init(jh_ctx_t* ctx);
void jh512_ctx2hash(void* dest, jh_ctx_t* ctx);
#endif /* JH_SIMPLE_H_ */

224
jh/jh_simple_speed.c Normal file
View File

@ -0,0 +1,224 @@
/* jh_simple_speed.c */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2006-2010 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/>.
*/
#include <stdint.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <string.h>
#include "memxor.h"
#include "jh_simple.h"
#include "jh_tables.h"
#define DEBUG 0
#if DEBUG
#include "cli.h"
#endif
void jh_round(uint8_t* a, uint8_t roundno){
uint8_t b[128];
uint8_t i,r,u,v,x,y;
uint8_t *pr;
pr = jh_round_const + 32*roundno;
for(i=0; i<128; ++i){
if(i%4==0){
r = pgm_read_byte(pr++);
}
b[i]=pgm_read_byte(&(jh_lutbox[((r&0xC0)<<2)|a[i]]));
r<<=2;
}
for(i=0;i<128;++i){
u = pgm_read_byte(jh_permutation_table+2*i);
v = pgm_read_byte(jh_permutation_table+2*i+1);
x = b[u>>1];
y = b[v>>1];
if(u&1){
x <<= 4;
}else{
x &= 0xf0;
}
if(v&1){
y &= 0x0f;
}else{
y >>= 4;
}
a[i] = x|y;
}
}
uint8_t jh_l_inv(uint8_t a){
uint8_t v,w;
v = a>>4;
w = a&0xf;
v ^= ((w<<1)^(w>>3)^((w>>2)&2))&0xf;
w ^= ((v<<1)^(v>>3)^((v>>2)&2))&0xf;
return w|(v<<4);
}
void group(uint8_t *a){
uint8_t b[128];
uint8_t i,x,y;
for(i=0; i<128; ++i){
x = (((a[i/8+ 0])>>4)&0x8)
| (((a[i/8+ 32])>>5)&0x4)
| (((a[i/8+ 64])>>6)&0x2)
| (((a[i/8+ 96])>>7)&0x1);
a[i/8] <<= 1; a[i/8+32]<<=1; a[i/8+64]<<=1; a[i/8+96]<<=1;
y = (((a[i/8+ 16])>>4)&0x8)
| (((a[i/8+ 48])>>5)&0x4)
| (((a[i/8+ 80])>>6)&0x2)
| (((a[i/8+112])>>7)&0x1);
a[i/8+16] <<= 1; a[i/8+48]<<=1; a[i/8+80]<<=1; a[i/8+112]<<=1;
b[i]= (x<<4)|y;
}
memcpy(a,b,128);
}
void degroup(uint8_t *a){
uint8_t b[128];
uint8_t i,j;
for(i=0;i<128;++i){
j=i/8;
b[j+ 0]<<=1; b[j+ 0] |= ((a[i])>>7)&1;
b[j+ 32]<<=1; b[j+ 32] |= ((a[i])>>6)&1;
b[j+ 64]<<=1; b[j+ 64] |= ((a[i])>>5)&1;
b[j+ 96]<<=1; b[j+ 96] |= ((a[i])>>4)&1;
b[j+ 16]<<=1; b[j+ 16] |= ((a[i])>>3)&1;
b[j+ 48]<<=1; b[j+ 48] |= ((a[i])>>2)&1;
b[j+ 80]<<=1; b[j+ 80] |= ((a[i])>>1)&1;
b[j+112]<<=1; b[j+112] |= ((a[i])>>0)&1;
}
memcpy(a,b,128);
}
void jh_encrypt(uint8_t* a){
uint8_t i;
/* grouping */
#if DEBUG
cli_putstr_P(PSTR("\r\n== pre group ==\r\n"));
cli_hexdump_block(a, 128, 4, 16);
#endif
group(a);
for(i=0;i<35;++i){
jh_round(a, i);
}
uint8_t r;
uint8_t *pr;
pr = jh_round_const + 32*35;
for(i=0; i<128; ++i){
if(i%4==0){
r = pgm_read_byte(pr++);
}
a[i]=jh_l_inv(pgm_read_byte(&(jh_lutbox[((r&0xC0)<<2)|a[i]])));
r<<=2;
}
/* degrouping */
#if DEBUG
cli_putstr_P(PSTR("\r\n== pre degroup ==\r\n"));
cli_hexdump_block(a, 128, 4, 16);
#endif
degroup(a);
#if DEBUG
cli_putstr_P(PSTR("\r\n== post degroup ==\r\n"));
cli_hexdump_block(a, 128, 4, 16);
#endif
}
void jh_init(uint16_t hashlen_b, jh_ctx_t* ctx){
memset(ctx->a, 0, 128);
ctx->a[0] = hashlen_b>>8;
ctx->a[1] = hashlen_b&0xff;
jh_encrypt(ctx->a);
ctx->block_hashed=0;
}
void jh_nextBlock(jh_ctx_t* ctx, void* block){
memxor(ctx->a, block, 64);
jh_encrypt(ctx->a);
memxor(ctx->a+64, block, 64);
ctx->block_hashed++;
}
void jh_lastBlock(jh_ctx_t* ctx, void* block, uint16_t length_b){
while(length_b>=64*8){
jh_nextBlock(ctx, block);
block = (uint8_t*)block + 64;
length_b -= 64*8;
}
uint8_t buffer[64];
uint64_t total_length;
memset(buffer, 0, 64);
memcpy(buffer, block, (length_b+7)/8);
buffer[length_b/8] |= 0x80>>(length_b%8);
total_length=ctx->block_hashed*512+length_b;
if(length_b==0){
}else{
jh_nextBlock(ctx, buffer);
buffer[0]=0;
}
memset(buffer+1, 0, 64-8-1);
buffer[63] = total_length&0xff;
buffer[62] = (total_length>> 8)&0xff;
buffer[61] = (total_length>>16)&0xff;
buffer[60] = (total_length>>24)&0xff;
buffer[59] = (total_length>>32)&0xff;
buffer[58] = (total_length>>40)&0xff;
buffer[57] = (total_length>>48)&0xff;
buffer[56] = (total_length>>56)&0xff;
jh_nextBlock(ctx, buffer);
}
void jh_ctx2hash(void* dest, uint16_t length_b, jh_ctx_t* ctx){
memcpy(dest, ctx->a+128-(length_b+7)/8, (length_b+7)/8);
}
void jh224_init(jh_ctx_t* ctx){
jh_init(224, ctx);
}
void jh224_ctx2hash(void* dest, jh_ctx_t* ctx){
jh_ctx2hash(dest, 224, ctx);
}
void jh256_init(jh_ctx_t* ctx){
jh_init(256, ctx);
}
void jh256_ctx2hash(void* dest, jh_ctx_t* ctx){
jh_ctx2hash(dest, 256, ctx);
}
void jh384_init(jh_ctx_t* ctx){
jh_init(384, ctx);
}
void jh384_ctx2hash(void* dest, jh_ctx_t* ctx){
jh_ctx2hash(dest, 384, ctx);
}
void jh512_init(jh_ctx_t* ctx){
jh_init(512, ctx);
}
void jh512_ctx2hash(void* dest, jh_ctx_t* ctx){
jh_ctx2hash(dest, 512, ctx);
}

347
jh/jh_tablegen.rb Normal file
View File

@ -0,0 +1,347 @@
#!/usr/bin/ruby
# jh_tablegen.rb
=begin
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2010 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/>.
=end
$sbox0 = [ 9, 0, 4, 11, 13, 12, 3, 15, 1, 10, 2, 6, 7, 5, 8, 14]
$sbox1 = [ 3, 12, 6, 13, 5, 7, 1, 9, 15, 2, 0, 4, 11, 10, 14, 8]
# (b) ^= ( ( (a) << 1) ^ ( (a) >> 3) ^ (( (a) >> 2) & 2) ) & 0xf;
# (a) ^= ( ( (b) << 1) ^ ( (b) >> 3) ^ (( (b) >> 2) & 2) ) & 0xf;
def L_transform(v,w)
v = v&0x0f; w = w&0x0f
# a = ((v<<1)|(v>>3))&0xf
# d = a^w^((v>>2)&2)
# d_ = ((d<<1)|(d>>3))&0xf
# c = v^d_^((d>>2)&2)
# return c, d
w ^= ((v<<1)^(v>>3)^((v>>2)&2))&0x0f
v ^= ((w<<1)^(w>>3)^((w>>2)&2))&0x0f
return v,w
end
def L_transform_inv(v,w)
a,b = L_transform(w,v)
return b,a
end
def pi_permute(a, d=8)
b=Array.new
(2**(d-2)).times{ |i| b[4*i+0] = a[4*i+0]}
(2**(d-2)).times{ |i| b[4*i+1] = a[4*i+1]}
(2**(d-2)).times{ |i| b[4*i+2] = a[4*i+3]}
(2**(d-2)).times{ |i| b[4*i+3] = a[4*i+2]}
return b
end
def p_permute(a, d=8)
b=Array.new
(2**(d-1)).times{ |i| b[i] = a[2*i]}
(2**(d-1)).times{ |i| b[i+2**(d-1)] = a[2*i+1]}
return b
end
def phi_permute(a, d=8)
b=Array.new
(2**(d-1)).times{ |i| b[i] = a[i]}
(2**(d-2)).times{ |i| b[2**(d-1)+2*i+0] = a[2**(d-1)+2*i+1]}
(2**(d-2)).times{ |i| b[2**(d-1)+2*i+1] = a[2**(d-1)+2*i+0]}
return b
end
def test_permutations
a = Array.new
16.times{|i| a[i]=i}
puts a.inspect
b = pi_permute(a,4)
puts b.inspect
b = p_permute(a,4)
puts b.inspect
b = phi_permute(a,4)
puts b.inspect
end
def permutation(a, d=8)
return phi_permute(p_permute(pi_permute(a,d),d),d)
end
$permutation_table=Array.new
def gen_permutation_table
a = Array.new
256.times {|i| a<<i}
$permutation_table=permutation(a,8)
end
def print_permute_table
printf("\npermutation table:\n\t")
16.times do |y|
16.times do |x|
printf("0x%02X, ", $permutation_table[y*16+x])
end
printf("\n\t")
end
puts("")
end
$nibble_invert=false
def split_byte(v)
a = (v>>4)&0xf
b = v&0xf
return b,a if $nibble_invert
return a,b
end
def join_nibbles(a,b)
if($nibble_invert)
v = ((b<<4)|(a&0xf))&0xff
else
v = ((a<<4)|(b&0xf))&0xff
end
return v
end
$lutbox=Array.new
def gen_lutboxes
4.times do |box|
$lutbox[box]=Array.new
256.times do |i|
a,b = split_byte(i)
a = ((box&2)==2)?$sbox1[a]:$sbox0[a]
b = ((box&1)==1)?$sbox1[b]:$sbox0[b]
c,d = L_transform(a,b)
$lutbox[box]<<join_nibbles(c,d)
end
end
end
def print_lutbox(n)
printf("\nSBOX%d:\n\t",n)
256.times do |i|
printf("0x%02X, ",$lutbox[n][i])
print("\n\t") if(i%16==15)
end
end
$round_const = [
0x6a09e667f3bcc908b2fb1366ea957d3e3adec17512775099da2f590b0667322a,
0xbb896bf05955abcd5281828d66e7d99ac4203494f89bf12817deb43288712231,
0x1836e76b12d79c55118a1139d2417df52a2021225ff6350063d88e5f1f91631c,
0x263085a7000fa9c3317c6ca8ab65f7a7713cf4201060ce886af855a90d6a4eed,
0x1cebafd51a156aeb62a11fb3be2e14f60b7e48de85814270fd62e97614d7b441,
0xe5564cb574f7e09c75e2e244929e9549279ab224a28e445d57185e7d7a09fdc1,
0x5820f0f0d764cff3a5552a5e41a82b9eff6ee0aa615773bb07e8603424c3cf8a,
0xb126fb741733c5bfcef6f43a62e8e5706a26656028aa897ec1ea4616ce8fd510,
0xdbf0de32bca77254bb4f562581a3bc991cf94f225652c27f14eae958ae6aa616,
0xe6113be617f45f3de53cff03919a94c32c927b093ac8f23b47f7189aadb9bc67,
0x80d0d26052ca45d593ab5fb3102506390083afb5ffe107dacfcba7dbe601a12b,
0x43af1c76126714dfa950c368787c81ae3beecf956c85c962086ae16e40ebb0b4,
0x9aee8994d2d74a5cdb7b1ef294eed5c1520724dd8ed58c92d3f0e174b0c32045,
0x0b2aa58ceb3bdb9e1eef66b376e0c565d5d8fe7bacb8da866f859ac521f3d571,
0x7a1523ef3d970a3a9b0b4d610e02749d37b8d57c1885fe4206a7f338e8356866,
0x2c2db8f7876685f2cd9a2e0ddb64c9d5bf13905371fc39e0fa86e1477234a297,
0x9df085eb2544ebf62b50686a71e6e828dfed9dbe0b106c9452ceddff3d138990,
0xe6e5c42cb2d460c9d6e4791a1681bb2e222e54558eb78d5244e217d1bfcf5058,
0x8f1f57e44e126210f00763ff57da208a5093b8ff7947534a4c260a17642f72b2,
0xae4ef4792ea148608cf116cb2bff66e8fc74811266cd641112cd17801ed38b59,
0x91a744efbf68b192d0549b608bdb3191fc12a0e83543cec5f882250b244f78e4,
0x4b5d27d3368f9c17d4b2a2b216c7e74e7714d2cc03e1e44588cd9936de74357c,
0x0ea17cafb8286131bda9e3757b3610aa3f77a6d0575053fc926eea7e237df289,
0x848af9f57eb1a616e2c342c8cea528b8a95a5d16d9d87be9bb3784d0c351c32b,
0xc0435cc3654fb85dd9335ba91ac3dbde1f85d567d7ad16f9de6e009bca3f95b5,
0x927547fe5e5e45e2fe99f1651ea1cbf097dc3a3d40ddd21cee260543c288ec6b,
0xc117a3770d3a34469d50dfa7db020300d306a365374fa828c8b780ee1b9d7a34,
0x8ff2178ae2dbe5e872fac789a34bc228debf54a882743caad14f3a550fdbe68f,
0xabd06c52ed58ff091205d0f627574c8cbc1fe7cf79210f5a2286f6e23a27efa0,
0x631f4acb8d3ca4253e301849f157571d3211b6c1045347befb7c77df3c6ca7bd,
0xae88f2342c23344590be2014fab4f179fd4bf7c90db14fa4018fcce689d2127b,
0x93b89385546d71379fe41c39bc602e8b7c8b2f78ee914d1f0af0d437a189a8a4,
0x1d1e036abeef3f44848cd76ef6baa889fcec56cd7967eb909a464bfc23c72435,
0xa8e4ede4c5fe5e88d4fb192e0a0821e935ba145bbfc59c2508282755a5df53a5,
0x8e4e37a3b970f079ae9d22a499a714c875760273f74a9398995d32c05027d810,
0x61cfa42792f93b9fde36eb163e978709fafa7616ec3c7dad0135806c3d91a21b
]
def group(a)
q = Array.new
128.times do |i|
q[2*i] = ((a[i/8])>>4)&0x8 | ((a[i/8+32])>>5)&0x4 | ((a[i/8+64])>>6)&0x2 | ((a[i/8+96])>>7)&0x1
a[i/8] <<= 1; a[i/8+32]<<=1; a[i/8+64]<<=1; a[i/8+96]<<=1;
q[2*i+1] = ((a[i/8+16])>>4)&0x8 | ((a[i/8+48])>>5)&0x4 | ((a[i/8+80])>>6)&0x2 | ((a[i/8+112])>>7)&0x1
a[i/8+16] <<= 1; a[i/8+48]<<=1; a[i/8+80]<<=1; a[i/8+112]<<=1;
end
b = Array.new
128.times {|i| b<<join_nibbles(q[2*i], q[2*i+1])}
return b
end
def degroup(a)
b = Array.new
128.times {|i| b[i]=0}
128.times do |i|
b[i/8+ 0]<<=1; b[i/8+ 0] |= (a[i]>>7)&1; a[i]<<=1
b[i/8+ 32]<<=1; b[i/8+ 32] |= (a[i]>>7)&1; a[i]<<=1
b[i/8+ 64]<<=1; b[i/8+ 64] |= (a[i]>>7)&1; a[i]<<=1
b[i/8+ 96]<<=1; b[i/8+ 96] |= (a[i]>>7)&1; a[i]<<=1
b[i/8+ 16]<<=1; b[i/8+ 16] |= (a[i]>>7)&1; a[i]<<=1
b[i/8+ 48]<<=1; b[i/8+ 48] |= (a[i]>>7)&1; a[i]<<=1
b[i/8+ 80]<<=1; b[i/8+ 80] |= (a[i]>>7)&1; a[i]<<=1
b[i/8+112]<<=1; b[i/8+112] |= (a[i]>>7)&1; a[i]<<=1
end
return b
end
# data is an array of bytes
#
def single_round(data, round)
a = Array.new
rc = $round_const[round]
=begin
printf("\n== round %2d==\n\t", round)
16.times do |y|
8.times do |x|
printf("%02X ", data[8*y+x])
end
print("\n\t")
end
=end
128.times do |idx|
x,y=split_byte($lutbox[((rc)>>(254))&0x3][data[idx]])
rc <<= 2
a << x << y
end
a = permutation(a)
b = Array.new
128.times {|idx| b << join_nibbles(a[2*idx],a[2*idx+1])}
return b
end
def encrypt(data)
=begin
print("\n== ENCRYPT ==\n")
print("=== pre group: ===\n\t")
16.times do |y|
8.times do |x|
printf("%02X ", data[8*y+x])
end
print("\n\t")
end
puts("")
=end
data = group(data)
=begin
print("=== post group: ===\n\t")
16.times do |y|
8.times do |x|
printf("%02X ", data[8*y+x])
end
print("\n\t")
end
puts("")
=end
35.times do |round|
data = single_round(data, round)
end
a = Array.new
rc = $round_const[35]
data.length.times do |idx|
x, y = split_byte($lutbox[(rc>>254)&3][data[idx]])
rc <<= 2
v, w = L_transform_inv(x, y)
a << join_nibbles(v,w)
end
a = degroup(a)
=begin
print("\n=== post enc: ===\n\t")
16.times do |y|
8.times do |x|
printf("%02X ", a[8*y+x])
end
print("\n\t")
end
puts("")
=end
return a
end
def hash_block(state_a, block)
64.times { |i| state_a[i] ^= block[i]}
state_a = encrypt(state_a)
64.times { |i| state_a[64+i] ^= block[i]}
return state_a
end
def test_L_inverse
print("\nL_inv_test:\n\t")
256.times do |i|
a,b = split_byte(i)
c,d = L_transform(a, b)
a,b = L_transform_inv(c, d)
if join_nibbles(a,b)==i
print('*')
else
print('!')
end
print("\n\t") if(i%16==15)
end
end
#test_permutations
gen_lutboxes
gen_permutation_table
print_permute_table
4.times{ |i| print_lutbox(i) }
test_L_inverse
print("\nsingle round:\n\t")
h = single_round([0,0,0,0,0,0,0,0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],0)
16.times do |y|
8.times do |x|
printf("%02X, ",h[y*8+x])
end
print("\n\t")
end
#=begin
print("\nH(0):\n\t")
h = hash_block([0x01,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
h = hash_block(h,
[0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
16.times do |y|
8.times do |x|
printf("%02X, ",h[y*8+x])
end
print("\n\t")
end
#=end
puts("")

152
jh/jh_tables.c Normal file
View File

@ -0,0 +1,152 @@
/* jh_tables.c */
/*
This file is part of the ARM-Crypto-Lib.
Copyright (C) 2006-2010 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/>.
*/
#include <stdint.h>
#include <avr/pgmspace.h>
uint8_t jh_permutation_table[] PROGMEM = {
0x00, 0x03, 0x04, 0x07, 0x08, 0x0B, 0x0C, 0x0F, 0x10, 0x13, 0x14, 0x17, 0x18, 0x1B, 0x1C, 0x1F,
0x20, 0x23, 0x24, 0x27, 0x28, 0x2B, 0x2C, 0x2F, 0x30, 0x33, 0x34, 0x37, 0x38, 0x3B, 0x3C, 0x3F,
0x40, 0x43, 0x44, 0x47, 0x48, 0x4B, 0x4C, 0x4F, 0x50, 0x53, 0x54, 0x57, 0x58, 0x5B, 0x5C, 0x5F,
0x60, 0x63, 0x64, 0x67, 0x68, 0x6B, 0x6C, 0x6F, 0x70, 0x73, 0x74, 0x77, 0x78, 0x7B, 0x7C, 0x7F,
0x80, 0x83, 0x84, 0x87, 0x88, 0x8B, 0x8C, 0x8F, 0x90, 0x93, 0x94, 0x97, 0x98, 0x9B, 0x9C, 0x9F,
0xA0, 0xA3, 0xA4, 0xA7, 0xA8, 0xAB, 0xAC, 0xAF, 0xB0, 0xB3, 0xB4, 0xB7, 0xB8, 0xBB, 0xBC, 0xBF,
0xC0, 0xC3, 0xC4, 0xC7, 0xC8, 0xCB, 0xCC, 0xCF, 0xD0, 0xD3, 0xD4, 0xD7, 0xD8, 0xDB, 0xDC, 0xDF,
0xE0, 0xE3, 0xE4, 0xE7, 0xE8, 0xEB, 0xEC, 0xEF, 0xF0, 0xF3, 0xF4, 0xF7, 0xF8, 0xFB, 0xFC, 0xFF,
0x02, 0x01, 0x06, 0x05, 0x0A, 0x09, 0x0E, 0x0D, 0x12, 0x11, 0x16, 0x15, 0x1A, 0x19, 0x1E, 0x1D,
0x22, 0x21, 0x26, 0x25, 0x2A, 0x29, 0x2E, 0x2D, 0x32, 0x31, 0x36, 0x35, 0x3A, 0x39, 0x3E, 0x3D,
0x42, 0x41, 0x46, 0x45, 0x4A, 0x49, 0x4E, 0x4D, 0x52, 0x51, 0x56, 0x55, 0x5A, 0x59, 0x5E, 0x5D,
0x62, 0x61, 0x66, 0x65, 0x6A, 0x69, 0x6E, 0x6D, 0x72, 0x71, 0x76, 0x75, 0x7A, 0x79, 0x7E, 0x7D,
0x82, 0x81, 0x86, 0x85, 0x8A, 0x89, 0x8E, 0x8D, 0x92, 0x91, 0x96, 0x95, 0x9A, 0x99, 0x9E, 0x9D,
0xA2, 0xA1, 0xA6, 0xA5, 0xAA, 0xA9, 0xAE, 0xAD, 0xB2, 0xB1, 0xB6, 0xB5, 0xBA, 0xB9, 0xBE, 0xBD,
0xC2, 0xC1, 0xC6, 0xC5, 0xCA, 0xC9, 0xCE, 0xCD, 0xD2, 0xD1, 0xD6, 0xD5, 0xDA, 0xD9, 0xDE, 0xDD,
0xE2, 0xE1, 0xE6, 0xE5, 0xEA, 0xE9, 0xEE, 0xED, 0xF2, 0xF1, 0xF6, 0xF5, 0xFA, 0xF9, 0xFE, 0xFD
};
uint8_t jh_lutbox[] PROGMEM = {
0xA8, 0xB1, 0x35, 0xEA, 0x2C, 0x0D, 0xD2, 0x6E, 0x90, 0xCB, 0xF3, 0x77, 0x56, 0x14, 0x89, 0x4F,
0x19, 0x00, 0x84, 0x5B, 0x9D, 0xBC, 0x63, 0xDF, 0x21, 0x7A, 0x42, 0xC6, 0xE7, 0xA5, 0x38, 0xFE,
0x61, 0x78, 0xFC, 0x23, 0xE5, 0xC4, 0x1B, 0xA7, 0x59, 0x02, 0x3A, 0xBE, 0x9F, 0xDD, 0x40, 0x86,
0x0C, 0x15, 0x91, 0x4E, 0x88, 0xA9, 0x76, 0xCA, 0x34, 0x6F, 0x57, 0xD3, 0xF2, 0xB0, 0x2D, 0xEB,
0xD0, 0xC9, 0x4D, 0x92, 0x54, 0x75, 0xAA, 0x16, 0xE8, 0xB3, 0x8B, 0x0F, 0x2E, 0x6C, 0xF1, 0x37,
0x82, 0x9B, 0x1F, 0xC0, 0x06, 0x27, 0xF8, 0x44, 0xBA, 0xE1, 0xD9, 0x5D, 0x7C, 0x3E, 0xA3, 0x65,
0xEF, 0xF6, 0x72, 0xAD, 0x6B, 0x4A, 0x95, 0x29, 0xD7, 0x8C, 0xB4, 0x30, 0x11, 0x53, 0xCE, 0x08,
0x74, 0x6D, 0xE9, 0x36, 0xF0, 0xD1, 0x0E, 0xB2, 0x4C, 0x17, 0x2F, 0xAB, 0x8A, 0xC8, 0x55, 0x93,
0x4B, 0x52, 0xD6, 0x09, 0xCF, 0xEE, 0x31, 0x8D, 0x73, 0x28, 0x10, 0x94, 0xB5, 0xF7, 0x6A, 0xAC,
0x5E, 0x47, 0xC3, 0x1C, 0xDA, 0xFB, 0x24, 0x98, 0x66, 0x3D, 0x05, 0x81, 0xA0, 0xE2, 0x7F, 0xB9,
0xBD, 0xA4, 0x20, 0xFF, 0x39, 0x18, 0xC7, 0x7B, 0x85, 0xDE, 0xE6, 0x62, 0x43, 0x01, 0x9C, 0x5A,
0xC5, 0xDC, 0x58, 0x87, 0x41, 0x60, 0xBF, 0x03, 0xFD, 0xA6, 0x9E, 0x1A, 0x3B, 0x79, 0xE4, 0x22,
0x97, 0x8E, 0x0A, 0xD5, 0x13, 0x32, 0xED, 0x51, 0xAF, 0xF4, 0xCC, 0x48, 0x69, 0x2B, 0xB6, 0x70,
0x33, 0x2A, 0xAE, 0x71, 0xB7, 0x96, 0x49, 0xF5, 0x0B, 0x50, 0x68, 0xEC, 0xCD, 0x8F, 0x12, 0xD4,
0xFA, 0xE3, 0x67, 0xB8, 0x7E, 0x5F, 0x80, 0x3C, 0xC2, 0x99, 0xA1, 0x25, 0x04, 0x46, 0xDB, 0x1D,
0x26, 0x3F, 0xBB, 0x64, 0xA2, 0x83, 0x5C, 0xE0, 0x1E, 0x45, 0x7D, 0xF9, 0xD8, 0x9A, 0x07, 0xC1,
/* SBOX1: */
0xD2, 0x0D, 0x77, 0x2C, 0x14, 0x56, 0x90, 0xA8, 0x6E, 0xF3, 0xB1, 0x35, 0xEA, 0xCB, 0x4F, 0x89,
0x63, 0xBC, 0xC6, 0x9D, 0xA5, 0xE7, 0x21, 0x19, 0xDF, 0x42, 0x00, 0x84, 0x5B, 0x7A, 0xFE, 0x38,
0x1B, 0xC4, 0xBE, 0xE5, 0xDD, 0x9F, 0x59, 0x61, 0xA7, 0x3A, 0x78, 0xFC, 0x23, 0x02, 0x86, 0x40,
0x76, 0xA9, 0xD3, 0x88, 0xB0, 0xF2, 0x34, 0x0C, 0xCA, 0x57, 0x15, 0x91, 0x4E, 0x6F, 0xEB, 0x2D,
0xAA, 0x75, 0x0F, 0x54, 0x6C, 0x2E, 0xE8, 0xD0, 0x16, 0x8B, 0xC9, 0x4D, 0x92, 0xB3, 0x37, 0xF1,
0xF8, 0x27, 0x5D, 0x06, 0x3E, 0x7C, 0xBA, 0x82, 0x44, 0xD9, 0x9B, 0x1F, 0xC0, 0xE1, 0x65, 0xA3,
0x95, 0x4A, 0x30, 0x6B, 0x53, 0x11, 0xD7, 0xEF, 0x29, 0xB4, 0xF6, 0x72, 0xAD, 0x8C, 0x08, 0xCE,
0x0E, 0xD1, 0xAB, 0xF0, 0xC8, 0x8A, 0x4C, 0x74, 0xB2, 0x2F, 0x6D, 0xE9, 0x36, 0x17, 0x93, 0x55,
0x31, 0xEE, 0x94, 0xCF, 0xF7, 0xB5, 0x73, 0x4B, 0x8D, 0x10, 0x52, 0xD6, 0x09, 0x28, 0xAC, 0x6A,
0x24, 0xFB, 0x81, 0xDA, 0xE2, 0xA0, 0x66, 0x5E, 0x98, 0x05, 0x47, 0xC3, 0x1C, 0x3D, 0xB9, 0x7F,
0xC7, 0x18, 0x62, 0x39, 0x01, 0x43, 0x85, 0xBD, 0x7B, 0xE6, 0xA4, 0x20, 0xFF, 0xDE, 0x5A, 0x9C,
0xBF, 0x60, 0x1A, 0x41, 0x79, 0x3B, 0xFD, 0xC5, 0x03, 0x9E, 0xDC, 0x58, 0x87, 0xA6, 0x22, 0xE4,
0xED, 0x32, 0x48, 0x13, 0x2B, 0x69, 0xAF, 0x97, 0x51, 0xCC, 0x8E, 0x0A, 0xD5, 0xF4, 0x70, 0xB6,
0x49, 0x96, 0xEC, 0xB7, 0x8F, 0xCD, 0x0B, 0x33, 0xF5, 0x68, 0x2A, 0xAE, 0x71, 0x50, 0xD4, 0x12,
0x80, 0x5F, 0x25, 0x7E, 0x46, 0x04, 0xC2, 0xFA, 0x3C, 0xA1, 0xE3, 0x67, 0xB8, 0x99, 0x1D, 0xDB,
0x5C, 0x83, 0xF9, 0xA2, 0x9A, 0xD8, 0x1E, 0x26, 0xE0, 0x7D, 0x3F, 0xBB, 0x64, 0x45, 0xC1, 0x07,
/* SBOX2: */
0xEF, 0xF6, 0x72, 0xAD, 0x6B, 0x4A, 0x95, 0x29, 0xD7, 0x8C, 0xB4, 0x30, 0x11, 0x53, 0xCE, 0x08,
0x82, 0x9B, 0x1F, 0xC0, 0x06, 0x27, 0xF8, 0x44, 0xBA, 0xE1, 0xD9, 0x5D, 0x7C, 0x3E, 0xA3, 0x65,
0xC5, 0xDC, 0x58, 0x87, 0x41, 0x60, 0xBF, 0x03, 0xFD, 0xA6, 0x9E, 0x1A, 0x3B, 0x79, 0xE4, 0x22,
0xD0, 0xC9, 0x4D, 0x92, 0x54, 0x75, 0xAA, 0x16, 0xE8, 0xB3, 0x8B, 0x0F, 0x2E, 0x6C, 0xF1, 0x37,
0x33, 0x2A, 0xAE, 0x71, 0xB7, 0x96, 0x49, 0xF5, 0x0B, 0x50, 0x68, 0xEC, 0xCD, 0x8F, 0x12, 0xD4,
0x97, 0x8E, 0x0A, 0xD5, 0x13, 0x32, 0xED, 0x51, 0xAF, 0xF4, 0xCC, 0x48, 0x69, 0x2B, 0xB6, 0x70,
0x4B, 0x52, 0xD6, 0x09, 0xCF, 0xEE, 0x31, 0x8D, 0x73, 0x28, 0x10, 0x94, 0xB5, 0xF7, 0x6A, 0xAC,
0xA8, 0xB1, 0x35, 0xEA, 0x2C, 0x0D, 0xD2, 0x6E, 0x90, 0xCB, 0xF3, 0x77, 0x56, 0x14, 0x89, 0x4F,
0x74, 0x6D, 0xE9, 0x36, 0xF0, 0xD1, 0x0E, 0xB2, 0x4C, 0x17, 0x2F, 0xAB, 0x8A, 0xC8, 0x55, 0x93,
0xBD, 0xA4, 0x20, 0xFF, 0x39, 0x18, 0xC7, 0x7B, 0x85, 0xDE, 0xE6, 0x62, 0x43, 0x01, 0x9C, 0x5A,
0x19, 0x00, 0x84, 0x5B, 0x9D, 0xBC, 0x63, 0xDF, 0x21, 0x7A, 0x42, 0xC6, 0xE7, 0xA5, 0x38, 0xFE,
0x61, 0x78, 0xFC, 0x23, 0xE5, 0xC4, 0x1B, 0xA7, 0x59, 0x02, 0x3A, 0xBE, 0x9F, 0xDD, 0x40, 0x86,
0x0C, 0x15, 0x91, 0x4E, 0x88, 0xA9, 0x76, 0xCA, 0x34, 0x6F, 0x57, 0xD3, 0xF2, 0xB0, 0x2D, 0xEB,
0x5E, 0x47, 0xC3, 0x1C, 0xDA, 0xFB, 0x24, 0x98, 0x66, 0x3D, 0x05, 0x81, 0xA0, 0xE2, 0x7F, 0xB9,
0x26, 0x3F, 0xBB, 0x64, 0xA2, 0x83, 0x5C, 0xE0, 0x1E, 0x45, 0x7D, 0xF9, 0xD8, 0x9A, 0x07, 0xC1,
0xFA, 0xE3, 0x67, 0xB8, 0x7E, 0x5F, 0x80, 0x3C, 0xC2, 0x99, 0xA1, 0x25, 0x04, 0x46, 0xDB, 0x1D,
/* SBOX3: */
0x95, 0x4A, 0x30, 0x6B, 0x53, 0x11, 0xD7, 0xEF, 0x29, 0xB4, 0xF6, 0x72, 0xAD, 0x8C, 0x08, 0xCE,
0xF8, 0x27, 0x5D, 0x06, 0x3E, 0x7C, 0xBA, 0x82, 0x44, 0xD9, 0x9B, 0x1F, 0xC0, 0xE1, 0x65, 0xA3,
0xBF, 0x60, 0x1A, 0x41, 0x79, 0x3B, 0xFD, 0xC5, 0x03, 0x9E, 0xDC, 0x58, 0x87, 0xA6, 0x22, 0xE4,
0xAA, 0x75, 0x0F, 0x54, 0x6C, 0x2E, 0xE8, 0xD0, 0x16, 0x8B, 0xC9, 0x4D, 0x92, 0xB3, 0x37, 0xF1,
0x49, 0x96, 0xEC, 0xB7, 0x8F, 0xCD, 0x0B, 0x33, 0xF5, 0x68, 0x2A, 0xAE, 0x71, 0x50, 0xD4, 0x12,
0xED, 0x32, 0x48, 0x13, 0x2B, 0x69, 0xAF, 0x97, 0x51, 0xCC, 0x8E, 0x0A, 0xD5, 0xF4, 0x70, 0xB6,
0x31, 0xEE, 0x94, 0xCF, 0xF7, 0xB5, 0x73, 0x4B, 0x8D, 0x10, 0x52, 0xD6, 0x09, 0x28, 0xAC, 0x6A,
0xD2, 0x0D, 0x77, 0x2C, 0x14, 0x56, 0x90, 0xA8, 0x6E, 0xF3, 0xB1, 0x35, 0xEA, 0xCB, 0x4F, 0x89,
0x0E, 0xD1, 0xAB, 0xF0, 0xC8, 0x8A, 0x4C, 0x74, 0xB2, 0x2F, 0x6D, 0xE9, 0x36, 0x17, 0x93, 0x55,
0xC7, 0x18, 0x62, 0x39, 0x01, 0x43, 0x85, 0xBD, 0x7B, 0xE6, 0xA4, 0x20, 0xFF, 0xDE, 0x5A, 0x9C,
0x63, 0xBC, 0xC6, 0x9D, 0xA5, 0xE7, 0x21, 0x19, 0xDF, 0x42, 0x00, 0x84, 0x5B, 0x7A, 0xFE, 0x38,
0x1B, 0xC4, 0xBE, 0xE5, 0xDD, 0x9F, 0x59, 0x61, 0xA7, 0x3A, 0x78, 0xFC, 0x23, 0x02, 0x86, 0x40,
0x76, 0xA9, 0xD3, 0x88, 0xB0, 0xF2, 0x34, 0x0C, 0xCA, 0x57, 0x15, 0x91, 0x4E, 0x6F, 0xEB, 0x2D,
0x24, 0xFB, 0x81, 0xDA, 0xE2, 0xA0, 0x66, 0x5E, 0x98, 0x05, 0x47, 0xC3, 0x1C, 0x3D, 0xB9, 0x7F,
0x5C, 0x83, 0xF9, 0xA2, 0x9A, 0xD8, 0x1E, 0x26, 0xE0, 0x7D, 0x3F, 0xBB, 0x64, 0x45, 0xC1, 0x07,
0x80, 0x5F, 0x25, 0x7E, 0x46, 0x04, 0xC2, 0xFA, 0x3C, 0xA1, 0xE3, 0x67, 0xB8, 0x99, 0x1D, 0xDB
};
uint8_t jh_round_const[] PROGMEM = {
0x6a, 0x09, 0xe6, 0x67, 0xf3, 0xbc, 0xc9, 0x08, 0xb2, 0xfb, 0x13, 0x66, 0xea, 0x95, 0x7d, 0x3e, 0x3a, 0xde, 0xc1, 0x75, 0x12, 0x77, 0x50, 0x99, 0xda, 0x2f, 0x59, 0x0b, 0x06, 0x67, 0x32, 0x2a,
0xbb, 0x89, 0x6b, 0xf0, 0x59, 0x55, 0xab, 0xcd, 0x52, 0x81, 0x82, 0x8d, 0x66, 0xe7, 0xd9, 0x9a, 0xc4, 0x20, 0x34, 0x94, 0xf8, 0x9b, 0xf1, 0x28, 0x17, 0xde, 0xb4, 0x32, 0x88, 0x71, 0x22, 0x31,
0x18, 0x36, 0xe7, 0x6b, 0x12, 0xd7, 0x9c, 0x55, 0x11, 0x8a, 0x11, 0x39, 0xd2, 0x41, 0x7d, 0xf5, 0x2a, 0x20, 0x21, 0x22, 0x5f, 0xf6, 0x35, 0x00, 0x63, 0xd8, 0x8e, 0x5f, 0x1f, 0x91, 0x63, 0x1c,
0x26, 0x30, 0x85, 0xa7, 0x00, 0x0f, 0xa9, 0xc3, 0x31, 0x7c, 0x6c, 0xa8, 0xab, 0x65, 0xf7, 0xa7, 0x71, 0x3c, 0xf4, 0x20, 0x10, 0x60, 0xce, 0x88, 0x6a, 0xf8, 0x55, 0xa9, 0x0d, 0x6a, 0x4e, 0xed,
0x1c, 0xeb, 0xaf, 0xd5, 0x1a, 0x15, 0x6a, 0xeb, 0x62, 0xa1, 0x1f, 0xb3, 0xbe, 0x2e, 0x14, 0xf6, 0x0b, 0x7e, 0x48, 0xde, 0x85, 0x81, 0x42, 0x70, 0xfd, 0x62, 0xe9, 0x76, 0x14, 0xd7, 0xb4, 0x41,
0xe5, 0x56, 0x4c, 0xb5, 0x74, 0xf7, 0xe0, 0x9c, 0x75, 0xe2, 0xe2, 0x44, 0x92, 0x9e, 0x95, 0x49, 0x27, 0x9a, 0xb2, 0x24, 0xa2, 0x8e, 0x44, 0x5d, 0x57, 0x18, 0x5e, 0x7d, 0x7a, 0x09, 0xfd, 0xc1,
0x58, 0x20, 0xf0, 0xf0, 0xd7, 0x64, 0xcf, 0xf3, 0xa5, 0x55, 0x2a, 0x5e, 0x41, 0xa8, 0x2b, 0x9e, 0xff, 0x6e, 0xe0, 0xaa, 0x61, 0x57, 0x73, 0xbb, 0x07, 0xe8, 0x60, 0x34, 0x24, 0xc3, 0xcf, 0x8a,
0xb1, 0x26, 0xfb, 0x74, 0x17, 0x33, 0xc5, 0xbf, 0xce, 0xf6, 0xf4, 0x3a, 0x62, 0xe8, 0xe5, 0x70, 0x6a, 0x26, 0x65, 0x60, 0x28, 0xaa, 0x89, 0x7e, 0xc1, 0xea, 0x46, 0x16, 0xce, 0x8f, 0xd5, 0x10,
0xdb, 0xf0, 0xde, 0x32, 0xbc, 0xa7, 0x72, 0x54, 0xbb, 0x4f, 0x56, 0x25, 0x81, 0xa3, 0xbc, 0x99, 0x1c, 0xf9, 0x4f, 0x22, 0x56, 0x52, 0xc2, 0x7f, 0x14, 0xea, 0xe9, 0x58, 0xae, 0x6a, 0xa6, 0x16,
0xe6, 0x11, 0x3b, 0xe6, 0x17, 0xf4, 0x5f, 0x3d, 0xe5, 0x3c, 0xff, 0x03, 0x91, 0x9a, 0x94, 0xc3, 0x2c, 0x92, 0x7b, 0x09, 0x3a, 0xc8, 0xf2, 0x3b, 0x47, 0xf7, 0x18, 0x9a, 0xad, 0xb9, 0xbc, 0x67,
0x80, 0xd0, 0xd2, 0x60, 0x52, 0xca, 0x45, 0xd5, 0x93, 0xab, 0x5f, 0xb3, 0x10, 0x25, 0x06, 0x39, 0x00, 0x83, 0xaf, 0xb5, 0xff, 0xe1, 0x07, 0xda, 0xcf, 0xcb, 0xa7, 0xdb, 0xe6, 0x01, 0xa1, 0x2b,
0x43, 0xaf, 0x1c, 0x76, 0x12, 0x67, 0x14, 0xdf, 0xa9, 0x50, 0xc3, 0x68, 0x78, 0x7c, 0x81, 0xae, 0x3b, 0xee, 0xcf, 0x95, 0x6c, 0x85, 0xc9, 0x62, 0x08, 0x6a, 0xe1, 0x6e, 0x40, 0xeb, 0xb0, 0xb4,
0x9a, 0xee, 0x89, 0x94, 0xd2, 0xd7, 0x4a, 0x5c, 0xdb, 0x7b, 0x1e, 0xf2, 0x94, 0xee, 0xd5, 0xc1, 0x52, 0x07, 0x24, 0xdd, 0x8e, 0xd5, 0x8c, 0x92, 0xd3, 0xf0, 0xe1, 0x74, 0xb0, 0xc3, 0x20, 0x45,
0x0b, 0x2a, 0xa5, 0x8c, 0xeb, 0x3b, 0xdb, 0x9e, 0x1e, 0xef, 0x66, 0xb3, 0x76, 0xe0, 0xc5, 0x65, 0xd5, 0xd8, 0xfe, 0x7b, 0xac, 0xb8, 0xda, 0x86, 0x6f, 0x85, 0x9a, 0xc5, 0x21, 0xf3, 0xd5, 0x71,
0x7a, 0x15, 0x23, 0xef, 0x3d, 0x97, 0x0a, 0x3a, 0x9b, 0x0b, 0x4d, 0x61, 0x0e, 0x02, 0x74, 0x9d, 0x37, 0xb8, 0xd5, 0x7c, 0x18, 0x85, 0xfe, 0x42, 0x06, 0xa7, 0xf3, 0x38, 0xe8, 0x35, 0x68, 0x66,
0x2c, 0x2d, 0xb8, 0xf7, 0x87, 0x66, 0x85, 0xf2, 0xcd, 0x9a, 0x2e, 0x0d, 0xdb, 0x64, 0xc9, 0xd5, 0xbf, 0x13, 0x90, 0x53, 0x71, 0xfc, 0x39, 0xe0, 0xfa, 0x86, 0xe1, 0x47, 0x72, 0x34, 0xa2, 0x97,
0x9d, 0xf0, 0x85, 0xeb, 0x25, 0x44, 0xeb, 0xf6, 0x2b, 0x50, 0x68, 0x6a, 0x71, 0xe6, 0xe8, 0x28, 0xdf, 0xed, 0x9d, 0xbe, 0x0b, 0x10, 0x6c, 0x94, 0x52, 0xce, 0xdd, 0xff, 0x3d, 0x13, 0x89, 0x90,
0xe6, 0xe5, 0xc4, 0x2c, 0xb2, 0xd4, 0x60, 0xc9, 0xd6, 0xe4, 0x79, 0x1a, 0x16, 0x81, 0xbb, 0x2e, 0x22, 0x2e, 0x54, 0x55, 0x8e, 0xb7, 0x8d, 0x52, 0x44, 0xe2, 0x17, 0xd1, 0xbf, 0xcf, 0x50, 0x58,
0x8f, 0x1f, 0x57, 0xe4, 0x4e, 0x12, 0x62, 0x10, 0xf0, 0x07, 0x63, 0xff, 0x57, 0xda, 0x20, 0x8a, 0x50, 0x93, 0xb8, 0xff, 0x79, 0x47, 0x53, 0x4a, 0x4c, 0x26, 0x0a, 0x17, 0x64, 0x2f, 0x72, 0xb2,
0xae, 0x4e, 0xf4, 0x79, 0x2e, 0xa1, 0x48, 0x60, 0x8c, 0xf1, 0x16, 0xcb, 0x2b, 0xff, 0x66, 0xe8, 0xfc, 0x74, 0x81, 0x12, 0x66, 0xcd, 0x64, 0x11, 0x12, 0xcd, 0x17, 0x80, 0x1e, 0xd3, 0x8b, 0x59,
0x91, 0xa7, 0x44, 0xef, 0xbf, 0x68, 0xb1, 0x92, 0xd0, 0x54, 0x9b, 0x60, 0x8b, 0xdb, 0x31, 0x91, 0xfc, 0x12, 0xa0, 0xe8, 0x35, 0x43, 0xce, 0xc5, 0xf8, 0x82, 0x25, 0x0b, 0x24, 0x4f, 0x78, 0xe4,
0x4b, 0x5d, 0x27, 0xd3, 0x36, 0x8f, 0x9c, 0x17, 0xd4, 0xb2, 0xa2, 0xb2, 0x16, 0xc7, 0xe7, 0x4e, 0x77, 0x14, 0xd2, 0xcc, 0x03, 0xe1, 0xe4, 0x45, 0x88, 0xcd, 0x99, 0x36, 0xde, 0x74, 0x35, 0x7c,
0x0e, 0xa1, 0x7c, 0xaf, 0xb8, 0x28, 0x61, 0x31, 0xbd, 0xa9, 0xe3, 0x75, 0x7b, 0x36, 0x10, 0xaa, 0x3f, 0x77, 0xa6, 0xd0, 0x57, 0x50, 0x53, 0xfc, 0x92, 0x6e, 0xea, 0x7e, 0x23, 0x7d, 0xf2, 0x89,
0x84, 0x8a, 0xf9, 0xf5, 0x7e, 0xb1, 0xa6, 0x16, 0xe2, 0xc3, 0x42, 0xc8, 0xce, 0xa5, 0x28, 0xb8, 0xa9, 0x5a, 0x5d, 0x16, 0xd9, 0xd8, 0x7b, 0xe9, 0xbb, 0x37, 0x84, 0xd0, 0xc3, 0x51, 0xc3, 0x2b,
0xc0, 0x43, 0x5c, 0xc3, 0x65, 0x4f, 0xb8, 0x5d, 0xd9, 0x33, 0x5b, 0xa9, 0x1a, 0xc3, 0xdb, 0xde, 0x1f, 0x85, 0xd5, 0x67, 0xd7, 0xad, 0x16, 0xf9, 0xde, 0x6e, 0x00, 0x9b, 0xca, 0x3f, 0x95, 0xb5,
0x92, 0x75, 0x47, 0xfe, 0x5e, 0x5e, 0x45, 0xe2, 0xfe, 0x99, 0xf1, 0x65, 0x1e, 0xa1, 0xcb, 0xf0, 0x97, 0xdc, 0x3a, 0x3d, 0x40, 0xdd, 0xd2, 0x1c, 0xee, 0x26, 0x05, 0x43, 0xc2, 0x88, 0xec, 0x6b,
0xc1, 0x17, 0xa3, 0x77, 0x0d, 0x3a, 0x34, 0x46, 0x9d, 0x50, 0xdf, 0xa7, 0xdb, 0x02, 0x03, 0x00, 0xd3, 0x06, 0xa3, 0x65, 0x37, 0x4f, 0xa8, 0x28, 0xc8, 0xb7, 0x80, 0xee, 0x1b, 0x9d, 0x7a, 0x34,
0x8f, 0xf2, 0x17, 0x8a, 0xe2, 0xdb, 0xe5, 0xe8, 0x72, 0xfa, 0xc7, 0x89, 0xa3, 0x4b, 0xc2, 0x28, 0xde, 0xbf, 0x54, 0xa8, 0x82, 0x74, 0x3c, 0xaa, 0xd1, 0x4f, 0x3a, 0x55, 0x0f, 0xdb, 0xe6, 0x8f,
0xab, 0xd0, 0x6c, 0x52, 0xed, 0x58, 0xff, 0x09, 0x12, 0x05, 0xd0, 0xf6, 0x27, 0x57, 0x4c, 0x8c, 0xbc, 0x1f, 0xe7, 0xcf, 0x79, 0x21, 0x0f, 0x5a, 0x22, 0x86, 0xf6, 0xe2, 0x3a, 0x27, 0xef, 0xa0,
0x63, 0x1f, 0x4a, 0xcb, 0x8d, 0x3c, 0xa4, 0x25, 0x3e, 0x30, 0x18, 0x49, 0xf1, 0x57, 0x57, 0x1d, 0x32, 0x11, 0xb6, 0xc1, 0x04, 0x53, 0x47, 0xbe, 0xfb, 0x7c, 0x77, 0xdf, 0x3c, 0x6c, 0xa7, 0xbd,
0xae, 0x88, 0xf2, 0x34, 0x2c, 0x23, 0x34, 0x45, 0x90, 0xbe, 0x20, 0x14, 0xfa, 0xb4, 0xf1, 0x79, 0xfd, 0x4b, 0xf7, 0xc9, 0x0d, 0xb1, 0x4f, 0xa4, 0x01, 0x8f, 0xcc, 0xe6, 0x89, 0xd2, 0x12, 0x7b,
0x93, 0xb8, 0x93, 0x85, 0x54, 0x6d, 0x71, 0x37, 0x9f, 0xe4, 0x1c, 0x39, 0xbc, 0x60, 0x2e, 0x8b, 0x7c, 0x8b, 0x2f, 0x78, 0xee, 0x91, 0x4d, 0x1f, 0x0a, 0xf0, 0xd4, 0x37, 0xa1, 0x89, 0xa8, 0xa4,
0x1d, 0x1e, 0x03, 0x6a, 0xbe, 0xef, 0x3f, 0x44, 0x84, 0x8c, 0xd7, 0x6e, 0xf6, 0xba, 0xa8, 0x89, 0xfc, 0xec, 0x56, 0xcd, 0x79, 0x67, 0xeb, 0x90, 0x9a, 0x46, 0x4b, 0xfc, 0x23, 0xc7, 0x24, 0x35,
0xa8, 0xe4, 0xed, 0xe4, 0xc5, 0xfe, 0x5e, 0x88, 0xd4, 0xfb, 0x19, 0x2e, 0x0a, 0x08, 0x21, 0xe9, 0x35, 0xba, 0x14, 0x5b, 0xbf, 0xc5, 0x9c, 0x25, 0x08, 0x28, 0x27, 0x55, 0xa5, 0xdf, 0x53, 0xa5,
0x8e, 0x4e, 0x37, 0xa3, 0xb9, 0x70, 0xf0, 0x79, 0xae, 0x9d, 0x22, 0xa4, 0x99, 0xa7, 0x14, 0xc8, 0x75, 0x76, 0x02, 0x73, 0xf7, 0x4a, 0x93, 0x98, 0x99, 0x5d, 0x32, 0xc0, 0x50, 0x27, 0xd8, 0x10,
0x61, 0xcf, 0xa4, 0x27, 0x92, 0xf9, 0x3b, 0x9f, 0xde, 0x36, 0xeb, 0x16, 0x3e, 0x97, 0x87, 0x09, 0xfa, 0xfa, 0x76, 0x16, 0xec, 0x3c, 0x7d, 0xad, 0x01, 0x35, 0x80, 0x6c, 0x3d, 0x91, 0xa2, 0x1b
};

30
jh/jh_tables.h Normal file
View File

@ -0,0 +1,30 @@
/* jh_tables.h */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2010 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/>.
*/
#ifndef JH_TABLES_H_
#define JH_TABLES_H_
#include <stdint.h>
#include <avr/pgmspace.h>
extern uint8_t jh_permutation_table[];
extern uint8_t jh_lutbox[];
extern uint8_t jh_round_const[];
#endif /* JH_TABLES_H_ */

View File

@ -0,0 +1,13 @@
# Makefile for Grøstl
ALGO_NAME := JH_SIMPLE_SPEED_C
# comment out the following line for removement of Grøstl from the build process
HASHES += $(ALGO_NAME)
$(ALGO_NAME)_DIR := jh/
$(ALGO_NAME)_INCDIR := hfal/ memxor/
$(ALGO_NAME)_OBJ := jh_simple_speed.o jh_tables.o memxor.o
$(ALGO_NAME)_TEST_BIN := hfal_jh.o main-jh-test.o $(CLI_STD) $(HFAL_STD)
$(ALGO_NAME)_NESSIE_TEST := test nessie
$(ALGO_NAME)_PERFORMANCE_TEST := performance

133
test_src/main-jh-test.c Normal file
View File

@ -0,0 +1,133 @@
/* main-jh-test.c */
/*
This file is part of the AVR-Crypto-Lib.
Copyright (C) 2006-2010 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/>.
*/
/*
* JH test-suit
*
*/
#include "config.h"
#include "uart_i.h"
#include "debug.h"
#include "jh_simple.h"
#include "hfal_jh.h"
#include "hfal-nessie.h"
#include "hfal-test.h"
#include "hfal-performance.h"
#include "shavs.h"
#include "cli.h"
#include "nessie_hash_test.h"
#include "performance_test.h"
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
char* algo_name = "JH";
const hfdesc_t* algolist[] PROGMEM = {
(hfdesc_t*)&jh224_desc,
(hfdesc_t*)&jh256_desc,
(hfdesc_t*)&jh384_desc,
(hfdesc_t*)&jh512_desc,
NULL
};
/*****************************************************************************
* additional validation-functions *
*****************************************************************************/
void performance_jh(void){
hfal_performance_multiple(algolist);
}
void testrun_nessie_jh(void){
hfal_nessie_multiple(algolist);
}
void test256Null(void){
jh_ctx_t ctx;
uint8_t hash[32];
jh256_init(&ctx);
jh_lastBlock(&ctx, NULL, 0);
jh256_ctx2hash(hash, &ctx);
cli_putstr_P(PSTR("\r\nresult:\r\n"));
cli_hexdump_block(hash, 32, 4, 8);
}
void singleround_jh(void){
uint8_t data[] = {
0x1,0,0,0,0,0,0,0x0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
jh_encrypt(data);
cli_putstr_P(PSTR("\r\nresult:\r\n"));
cli_hexdump_block(data, 128, 4, 16);
}
/*****************************************************************************
* main *
*****************************************************************************/
const char nessie_str[] PROGMEM = "nessie";
const char test_str[] PROGMEM = "test";
const char test256_str[] PROGMEM = "test256";
const char performance_str[] PROGMEM = "performance";
const char singleround_str[] PROGMEM = "singleround";
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_jh},
{ performance_str, NULL, performance_jh},
{ test256_str, NULL, test256Null},
{ singleround_str, NULL, singleround_jh},
{ 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 = (cli_rx_fpt)uart0_getc;
cli_tx = (cli_tx_fpt)uart0_putc;
shavs_algolist=(hfdesc_t**)algolist;
shavs_algo=(hfdesc_t*)&jh256_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);
}
}

22
testconf/JH.conf Normal file
View File

@ -0,0 +1,22 @@
[JH-224]
algo=a
file_0=testvectors/shavs/JH/ShortMsgKAT_224.txt
file_1=testvectors/shavs/JH/LongMsgKAT_224.txt
[JH-256]
algo=b
file_0=testvectors/shavs/JH/ShortMsgKAT_256.txt
file_1=testvectors/shavs/JH/LongMsgKAT_256.txt
[JH-384]
algo=c
file_0=testvectors/shavs/JH/ShortMsgKAT_384.txt
file_1=testvectors/shavs/JH/LongMsgKAT_384.txt
[JH-512]
algo=d
file_0=testvectors/shavs/JH/ShortMsgKAT_512.txt
file_1=testvectors/shavs/JH/LongMsgKAT_512.txt

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_224.txt
# Algorithm Name: JH
# Principal Submitter: Hongjun Wu
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = 36C79D025F4FE1E4BF7DF1C2E6A34A097B4ED6FE5B9825AE4E2152B9

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_256.txt
# Algorithm Name: JH
# Principal Submitter: Hongjun Wu
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = A2E77849EEB245FCAA6B9745CF61B2B28D1E43A4B38993F3F3B84A28CF23A241

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_384.txt
# Algorithm Name: JH
# Principal Submitter: Hongjun Wu
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = 260A26F8FC156852DD460AA038F619F52F6E53E432F60078802A78C57E15833560E58EE9E1186717CBCDEC5D63E74B8D

View File

@ -0,0 +1,7 @@
# ExtremelyLongMsgKAT_512.txt
# Algorithm Name: JH
# Principal Submitter: Hongjun Wu
Repeat = 16777216
Text = abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmno
MD = BAE2950E650D66253F1479B67115DDB9F90BBD3E31832E65021DE92CED111335D8A0EF0F12F73A08C95F7985513A6B1E54A001E33CE04AA0DF621C359184472E

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: JH
# Principal Submitter: Hongjun Wu
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = D81EC49176595FF2E5839297C4D16DC9526CB59CB75B28E69A50CF33
j = 1
MD = FFC47C0C875DE75DCF1FFFF43FA9C104ECCCD91C45C4EFA221D31801
j = 2
MD = 8914E8B8A08E429A4C1086FEBB438E1D92B06E3BDDF013E9B7D1888B
j = 3
MD = 3D4609405C3C3239F8D7FBB21BD48916F21D5D3A0E5E996760096EAA
j = 4
MD = 58838CA815DFFE5265FC0B589F2D39C4221605D2F664AEBC3FC961D4
j = 5
MD = 1AFC3067F46105994652E79DD710C2ED0C329771551C4302EF85B78B
j = 6
MD = CA679E59127A4BFA2488C85599FF79ADF40A6BF362BAE1F83C40E1B1
j = 7
MD = CB9EDBEFC6728E09CB5DBE9AB8135F5039D39D9AA1C661D073DC3CB4
j = 8
MD = 6B6471A0E94653E9DBFF84244B3F289B670295321380BF7BB05C9DFE
j = 9
MD = 4FCF675B3224BB0CABD05E26EC69895DC06F467E8C6AE073574C9728
j = 10
MD = 4978FEBB7DF87889147210A179B449C8C8F9ED4C65ABC334930A849D
j = 11
MD = A5B6916027AC3114696695C1E5D537AD32BBE0D1B327968B1624C620
j = 12
MD = 8AA3C1A43D7FAB4735E1EB6E2C6EC4CD775D8F6C91D3CE9520426A6C
j = 13
MD = 1AD25A104326BE38F55C379170870788EB099CBE2D4DB0AD746BEB4D
j = 14
MD = 7B501531DD739E74247E51BA4420786601D7546F0C1208DFDB769B4F
j = 15
MD = 75A9BE06B06B10CA728BD5BD9EDD5AEEA0A3C8428E1CF76D06BA9E6C
j = 16
MD = D64353DDC1F0DC8D789583952A929327B004BC042D0E5F45F28F8E77
j = 17
MD = 02DD8184C47EDB72BC5DF5A039680DDF7D25E8773A93D1DDA33FA6F9
j = 18
MD = 6FE27A1A83BBA0A3E267573A15F41F9407A0D956515F84A21EE09CEB
j = 19
MD = A2716F9728B06F372804940F75F50196317A218D14EC2D2D67E37914
j = 20
MD = E6566CEA8CED98EE072809A7E5A536CD4781A55AE9CFB1C863AAFD17
j = 21
MD = C14464ACA17B04CD7276CD87AC73AD7FE788972C673F4065E4E0B284
j = 22
MD = A566E14F58CEA9C290CF82A87483C5986514080F2B8CC08C0305C1C4
j = 23
MD = 2E5D86E5B2BAFC1F1F903468C442B4AE8A4278FE557C0485D96D8B9F
j = 24
MD = 3FE3688F196DF0D003DC357E10AE28C10F190D149FCCF93ADB46E1E6
j = 25
MD = C99F10C7B053D0495241946B03FA31E2848B8776888335DF1B8214F1
j = 26
MD = B858F64FE4F44EE5B4C1860C0F34C1A048272D5B47AE2CED93726678
j = 27
MD = D80E6D0B247285F398B85D370A16F4A59BB829EB99A1DC03DE45A06A
j = 28
MD = 3D0FA826D5AF7A20181F306B325C640F4447339A0D4CFADFD6389987
j = 29
MD = C792AC98DFAFF4B3F10F4B93E504853ED69531A7C18DF9C7C66BEDE6
j = 30
MD = 40E03CF0430BB6D6FD3088F9AAE00AAF7549032F670CC4CAFF860B1E
j = 31
MD = C0F69D8A3EA30FDC6ED257E3F50D2E91A8FB4DD027B5733066C29A80
j = 32
MD = 566FD71738AA6F8B57B838FB4ED8BAF2D1724310427A6217EEB3CBAA
j = 33
MD = 593743E8DCAC9B43D8CDCBE675FFC6F5A9E4C5453D4C1CA8CFB244C9
j = 34
MD = EC6A5ACFA81B8FD3618A0ED754B3F79F38FE36190C4720A5525026E6
j = 35
MD = 1149B620389D0533D71A4A5BB542BBF2F1908F4D384B900A4DEB8EDC
j = 36
MD = 2353615C1C558DF9739F2A85B97926D2B121680D84AAF7873F98E5F9
j = 37
MD = A19EF85B3B3D2667D17471ECBAF795077FED3089BE9C80EF921AD3BB
j = 38
MD = 528A7EAF29614B54D465519012CAF55D9F0E6D9739FF41B4A241F8FB
j = 39
MD = 4F5951365B691C81BDD910EA3D37D982994CD45CFBEFF23470D1BEF4
j = 40
MD = 8F69BE3CB540FFEF26BBDAAD85AE5FCFA1381698AEE7FB5C2F97455A
j = 41
MD = 2A14D5EDB077EFCB94154C7AF6981E058EE30EB7160EC866B172C8F6
j = 42
MD = 80DD51C09F0504F668CEE2174ED2DD1C5BC427457F1065CAD93F13C6
j = 43
MD = 8A27AEF3B49F751B81C3C78750073488F1255D709553D9F97DCF70C3
j = 44
MD = 9FA61B79B071EB6585378537DC4B2F8922785BC71EF76C3C84701E48
j = 45
MD = 7A129890525BE5B709254F0275F567BECBBB168F7C7D99218B5E61CE
j = 46
MD = A386EF73CB2B34BB38B9D8C98DB5218D8F7C9AD6DAEA8A344A10AD19
j = 47
MD = 111CBF2C96F793454C40487EEB30238CCD2F1D7E2489AA19A431ECDB
j = 48
MD = FD88049D92F251AD91EAB7CBDA7FE50D357FC604E54F65A91B4FC1B8
j = 49
MD = A60B7F24D860066086404E6059B1893AAF2D43662EDF553AF5C8CE90
j = 50
MD = D8DDDD4DAF4B94A10FBE9B786C4A3EDD008086281D2BB26B269147EE
j = 51
MD = 04E4529062B00F0703C35CA8231C017EE996A514FF8400DED0FF8C65
j = 52
MD = E0648178EF4B2EA0A775FE88EC3EF0C9279F11D506BCDEAFBFF94105
j = 53
MD = 06A2053500B8191E05B00728F612D2999833577082B8DBB54CAD9408
j = 54
MD = 25E23B17297DC9427C3B395018969DAF9B30709544DF5A53E803850B
j = 55
MD = B559B0FC9E67F33F08EA2CF7568BE98551076557B95F341E1B73EF70
j = 56
MD = C0955CA86215E04250CB39F33C19640F49EDFAF628F2D9145E52E7F7
j = 57
MD = C66D5A74880B1E72951E7AA97F7806AD6152DC9EE654C03E5D79E114
j = 58
MD = D02B5C6ED96A913A04BA99F9FEA87012AD596B161E0BDA59B48786C3
j = 59
MD = C521EB65948026DCD0446A2B2119B55B5EAD2DDF9CC5BFB084D93DB7
j = 60
MD = F4E2E37E23D5ADA11FF40A329EB82C8A3BDE6C9B197EFEA1CB70EDA7
j = 61
MD = 686D3C12BC436B876B683EBF77E1EEFFEE2623EE0AADA0CFF5FC9E99
j = 62
MD = FB4AE97A6F87A197C3A99AB0FDBA6C84B6FCE3A27B8D51960DC297F4
j = 63
MD = 91035C28DB38D617A1EB2F8F21B2114669BC131FB08E2707189D612A
j = 64
MD = F072C7261755506A2F27D7735354F1C707440F018383DF79B9A4F948
j = 65
MD = E191EEF3C74B96496214FC9976C51A1BE786FA02C27B968805D31853
j = 66
MD = 765B4A42F8E1E09A75A9754BC69151854A6F54B42838F054537D4C54
j = 67
MD = D1BDA81614CEA1E64B673A5EAD5EF286548017B7B7513E06CFF8A1CF
j = 68
MD = 26AAC25DB5656E39ADBA3FEA727E822A3812DE8FA7300FF156E4579B
j = 69
MD = 7992E36BE9011D5E50FD935E964247E50088A6C917CB21975C38FF78
j = 70
MD = 3E4682D22D3A539233BA1A46317C393D26106AF8BE08BAEBA4E23EA7
j = 71
MD = B9D5B1DEB2D53A83CFD45F07F8B7F576611E517FD8A87F40D7D0385A
j = 72
MD = 602FD9605671066F89439887CDD78562C280E5C6A7B9D91FB02B84A6
j = 73
MD = CE9FE2DFFC1EDFAD42632AE6C4A53ADA34744965F6DFDAF6DD5B303A
j = 74
MD = 360F5774582D3F4D5AB4253AFA11BB0238FCC14EAF967EAEA2856BD9
j = 75
MD = 244CD2E8722C36350E5020C4144DEE43B4644246FFA9B542585B8C47
j = 76
MD = AD1E3AB714BC4E92EA6923C2E4D1576DE5A545CA80747CC0511E5C25
j = 77
MD = A6ECD0510031E6DCC5C94587B85A17B390D490D1CE7BD778F1B39FCF
j = 78
MD = D22BE779403724B6C84E3E13BD2DFC280D97F32070BA83E6ABC1B65F
j = 79
MD = 45EA2EA0180E347A4D0883ECB33BD3242552A929A0B2643B12ACB434
j = 80
MD = ED4C8B24F0CDA444A63C2093E5C1B027ADF2AF003203F1AC21C0493A
j = 81
MD = C7D93707ABFB08B390B1DECE1CD2AA31A6978C41981048F1FCD49746
j = 82
MD = 3F4D8A015E77E8D482C70B81F22D5936C2E3B92E4CC98DA2FDDF9ED6
j = 83
MD = 7E9238E048415EFB01D2C012DA163684539C3B93B2C7201C847C2C4A
j = 84
MD = E44A42B648D05FFEA2FD899D38520188EF0A6B8D90F9E85FF9355A70
j = 85
MD = F2AF7A84B7C4D3BDF5287B738C82533A950E98FA777E4CAB9395DA39
j = 86
MD = 563D1630667F0C9784428D410816D6274AA0B3ECF102C4639AE4A58A
j = 87
MD = 40CE731502383FFC9BCB628CBAFB8EFD3F404657ACCA686288B05E81
j = 88
MD = BAEC7C6D458C314EE8E244A958CACE8FB7F449A73951F7BE14439E1A
j = 89
MD = 41EE7B1C0D66608E1228C7BC71B608137D18FEA4A6023D506895532B
j = 90
MD = DF4F1D3165CC09ED938DFF75EC83C82878707F62D8539308A21F4F4E
j = 91
MD = F339B845CD5E19375CD5D9BEA105F28BD63CD5D7C86EC3C0BCBAA31C
j = 92
MD = 0835ECC4395CAA33C48F95A0AB05A699A707C537F92BC0629A95B62F
j = 93
MD = 52D489EA136645D2DE257A7FFC51173E7160A3E05E287461C4A34903
j = 94
MD = B0CE2011B1829155D92B6140DE0EED142EFD50B247684CE9CBC319A6
j = 95
MD = 6BF6A9880FE1AFEADF861FC71AF75796117169A7CFDF47B096F8C8CC
j = 96
MD = 3B7F74C3B5B0D18A960C776CE7A87D0DDE6366F242AE5BF3DDA20AB5
j = 97
MD = F150753B6F2179BA321950B39FF59F0A64A7DDB970719F103DEE58A9
j = 98
MD = 294808349749EC1BB09E38B865324AF1D016982ABBFF634D8C7564F0
j = 99
MD = 62B06105CDE4C55623EE46C194CB552148D40577121695CB0BFD3ABB

View File

@ -0,0 +1,305 @@
# MonteCarlo_256.txt
# Algorithm Name: JH
# Principal Submitter: Hongjun Wu
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = B6F65955C4346EA503AF9CBB43061067DF41528A7D3ED66D280BF4BD812D494F
j = 1
MD = B00A5B535C2939A3642DA04A458E72AD8F478202F75016259678951CBE6348A4
j = 2
MD = 21147BDA81CFAC62F16922B62CA32EFB3458583D25A32C6D266E258A595B544C
j = 3
MD = B3E5956562D360F154919360DBE47236B2BF60BC277113A3D815D9728FAFD210
j = 4
MD = 70306DB5FACFF24B4D38C7D8FB23FDB99909D7EF9B5D57AC55EEF89D0E363901
j = 5
MD = EBE93CA265DFAC7FA9CC3222CE2FA6C62BDF8DA9E86AA60F8C778846D7D1AEF6
j = 6
MD = 9D9EE293DE7210605F471FE8BC7FE093A13C9F088CC6E7EC63D62FCF82876D9F
j = 7
MD = 2763CEEFB71F4EBD5F2221E0C1DE4D23199B1902380CC9E0AE221EB800950AE4
j = 8
MD = 86A2AF9EDEA895D2ADFC75A9C94B55E7A4610E858D6D3BB2ADAC58F467B3547D
j = 9
MD = 0BC94E4D6B4F1BCE25CA9EF7291AAFA4F7B4C9BD03E6BAA7C13FB16AA3BAE5FC
j = 10
MD = 85E7CAD503BB728CADA0061C2ED747B56B4B74AF2161FCD343CBA0D9C4898CF7
j = 11
MD = 3AC1B2E4400F1BD1A1244473B6E3356F75A1FA268C07A6A54619B17E4BED0A02
j = 12
MD = 08E04B1100CDA8EE8D4DA1AB993C5BED6369AAEAF16DE879AB87435DB7D77543
j = 13
MD = A62F2959C299F2674A045C9DC1430A26C0CB2C88AF0E2F970DC8B5432202B585
j = 14
MD = 25FEC23E540B87ABCD64690526EE3F637E1DBD837A1662D3660B2E9C14EE0394
j = 15
MD = CB37A44C3FB6122EC58E3DD94D0E19955F2A60B6A0FCC13D1335DAA61840193B
j = 16
MD = C305F7BDB3C12DA2D53E82156E36426EBEFFDDA7B3AAA2129FA2478E87AF22F4
j = 17
MD = EE525C5CFBB21F024C2EEF067E5E2D4558E8D15BA56F7DF62A111479AAC31F0C
j = 18
MD = F3D60F236E5444115AFC2F3CD0911C2B99297C01320A021C3FCE16B8D0DB10B5
j = 19
MD = BE3CE5842153E6FA2E50AB950800F3C2ABF0B68A22905637C981265910106F19
j = 20
MD = 34BB1CDD0A58A9A87DB961C15277F6A9E639AD55E78F8BA00C7075436A21C1DD
j = 21
MD = 5084BC020911FB77DEA091406D0459939916654EF5CB5DB6E68BEA7A5BABC99C
j = 22
MD = 0FC6CD3EDBE1C7668E3257EBBBA2750E676047754EB6D1E5DE2AF2A7EBDD453F
j = 23
MD = 1B8FB0D6894576D40E7D1AED905D374A687A5FF3796F31E1FA0888345991F7CC
j = 24
MD = 625CEAE610D6AD19A1DD1EF4C98223C69D463C2C4E6726785C7051089AA6BBE0
j = 25
MD = BC62ECCC4B424E1933FBF1AD16AAE72390170D32705EF721D0029B9BA7A23280
j = 26
MD = EED7BFEB7D6BB115A6860AF010463A3E57D66AF096A081EA149F3E134187C8AC
j = 27
MD = 0C30DB53FA0F750DA80B83BBB33BDEF44BE65F1EAA447CF8336841705FFC8A54
j = 28
MD = 7A5CFF04C62F7CD1CBB487A182624CDDBB0533F127FB07924A527D3D467C767A
j = 29
MD = 99C021560F0F77446737673BC972684EE57A58FA8D1922A22272BC4861B31435
j = 30
MD = A021984350CB22D455B48B6C0DC90C5C67EB7CB1758B538D6D931D769C679E08
j = 31
MD = 3295AFE9A5B9C2B057E82E42289693AFF1CC3FE117EDB0F91398C7DB6D65A49F
j = 32
MD = 96446697C89D5B323671FDFE46B44D1BDADF6E06F089CFB7C6C6FFF7237C96F2
j = 33
MD = 7E616C9A6C99BB5B3A4212B9FCD1D8884849839F72D38CACF324C3E45C787BEE
j = 34
MD = 29D9632DB2A4B40F7A17121707CCDBD4925C796023CA42FEF8E537ACF5C3DBB4
j = 35
MD = F28C425C6658FABBEA261844660FE1293F134CA16A7ACA974A594A5E888AEB4B
j = 36
MD = 93A71EA48E1429BB9B09A7B78CF5ED46AD1F4F3DEAF462B0E18179136D994456
j = 37
MD = 8E84AC822AB45D5921B4A82AD6C8EE8D741B03F84942B30C87B84E25AFF7E043
j = 38
MD = DDDFB29BD1CD0C323245DC1F338DA3D02B391A323ED7A7D25808306CC64D3625
j = 39
MD = CF88DB67ACA55CE6F3666698EBE6EF376317BDBD8D9220141D1CEF282F3A3B32
j = 40
MD = 68E665CCFAC62FAB913935071F1C11C367A7E672B38D1CFC5C9F1D192B955934
j = 41
MD = 8B4C5AD979EA5BA59B91F9D744CA8B2E0C6AC5F42EA8CAD56E3DAB635D2B2ABC
j = 42
MD = F27F243DC5AA0C0C22EFFE463CC1CB22A9CA04BB7DF2ACCACD31C23780609917
j = 43
MD = 3388AD64192C4145EB73E3C79A480527AC2E69CBEEF30A008495C4F2310EF20F
j = 44
MD = CF2FCDF59867223648F8F5FB7FC5382869F4D37A560CF5E2DFB05EBBE58EE921
j = 45
MD = 74044844BDA3729D76D05658843F0D66C4E591FC7E9AC2A4E35E1C170BF75592
j = 46
MD = 75233A8A887C2C45417FB3E398E8F0FC4DF36C8872C400770D8CC2698C45E055
j = 47
MD = DFEE2CD4EA5628CBFEA64B2D6CB158AB4975B64C78C5E5ACBF2126445535510C
j = 48
MD = C6C579DCE82E6CB6BF371F454E4BBC3330814759392C31F7B053284D41688C66
j = 49
MD = 90C2B4DA00EE7549F6812AF5D48DB8DDF0F881D5D98ABEDEF1E5367FFE6E7A53
j = 50
MD = ACD3F42718AD7E8EC64E44408E1955BCB8045B2C7930526CBA39A2F49E2C6CEF
j = 51
MD = 46332A90EFB12E398D3CF44045FD5F45F9D6895CF7B274F42E52D112E7E5D131
j = 52
MD = 7ACBF0FB3298CC48EA7583CFCCEF3B8B7D1D47DF8E4747E61118994235824796
j = 53
MD = 071096B6AA0FCC54E3EFC0A8BD4AD6AABB4515105A751222C9446ACF9436A225
j = 54
MD = 05A427E79A5F3487D6622E5C3500871E74E481002C02B5E8AED5B8858B34D912
j = 55
MD = 9A8894A5C3B519F8A8EE226FBF0B06A3644C6E83E3DD1A56765D8549112DECAB
j = 56
MD = 3C1FA7AD648E4E2D2029DD8ED6D8B2E30A0B9D61512068106AE556E9C33A5DD8
j = 57
MD = E7157217A6FF1ED30FDAA86B97A96578CA25C6E18515756333163B2E78E3B3C1
j = 58
MD = 882AF23098314E2E002DE8D2AD6BF1D485D5C73FDF7C1A0E317E76692574A300
j = 59
MD = 693E3582089EE7CAE06CB4661465DA76EB65CAB553A16FC57CC7D541BD451ABD
j = 60
MD = EB3964F8F3006D2662BACF435D94671BF53DBD2AF85870CCA6C784F666908E21
j = 61
MD = 8718743D368CC27CFF924504B06EADDC130052F34671CB9DFF1B07541DD2DD7B
j = 62
MD = 57CB2B35717CA44DA5E22190B800C1A9A385FDFE292AEB4BA5E2A47B9428E009
j = 63
MD = 2A48922234C610F1B6001384556BA732D8A0211B803D8D911B8ECFA64BA75A5A
j = 64
MD = 384109E9B266CF4B7643D3292D72BD739A5DDC7DB2CCF845E827D6C1E82190B0
j = 65
MD = 85A8525F95E41BF96B5D6F7740924BA6BAEAF3F906551736E489D2F7812F34EE
j = 66
MD = 89CE88C8EE3ED4CFB098E7943ABD2EF5CA7F76901C1D6C7CE738472DA2BA60AB
j = 67
MD = D0DD5581925A3F99ECE99E7C31A1569422D98D17D8399AE867A85CC0E1A3C145
j = 68
MD = 925840CACFD8371FA77ACB11D9322398FF461C98DC8B1505C1DD77AA5C522C93
j = 69
MD = DEDD88C9593223D1A330185D673A77F1E1DF88FFB12676DE5D2ABBEDA7428230
j = 70
MD = 5E904AAAC5FD5EC1B654A831E10641DDD23E874B1783BFAFD43BEC6D0C163F32
j = 71
MD = CB5ACB4D179A7A0884F1ABC83F7B704AC0707570CA4BF382C16B167A156ED221
j = 72
MD = 5C4FFBBE7D8C6AD6A55449069978683F390938F0DD7FE39937B2C447E552C20F
j = 73
MD = F51A61DAE5651C7DAA6812CF5C2D46DC5D698066123AAED05A003B68B82B2958
j = 74
MD = BB59F374684FFE84E2FDEEFDFA4082DD0087EE75AA451189827129B373BC9B40
j = 75
MD = C4E670F25210752AC61AAC2985EDE26E98A03749FD3585E2382B2E99AF9F9CB1
j = 76
MD = 1C25EA4BD1743D8D87A488434D8A84343CAC2D465D4056332527978E8C64D8F3
j = 77
MD = 65DC0A9B7AC570182E756014B1BB7AAF0F9095EB5B877DD37100C79847B33EAB
j = 78
MD = BE31DB5D9D142E350320D67716794682DF3F0E2DCDF1B895B0FFB92C171C6480
j = 79
MD = 5C3822577E685D31216710C95F70DB930BD2168B2CF35A46647F3B5F8128BE08
j = 80
MD = 901A1F21BEA5073112EBB008C2065065397B65862AC8C2EEC4CEA5BE7A6C803D
j = 81
MD = 13A41BC1DFD4CF1F4A9724E1EE4A7602F0368C0D3C9D86F4F7519AF19C4F4645
j = 82
MD = CBE38D87F97AB8306D76BD5FD8296D81F56EB6596733B607CF53BA90F94E24CB
j = 83
MD = D12DB597EAA98F016D652DB6E7852E7412FB021D61A108DBEF818F78C1A93E0E
j = 84
MD = D723C86B334E19BDC8E044EC12A3DDE0FCB6D361253B689C64A9EFFBADF4CD96
j = 85
MD = 09CA13CDFE9C8A4730AF50113EB835FB48EDDB1B51DE7DDB48617CA718C4EE6A
j = 86
MD = C8CAA764A82DC6FFA133BC1FC819415268D7904BF3354CB011AFDA7168E702C3
j = 87
MD = 38D9B07F34C7A4519CE9AA2B40C3A57EA948B77E9494B32EB177E646B1DC6F31
j = 88
MD = B6E4919E2CBA7A86E8DC76BCCFBF928D84F36EBD4394932010232885D4C7102F
j = 89
MD = CA9E2E9B6BCBB931A21F5D9D2D8B2487EA7C24241AD1088D4CF40FF0A2E5C4BC
j = 90
MD = A22892140A38B8D2CE705FE6EC9C0C99E86651CD33B4C10D163D5957656CD91C
j = 91
MD = C53607D7BCFD21CD249FE1E32ECC4FC6086FCB7A41EBFF2872E4887CD392A9B3
j = 92
MD = 86596736BD57C042A9A1CF244FC4D0FAB9ACF23A469052CC1B1C8A6C865152E3
j = 93
MD = B7F2AE47500617AD0111DFE9947139FDBC44F962103D4003123FCD8D7B9F992E
j = 94
MD = 7EA999EA32D083B2DB3EAF27CB55C901D655C229344374B8FB70CE73B4ECC7D4
j = 95
MD = 98A9BA7BEFC730E82FFAF5517630CA24144C64FBE90BF839E665068E23A8D51A
j = 96
MD = 3B4B1E5DC872F10360C4252A2969BA6FCD0C9D7A9CAC8BFF0A1BD6114A4ABE41
j = 97
MD = 238B1C11C7003C50AFC1FB4EDEE67F66C936893ED4F32BEBC145021B501EFCDD
j = 98
MD = B76C16AF952600F23FD91FD5DE4C3E58527DC25F9A0FBF36A02394470E38E925
j = 99
MD = 48236D9DC20A83E922ACE89F8332F6AF5E4AD3C2C092EBE0013A69CF9570FF2F

View File

@ -0,0 +1,305 @@
# MonteCarlo_384.txt
# Algorithm Name: JH
# Principal Submitter: Hongjun Wu
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = D8B448C3889A2C63CAFC790C54612ECECF31571BDBAC1CF2A0B1F91A0AA8ACCCEE3456733D5C0CD042DAEB61B9BA370D
j = 1
MD = F967C8A0ADE023D9BD10BF5503C20DFB04A38EADDE8363FD8224F83B0DB77C28B518D79C6BD321D87560D5EC5A719EC8
j = 2
MD = D4B348D4EEA17C44784D7A3CFF579EDF216739A3A080B3A891FBA8BF59A3302CA52BA3A231BA01C0A5AA62E068C181B8
j = 3
MD = E815C7376E7C32C36628B528621E6191FB1573F3708CFF1AEBAB9C656337644D970CD86FED5539521DF38C409CD2C517
j = 4
MD = C2AC00C4D7275F1AE3B129E2CF0FA60ADC8A903BE7DA3F7C4C7C60425A54609FB891A50D384E15150AAD7FEA1D0115DE
j = 5
MD = 30D30F0058F166931417C82D1F64BDFC947528195F7E02DACE2CDBD2E7F880A6EEAE16FB107E5BF7BFE36F6B1867A82E
j = 6
MD = BFC691568A92B0AA7E5DBFB16737E4C0BEBEC0595D0D64B32CC17DCD5E3F0B1111B613BAE30658C03F582B70280C6A7B
j = 7
MD = FA3928A5EC35910BA50DFA374D753D02BBF05941351AE06992BABC370380C7D86A5717B07758DAAED1169A02441D27BF
j = 8
MD = 44A0B09E061D57ACA95A058B52C0EF26FB2F4B5AD237EDBBCE9BF23AA5140A223281E12FE98899F0B9E03570FE7FECBE
j = 9
MD = 72EBCB89593D33A9B9EAEBD0505A31F2ACC807B336B4E4F2954D38C7175B27FC1A1C0B98EC0CA01D4D7785B090E6A955
j = 10
MD = 49D50D3F42646B5630B54DFC9D45DEAC9E111F8DEBB7FD3C2606A765D5988E164AD54FB2FDB9F6F3DC285CA1B473E849
j = 11
MD = D6594802FE5DF3E1B3AC8429AE6069A3D5E830F9A0C2E749D24E3893690749267B8DB2AE1E1DE66218FA0649E7CB6E57
j = 12
MD = E69B72260530C1C2B0FCF050AF4039A1A805E10A1E92E5A9ECCFE55B776951827FA8EAEFB17F76401848C2F101A05A4C
j = 13
MD = 79987764DFCD578DFDFA24E01E99EBD2DBEBCB4CC2045D8CB34D94562A4E787BC2CA4EDA1856FFEA161DF5C251275F51
j = 14
MD = D96264AFC51A44B5ACAD0F164BC705C7AA7BEFFC7DE6F94276D63C33B800058A9413743E512276614372257937A070D3
j = 15
MD = AF60D6D865464AF3A176F1891486EBFE6F70FD410063C91FF47B4CC7B4780F919B8D2DD2E1D7FDCEC40DBBEA49ED03C9
j = 16
MD = C9585111503FE7059A0DA3C330780CD56569A0896426A04F2FC8E829960272920ED75EAA49129DF85C728AC25F4158AA
j = 17
MD = 22592DA70CA2B7DF32C0434096BE200100F23B9778ADB787078E1BDFF6232C04D4CE1578201BA62149A79383666CDEC1
j = 18
MD = AE2C13FB8DD870A6C6E404BA62B0645C6F5964FF67E8E6E4CCF714BD9CF3E05FBAF63C4D0A798FC6671E11B8ECB7E06C
j = 19
MD = 34D23610B4803BBE4FEC0A4759CB9147EF12E707BE7399E41DD9CB64C9BBCCE50E4762BDEDA75656B1B7A7663BAACE11
j = 20
MD = 7057E35D0A9C6B18CBF3130A99FA117113F4427FF19848368073D301D836CC98F3D07448BEC8FC9B63C352E117431EC5
j = 21
MD = 8DA31812FF94748037A24E25DE2C6784F3858CE7AAFD004BBB6EF8DFF9C2D111753D2B78846077B31CC46A79F62CC243
j = 22
MD = E8FF11BACE84CF20206EA3B2E76EFD62056FE35CE8D7A532925CBEED38D4DA0204CF31F315938601D10E900AD462A68F
j = 23
MD = BBDD30347F7A287E3E3CB9E9DC40819198FFCC0C216DFEB4BDD0A490FA790D045F7FF054641A93BAB825C880549A335F
j = 24
MD = D16C1F8F76CA206CAB22CA25F3D4CE18DADC9DF66A70F6DFC3845950D90004B758C66F3792A1205AE39A87F3F9185754
j = 25
MD = C9E6186B8922D3C1F88CD4C0BE7062FB15AE38A210408DF6015251FBB6DED1162689B33D6789DB6B486EE016711B2240
j = 26
MD = 3EA95BF8DD04665A79A50A0BFA0205DCBD0B85D81D5CF36A05FA8F38DE6C1EF59B3DAEFC8FBAEFB32C39F49F37438F57
j = 27
MD = ED6D1ED7B052FFC15A37A569D4577607A2C565EADF8B32BB232907597DF672D5D567DB3B124FE195A91A20F86861BF8D
j = 28
MD = BED666E06B8D0AC7B7DC15718EAA0C7D026CD803FCFE146040267B11CA5070DDD93D0A2DA7D9AD37C7C4090DC161626B
j = 29
MD = F4E5F87C2839F38D9AF4CB9B80D75F87B4D982510A41FC68091C8E03404C658B40E5EAEED778F539F4EC3CF4DBC6C053
j = 30
MD = C3C8625688E9527ABAC2B644D360848028F4191393BAE69F1C6DC60B6DA469B63E0AEBEA0A262E7BC6C48A67DDE6F4B9
j = 31
MD = 130ED53E18DECFA7C91D6D27707BEFD0E91163AAD8E7459A0395705687CB0BF3614C9E63EFFFD6FE47A7D3D0B74B522C
j = 32
MD = 964E86D3A5B9938A030E1D91A706B72BF18E7170598F14F4D2892E6474029DB15F5033D042DEF4C35337C78D87BC51A8
j = 33
MD = 1018374E340561CD652563C8814AD76FE7048E3A068982281D06A255B216A3C74A1103DEE1E0CB9F1F89DD43F492C29D
j = 34
MD = DD7C617BD8734E0C0B56E7FC8CD58799800A7751C655096D107F6A58C245975C463132C7A4AEBDF16F2B46EAC65A0631
j = 35
MD = 22401BC402B10D91E46A040997E47E4AB4B34B8AACAC67C421D092E6AFC8F001288D94ACEB03E9EAF06A8BCB63D992DD
j = 36
MD = FA404AD07BE2D1BCD570E1E9B706FBF9B9D1CE7FEA83D27383B101CD4F46E05F7C416393AA1642FD82A0379F1C880D75
j = 37
MD = 329ADFE970EB974689414ED2690EAA5659AF9B8F7D286319F8C6869C9B825E26D2982A99E4101E5C141AEA3B08FF22A4
j = 38
MD = 70EBB6F417819E0C6BF107F042F1F2D94F583FC861E5349ACCD66C8B9F578C75186D178407E8FCB99505F97D29E0FD78
j = 39
MD = 720A6025DC72E36393EF3434FC76C003FAA06445E10A0DF3A10D15290C41C39DD1EB5A6ED075AD21C95F40B93DF24831
j = 40
MD = B4069D44D2D22E7A0BD1AECE8D88F7E19F3EE1E63C25F7A78C9897C86617EC7A0F4757F34198ECA8F20E001CB811319B
j = 41
MD = CB4815FEB62BC8BCE63C471A2C2528FE2AFD2B5ED2578DFD03A8039D9B82F80D6DDA5D54EA026E47CC030B0BCD129B22
j = 42
MD = ED1A675F393CFCC13DF8373B7C949899228DC2AC7BBB3779EC79608359ACCDC5F7529D9574AC925A7718889FB18E3E42
j = 43
MD = 1A36D2F5F955ED7C78F2CFE1657741FC2090E6BF5F1028051737C710707FE777F8E5B92F786730424E2A0239AB29456B
j = 44
MD = 03A2EF8B3CD29D7332F7E13F6EC54F9ADFB09E84F433057FF292561F453E0202E2F2F184A14015C896FA93753A613EA1
j = 45
MD = C779397F9D04B8ECC5B6C9591F80E32B570B88B45B137B3E4211D4F12D3AADC2351AFE4B0BEA4BB2EC1E0971B7A5A072
j = 46
MD = 7C2C606E71D39BB49F46121850ACD66CE34111B45E80A5A8F8D61C5888D71F481A49E889BED57D3334F47B5C1C04C504
j = 47
MD = C0A7107EE1E103DEDB7ED5A6F0A1EF0667D7FFB6C4E947F405C9129B689DAC4F21EF701849104C983A70E110B339C2EC
j = 48
MD = 42DC1E7871997A0104A831D2545A42A20E76AA11A112ABEFF9FC5A2C1213D71AA8FB08FBE176101DCC11452F01F97800
j = 49
MD = B3D5ECD405840AAFFCD1A27C3F1C8C9C37A59C1A0FEC411700D538AF7801A4C5506F74C8CD1EBDCEC6CB5FE3498EA375
j = 50
MD = 903F0A35A4FB62146D9D695EE851CC60AC6EB7AFF82129F94144B5E9E687874A60BC62A5F9B1B3F2A5CC0C724F6C2642
j = 51
MD = 7BD8CAAA4FBA2B6F5030B3485461A6B6BCA76352863A27F1C5E5E6E06A3C94824ED51FD27BBAE323B04A1DE66AF42B46
j = 52
MD = 48299A0CDCA28C0CC12A63783CBB4414F9F9E32E833A5020086B5432659FDF71AE9D7FABD3951B1E6A640BC1AE43E68E
j = 53
MD = 3C80FEFA50B89999701E92BC894114C3B6237225C43B8F2A3689D07E363E5FF7CE73EBEB4AE0B50C818FFBBB69BE3DF6
j = 54
MD = A66075AA4C5724F38AC5E419A001181EB68B9F179D76682AA6C4D122D7D2C441F524C1BE5F70406E0A23214673213564
j = 55
MD = 684BD7CA3442453ED59748C53E2C2E7FF309DEAAC5B8648B005DB52D52EA77A3300CF8404333596C72744E36A0ADC335
j = 56
MD = B58AFB33D848B9F44CEB2D6B0859881F148A51C434720AF2134513E77B28CD26A4523A17631B16B895394A3E4FA9D4DB
j = 57
MD = 8D3A03415A08EC927A13DF519AA8AB07F018CF4A1F0A34B22832C1E99BCE796F74763661AFFE5A78BB8E3869C188E20F
j = 58
MD = A203CCB9242FD288C69841F6FD0DDE054D06FAB9881A4A0C60F20EFF5F26DD8CFB07DE32443EB60B89C651B028985CAE
j = 59
MD = 95CA80325F86E63733C6C478B2F09970B80BDDED1DB9F6F9FC2FCC4849ECAE373ADB0A354EBCBE24EEE9FA0957688B5A
j = 60
MD = 2B6FC2B2468BC25C59023B350615990F81AEA851D73DC97EDF9CB9976113D2DD5313307BC6385A7BD51FCDEDCC786659
j = 61
MD = 3D020108F786DFF2BA9A201D08FD2571FFD297E1EB89EEABE5100E25C49BBEC6DC22F3EB882853E8A3869D7BC5406BF2
j = 62
MD = 720D80B5FEABB73C8B30976CC68FA3A6D26BC37EE34866A36C2383868A60BCD33A25440FCDE4BE29620763787C44A49D
j = 63
MD = 0717AEA747AE2BAA5F8532FAEF463C3A373464BD35C44EC6332558778C7E13DDCFB62B1068F7AAD9454DE1DC311EE575
j = 64
MD = D56513D159658910BC391DC2C6474CB0672B91D08001B4F44D7C3BD83EF4409EA9975B6ECF864D9538D4FA2BE4EC9735
j = 65
MD = D022086A35330891EC396EC55E112E735EA839D6A6446D4C656E272EE773E3BB24C739716E117D8E1606D3C0CA7AAE92
j = 66
MD = 08F440714F00AC34E79A240D7269348D69E0F89F7D788E607A94BC685E49C03C043332A4D46C44B593CAA9CEDB413EB9
j = 67
MD = 2412B39E4531EF37196D1C5426B675D28BBB6E0920840D9942E51EEF44694F5AD1E445A511A5EA760A5066C830261B73
j = 68
MD = 302BA5A6582F07C77D6BBCEB11E323222CE236FB8E1701C73162D8AF423377CB8FF42D7F5D456EBE9F0688DDBD3B8F1D
j = 69
MD = 824FC2733E117BBD07F80934B22A3F50296EBC23BDB0D3312B57746179329A3161D2AC1C807A94C1455AB8FF6965C72A
j = 70
MD = 81644AEB71ACE50EAC41CCEA80E0534FD18005557D86429D805E416D742A407FF2C449CFA72B38D4B6FE46C427710C11
j = 71
MD = DCAF7E9CB98603D2CA82A8F50E7BBABAE9B5CD8DBAAA295DB77B4D3C74D18DC3F71E2D7CC6BB289CA4F8C95A96996DA5
j = 72
MD = 6CDC49D1DE63E8BF38E21DB258977EF7BC90C8DCC5AC86333241FBDA13D33D23C70874A38DE56811DF7D74515FDBA281
j = 73
MD = 137CB53EE4AEE2C5B528EE3136967E8A72C39EC99C080B67BC867B3C59D1879A96C7B92CA37A3458BB601648A93B6BC4
j = 74
MD = 520D814DEAC79D9C7622B7864C766D92102654B4F3DAE8A3CE884B67E54FD373602BE9D5B383A766AF17E98771E1A48A
j = 75
MD = 44AAF17265AC3E322F77C2615EF68DCB047886B2453879BE527B6890D77D9541206652C3E4CB86A668E59975A80273ED
j = 76
MD = 672AA6F5BD19A41C02C5096EDC20183948180D58A0E33F194A6F8962887A8D1BEFF5F061F5EDA5103C7DD1586E2F197C
j = 77
MD = 5B6087CE415C87579C7F6B3A77FB312CB4E92C254F42A598C8FA2783BD75A20817A5B042F7A1610571D7DE1571D2FF7E
j = 78
MD = CED7A36F73711E625CA986CC2332D1FDABA76D013A5555209660A6DBAD85D914C10760DCBB5C986CE0D3E61CA39DFF67
j = 79
MD = 784AF158681303266878A4F95DF3B3660CD6C3E06EC37CBED731049FF1B999F883E1FC791582EB64AE0C90DCDC5DE890
j = 80
MD = 8EF99AB5B670B48E0D7D1D330656F90F29B81CF8F02D78DBDB74C13B47B468E832B722F22C98480139F7BA31B34FD4C2
j = 81
MD = A4AD5C72CD7F3B18698C527153EAC7C1D2DB1CEA0E16281E3406718E807192B065523D7437A40C026E530916ADBB3124
j = 82
MD = 8885BC9C48DC9E7C77299BC2EB502BAC466BC1B687B7651C631D73BC632B8E24CCB0D383B1D3B7ED6CD5E15F83F48A9A
j = 83
MD = 2C5360D10F00E91C30789371C6377A054908DEA8BB1AE2146C6F30886C3779C402B3925D4148D09FAD984AB903D769F5
j = 84
MD = FE6D92D6085283B9F955066878B87F783C91978EF602A5A76CA699C15DF0F16FA97754C6BF6FC6CDB2947ADDB6997B21
j = 85
MD = EBE3CF57BF9DD3C8AFDC8A06C02296FE7A68684BD2FA6EF80206C607F76F8A4DA64FE387173559DE3547C5A70DE32F01
j = 86
MD = D474F411077DAF3EFBA3D84F1C659E6C9AD476644F4188B1F21C3C545971AE0B2D8A9E402505573BE595375F334A50BC
j = 87
MD = 2EEC7D9C7FA570FA7BA64DF32970A16FED9A997287A4B1B3158B1554013FE7E64EB0971881A0C61F334996FFD665339C
j = 88
MD = 07E0A5B4AEDE9651633DAD5729D9A4C263C90FD4EC7F099FBF0C217025FA0F355362A4009C09D019D409EB99EA86D67E
j = 89
MD = E3F54D2762A62E19BB83D240634088B45BE932E257C2E5AF823ED202173D8204C84951193A9AE44A5F725FC8BA4BFFC2
j = 90
MD = 6AFAD9C9429DA20B1B6764C390303A072F9048BE5A391C216B65F5FBFE3C5E0293AE1D14C98F7385F028A54637389AD5
j = 91
MD = 69BDA508B24502008EB65814B21BAB7BA8C46F9AA69E4FDE82369FC437C7E9027211EAD139FE443ECDCF2232EDAFBD93
j = 92
MD = CE05D274E1B63F29131F82635E087D572639B2BCC794768463D8F273E079572A9335D047ECBFDB17DBBE7CC011DB0735
j = 93
MD = 60805637735136C91F5D589AC19A3B407A17D073A95058AD06CCA63E28D6427D59B63FDB38F04F4E46D630C1EA793051
j = 94
MD = 6FB2CFD916BA52264A5DD7DA17847E4C4B50EB1E094EBF018050A941B6D005623266582F1C5FB615F00F7E6158764EFD
j = 95
MD = 85D52BDE59B508C1ED791B636BB29F824EED2C84AFE0F8B980201F87F12BBEB039D69AF521C7B1C30F1A3536366175E8
j = 96
MD = 466F6EFAF08E7E826911C620D32ED5BF77BA0ABCB0DD78FADBCCA91CEBC485C5BE3DCE96666FB3DA703E7FB8A703BB1C
j = 97
MD = DE210BB121C58B30480391EEE19A4170196C7D4C7094DD442A9BF7DBF81024B5AFBED1328DCD3769DCC11D740D8E2935
j = 98
MD = 69BBC31ED1414CFDD6CA317C6090BE66EC746DC9CA35D19083360B32266B2AD9B4D7CCDD51908C614926164FDB7E0C7E
j = 99
MD = ACFCDE6D790E3060611C57DE5517A0CB4E3B77E47DCDAE1C88F5E60FC39EE610F12674AF8A6DC9138BC121ECB7FC9DD9

View File

@ -0,0 +1,305 @@
# MonteCarlo_512.txt
# Algorithm Name: JH
# Principal Submitter: Hongjun Wu
Seed = 6CD4C0C5CB2CA2A0F1D1AECEBAC03B52E64EA03D1A1654372936545B92BBC5484A59DB74BB60F9C40CEB1A5AA35A6FAFE80349E14C253A4E8B1D77612DDD81ACE926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7
j = 0
MD = C7831B938F591679C7EE52469918AA4FC66212FCAF15D13CDF8168387C00415EC844A452432A361A7AE66C730C4785D7ACF740D67F72B8911AF298E91FC73FC3
j = 1
MD = 436459AE02D245C277ADCDF9AF6827DF6FC29AEC0F301C1CB32FC2B4A75D8D3F63D521CF2D605B1D12E27A129AEA8DC90B683E012B88941658A312C48FA9B8AA
j = 2
MD = D26EFCA74A301173499756E7D03A1C8994EE01D7398C5475616EAC98CE9653E38A33FDC7ED5A15213A2182576D76313192202ED2212E1B27A3A9ECA8E1C59E6D
j = 3
MD = B780F4C5E551B63B812F3F353D85AD38011E5AC3DC0BCF318164F183A3D58CCE30171CCB50D89771BA7819C7D2E823350B08A436DA94B3600A3CD09CFC4D92E9
j = 4
MD = 25656A2280D424AE9C73618899E3A3A29CD8D77E1A9876E0DDDE8568CFD44CE9CA171F297C279153A2729714B57756DCD34BAAF4484A5D9021159790DA9DDE70
j = 5
MD = 4C144909FD28CEEF49B659639176922BB837A0BE9282925D504EB4A46D1A5DE661BD507F11EA43D71362E6D621219D0A38A37D7F74406A25B08C4F88EAB09AA6
j = 6
MD = 69B6AA71089C8E30F48BF1328A722B2B4DA02F54A147F1A9E083844641E0B07C3EA597754DB2CFB06454CE4E02B208719FC8291793F2D430FB36519AA0C12AB8
j = 7
MD = E8411BAAEEF83F20CF0AD7CF9C8B39AD782BFC293F551BE215040A14863A59F956AFD6BDEAD65ED00F2FD09C21077EF43AF4C0E91213C82FB20E316255D495D6
j = 8
MD = 629B0B6205518B57FA2D818E510669EEFB146CE289E39EE2608D416B8EE3EE2A0EC12B4AA13FFF1CD4470A0F43073882F4A223CF7E4960D12CA55732F7582BAD
j = 9
MD = 159BEF289ACEFB1BFFD425463D97EBD30D91437E5BD9FB7556C61EE7F3204B5488BFC01D98950B7CE2B4E2549E2078E03DAEC2EF69E313A42B2FBD8451288B17
j = 10
MD = 72748F72C0A1C7C0353AA28A45AFDC65A3354A5FACFA2B217C79A32B03295789E82B86961A083194A06CBF8CDAB94693B7139D1D2989DDE89A230CFED7D3F996
j = 11
MD = FD3CC1F84D656C82C7C4459F4879486BE6DC8933F8FCDD64EC6AD34F85F48F109D9959EFDA0F9852345ED78DA1A658CA5EEAA109701356C725C027B9E741456E
j = 12
MD = AA14A9FC1FE0B257D7AA41C7169D8EA1311EFA95F0005B180D8F11E6BC4E8715C6886AC36727483389CDCFB79BF4BA7DA72B98AF19D0D0369E75D7F1111A26C6
j = 13
MD = 8028BB254D1AD33E655B1C4358DAB248E68BAFF6FF0D2BBFC9FCFA8D68381411456FED8C44C29D3B146B1838B0B0975B81BE84951EE9EF929194D5E45E9F1541
j = 14
MD = 59B305652AEBA5A360E8AB87B77308CB3CB92440F223A53D908BDFD73EC1AACB91ACF8E1279289ED4B1573D38061CADC9794BE363790A26B274ABA3B1E89DD43
j = 15
MD = 04DA909E3D6F03E4A4749C7CCF4BF3E375221506621F5E1233A16079021B109AD6B7F78214AC92FBDF83D07287E12BBE8A8902708FC1A5DFBDC32482810E17C1
j = 16
MD = 342D9871CEB1BBBA1CAD417571DE3380947B6CEAA986976E042FE99D5049F9F9179E48855D6723DA3487D8EB534EDABC73626EB2CF9FEED0CA9E34D65FFC0141
j = 17
MD = 763583E690398DAC4E6F51394B0E238662CC26D73DFC338D57C435585ABE53ECA83F72507B2D9ABAEB780DD021681A3D7AEA7AD87DB151C3BB3CE30905F7795E
j = 18
MD = 48632F8EF300A545A8EA6AAEE9E0D6229F20BDD6EB6FFFA9167B623E7BF11F35CD7E76179ECD13A75E7E7123F48083B7E473BFA3E9A000322D55FA9C27AD61EB
j = 19
MD = 79B3F28BCD69752FBCB32390D4C5F7934BFA057140FB3F84DBDCCADED2AFE847606283D6E0C66DE515BCBEA99BB3A302585FBF77EC42147265DD6593D0EC28B5
j = 20
MD = F07951B07DD9F3A3FE894C134C6808CBD39AD9395D7AB241998CEE81299083EDC3A246C5F3C9809EED06694FCB3149FEB19FA9C19EF96C36C5EEC6F37715FEDE
j = 21
MD = 430308CFC574E30517302B52447EF6EE0C178ACD8CEC41F70B027FB3E4017112F44A4552D86369211E1A90DC741CDA222E488D66AAEB246269DE37B8192C627B
j = 22
MD = 8186BE1B93F594E5A167AA64537417CCD5EB7A96927D691E36498CC331F3F48A52B3CB865F425428B62DA4DB0C95D18998B51C19E01FDFFBEDDE304498BBAA48
j = 23
MD = 20A7CCA43D669B7BF19946234194FC5BB81726F39B328D5CB75564ED8BDB1992F8307625DFC61211E52A02AB92197DA4AED22E8AADC6FDF3F7AEC4783A0F8DC8
j = 24
MD = 0B6B2B2E06B578D8D0AFC227EE89218EDEA596B24DFAC7E04C65D597B693125417EABB6A6331B281E2B355E3AB297061E9645AE0F0AD5A45EBEEAC78758D641D
j = 25
MD = 66658D197C4ADD39F17D1DB2BDBAD4C866FAB188F2E8A9578153B41ED6987E9A272E8236D574222F6AE2F3FBD59D288D03AD21053ECD7849E45F9B93E0B1CDC4
j = 26
MD = 197170B2C45E3F7A52A2F363877A2961BE94E118728F1DED2569DB4B4B4A5BD810481C1A4F9C396EAA3ACE489AAFB1B0B6A04D22FE8C20FC812A83D193FF2A27
j = 27
MD = 300CD5D23250DE0F1C530A37E585673ECE6438677D75067CB317DBD1AEEB7265A5F0C1DC6F529F5C2BA4AF6B4C52BCCB06892E787E8D3295505F47E9A624BC79
j = 28
MD = A536997620FBAD6AA413A9F6798BF8198D42C6B9EE927F6116338D32CE3B0AA7628DFED05434243A8196A1BFEF9930B909A4E47B34D7E0C058E628D3DF6B80D9
j = 29
MD = A2516386AD5088C8F64A28E3EAA9A6DCA89B5B5BBCEFEBB88E9584C74CF912967FDCF24D63466C7C99AD5D57A459F0AA049AD22C2DCD39608DD20C9369CAB5DB
j = 30
MD = 04BEFA665B75CECE5E73E2398806A53410CFA5E62F1078778884459869428F67AB28257589C13DB9A13FADA0CD3D41C1EADED2D47A18EFD35DF24705F799B2FE
j = 31
MD = 6866AFA14A1FE13C1CE6E8B30BDB3269F700F43ED051D1D201E233B0EB5BD409E240531AC69FBED54DEFFDAA9CFC95232FBC42E03C957E9FFB19D38992BD12DB
j = 32
MD = 1E4BE592DE4803A841CFD201D398563609CB014BE48BC67CA7861AFA03212B095F448312D0CFC9F51D3C171E6BDC73D7CE634EBEDAA5597C91F6E34E6C4E569B
j = 33
MD = DF14B2C2257B9F52B286AAB5DC0CDB95694869F4A90D6FDF8DBAE5850984F33B9430ED932077B39E5FA67F528B898F7269A56AD386DC712B02A896F7BD2B5715
j = 34
MD = F7CC063ACFBCBABF5C71E09917B4D13FFCE3807BB0BFA4CD73BBBB5E440DE7FEB5ABE3556DA02BEA05041475749A3FB0DF58F5D7327026B05B153CFF658C2FEA
j = 35
MD = 5FA8A598F4C9F17529D8E85B009A542E6E1B38EC3BA0D79BF41B11C9369B1EFD588720940F43BF72EF8116D1DB6034BBDB37931A87E282295E6B802AA2C1BC83
j = 36
MD = F360680110A14A8C2E71D11F95EFE5F15D7C85E6BBC25A2DC634A49A8FEDB2BAB839E4E436D63F6EE5741CC74DFE7E5F81D187BC15E5568F3FFDAA2B28BAA6E4
j = 37
MD = D24B1AF135A5E6765093CD223A6C349796FCA41479F2ECFD74CE51F541D4A5AEDBE36D1A74559E7F0EA6BCEB42EB21D3A14D3671275D1AECA41BDA95719A4FEF
j = 38
MD = 5CFA452C93FC1FDCA08282ED383406E5CD5C7E7BE0D975133448BF7857751B1AC73D4FE8E42E9E6CA348279218DFCFB09B9DA43A902A363168F10446E370B98D
j = 39
MD = FE8207E14C8B2A0AE5043F09E0E7FE9D487456ABD29A2873ED1A7AF63120E1F8A91BED69A9D433F5B50D44ABF19B240504107E7FDFCCDEF44B86EB882A4EAEC4
j = 40
MD = 4145E426F0BF3570804CD22019E86C09FD23C95CAE68AAA4B2D82CFF69FCE5DD31F10B1297AF0996356571D1849C2E8CE6D2228E740DF5D1A53ED19F8FBEE685
j = 41
MD = AFC06C401B9B9B46DBD0EF2188FE3DAF368E07807F7452ACB16E9C9BDCEB22F9806766D1C189C2EE4CC48B0085302C275CFE3D0F42D74C5FD5EADA359672C0B3
j = 42
MD = 1DEF43365B23F57EECCBB1EC92C92255E5C5FD6D25079CBC948B7FC9F88437953CAD657266249A008A71A635E7E66FE0F153D8A5EEF2343B75661B944E6C606E
j = 43
MD = 9CF21C2C1DECF6233859E8F7F226B8B2C4DBB8538845235FCB4C731FC91AE2B8E457C8D99770ACFD8C50179E18E0880B3F1A262D6AB204C9F045F5331DA35AD9
j = 44
MD = 8F3B2E70EE7E3E6931233598838F45F9F3838E67AACBBD1C6D6E52214AC8FB7399274529F13EE30795895A6123802C2A385AF5635A65E86C4F783F4AD33D432B
j = 45
MD = 45F513EE7F74A67E6D7151A22F1C74819F6CF3DA4D645843AE9F7B0264CD4B0C6066C415ADCC20A7EF64961224F305151ED9D9C557D52C47EEE027FEA44212E3
j = 46
MD = 383D5E1EE1B4BB08B698D89A1AA05E7641DF76CF140595BB84CF36C074844B4321A8AD098CF0F3DA1F545428D3C195B8920C4E624A97805076D88FF8D6011E3C
j = 47
MD = CF6E75ECD3AC9D7C14A9027A595755009C6FAB1C46D5088C891E13AF06C03A25CA9532BE8549E2EAC508720EAA357587FB6597A89FA43246E3874C3730B70545
j = 48
MD = 3A2564B3C482C9A7A03361AED7DA008CF7E870C1347B9783ADEEBAED6075455A2397D7EAEBE7E9E986852C1AC98EAFAE45954D02AB0D6344D6DF277E1AFFB5BD
j = 49
MD = 37E2BEDEB65E0E7FF0B9162D473EC53EA174EE3A66ACD9658540686EA7123B57CE6F893A38C698212C6856D335910340C0D09D51BE57C0E3C47E8C1D9976C376
j = 50
MD = 20E67D7BAC694809E7362DB903DEB51649E6DF35113C44C8AD1D43F1CB3CAB0081A69B08684839530728641CA415481FA9B50C722963F0F96C7C8342462DC87D
j = 51
MD = A07937ABFEAE63F3F3FD1E75548E4302949ADDDC1828A353C1AE9AAB0E3193A9EEE8C9E5DCA07275C4D8F224622F21EA54AFC139E24B51D6568B289390FF2BB7
j = 52
MD = 3BD2537D62842465E48E113428C6E3116EC3A6206994D337FBF16D855822757A7A2F84074FEE30BC269C2C098599562FC9FCDD466353CC6400BE95FAD9FC4CD3
j = 53
MD = 747B091EB60DD573B8DD47696B44B04101E6216FA16FB1BB9023E4ED6844F63F33FB686ADA4D3D1451773D1D4E2A61E444F88BB9ABF26F43456AF9AE36BB0B62
j = 54
MD = B206EDEF52C7F6B0DE80AF34E6F869730A20FA893B97470E34FAA9D870D9D2A734B7820C6566153760377BAC849BFC5CF36C0FB5A2BE80238BB7F737891562FC
j = 55
MD = A0C2C0B2AE4795A83B3063A9CFE1FD6830FB069366534F738A77E1AEF8139525D5097D6DACF435C128FDAFE1E5BBC9F22F8B81AF7D6A531B8C649AB3C6A1928D
j = 56
MD = 48B842ECE3620812E928F1EAC568AF2435C6BF44A27CA8B222A52869D18EB0C1DB2889283FCCDC95E96FF463A8AE68F1B468D88C1F5A25D7809102FB5739963B
j = 57
MD = 3FC267FD34D7D6BB501AD01FF49230E04E846A566845DDC5861FD91A90AECC60A4967A1798CF902C723AFC9906E8135D58B9D4B8C8F1CC84FDE2A40E044300E6
j = 58
MD = B98D4F423ECC62DD85E5FF7F6F945F397E51496F6D5E5FB6241EFC45518D9EEE06A80B79B12ECB45821E665CFC01B09EB7F2F816BFB95BBC2FAE642D9C30E52F
j = 59
MD = 225B9A7840E52D25FC942ADABF71D72D3962A264254F483B1D211F1B79C11F8E7514D264736F39D0F9C9CECFECD726CB59DBC1CE628536892DB1AED6F56663C7
j = 60
MD = 480F9B3F05256F92AED24F0E6788465654644A7E3145C4B6F1E00581F98DFDED29D4E4C4C6FD405638D1F48DC6CE8BC08E75B79DDB3DD24098CA1C348EE09B07
j = 61
MD = CB2934B11210D87EAD3CB3EDCCC94BF75C1E915180F53F209FD9B6484E988A3A2AC2AD8DCD8D2B5DE26E9D5B9BC1B42EBD8F1BF9E1981A80DBC3F3A4C2FE2A77
j = 62
MD = F6D117CDCB5892BB28D0CCE7E6AC4A507E1FE90ACE7E6A6A5094E6796D355FFB6AE31D4335A795D2383C241E6AF6036D5B50BD5F61D0BB2FE7C37909AAE3F901
j = 63
MD = 1AB9F2C41989DF7605EFA400FCBD4D20F3383278E82AEF9DB37A391DDBBAAAD00A3D468E89FD96C27A186C91C90B4E872BDBF3CC4A8FF9E179B4FEA9DDCD6C1C
j = 64
MD = 6B01B68F22F6DE91A28A252124611E512D0A54B4A57414A1A52FBB7D4EC752E4C744B338CFB1CA4116EA45538C6E949F7BBAAB68DEECD53B9706F0DFD2932977
j = 65
MD = 8E06499A81B4333C48FAAA0DFB41E6B1C67FC90487E4636AB03517AA70E8D78ECCA88632D05B8E44244C0722D9767257A81BA596C1F8BDA1711A2B576260C786
j = 66
MD = F51FB27D2FA8E389C378C985BEECEAF4070E57A21AAAD4C51A44540CBDE97D4C94345F1424FAB6C8009AB5BC2A3F3CE3DEA9D132B90B6FCD9ABDCB8447E42664
j = 67
MD = D8B7BEEC5EC0F6C8A04D277F02CAD1D4562342C04B0D534E8AFFAD8C7BCE4A0F4A295E9CF7E633EA41D4A4A136E8D414C653E2C49B504767B700E96CB42C5925
j = 68
MD = 48748DBEF7C32E2221FBDD5B02AEBA42D7110026ED08E7C1DD3E2254834BC2AEDFD68F2C4ED03E59355DA85188642E65BDDEF511EAFDADC48AEE67E27C5CB31B
j = 69
MD = A683EA49ECBD2D6150059F9BB98876B82791CF782554F5C43D9289B2F2D44DBFE6E567939F00211963BDCCA838DCBB7CAE277E04CE5B1B6D5033B73E0D2FE84D
j = 70
MD = 447BD17991AB156371F8CDEE3BF5D1A63CBB197BCBE4ED37F85D91E4E98E3F48B616F716D7D21B67D8CCAD2C0287B75EF21C3BD7F9DC4325806E3AE022A3E079
j = 71
MD = D622510512FB43ADB64C7EBA97877F294F7AA01570F15C373D816038E0960BAF4FE9BAA75EFAE815871AD35BA2C84BD9D2B8D5FC41BBC0F50A2FBC202EF966F6
j = 72
MD = 6A49C46532A7354D4C1AF37632773CC198EBA11260E6D55E30BA6E57DA4A863DC8BDB8534F55DEA9DC46B52E547E924D7807DF9AA51AC55A5E97B379ECBE7D28
j = 73
MD = A216AABD50EB45E77B7BC25C55F946FA4A4BD32F18AD9925D48EC7E58A3D8258965E23BD78344A52098C6820C57F024E1AB5A28CAE0AEEE8863762B0DD3A65C4
j = 74
MD = 940C55F6977EC10F5524CD1BB6C7E9000E710FCA049BD156436E4AA93A39788F75C6956A47CC54DE18A360240028383D2271A58C8853167D9B5BA25FDD2BEC74
j = 75
MD = 50DDD9CBE116470049A8C6FD284D4CA50EAE8DED61A7CA92B9FD5E3CA9DE74E0CB7383DA0E967220D27051818B687E8C44E4FD4F56C69031B8B99A6A23CF253A
j = 76
MD = AF2F28AA26854B670444C9A84FA8BAE12E02B33095C872627BCFE868299765093A4CBDF0BA198FC957D1E6A71BC2F6BF90A8849869A901C93781CD25ADF6CDE0
j = 77
MD = 395772CE163462C60AE606F33AAB4BF82834A77CBCEC033E1D052EABE0FCCB2B841BBD772A6B5F25D5E7E3DA52A7659017E0B54EC35CBFB07D7A8FA9F2E615BD
j = 78
MD = A75CA66F829190A2D672FF79B22A2C835FE49DDB1005C02408D5B031110E72263D915C66E682913E8490E6D648E935A0553424BB6549FEC561EAD1994C6988DE
j = 79
MD = C41BCB1636DDA4BC968DB7154D4B7B45F348C7C3C51881F344C0502BE477A615D21905E6B0B9C0778001BB871AB0350FBA58269F3B093700558AC328D02D4604
j = 80
MD = F68A1C5BC85839EDF4C9D8D2B8AC59FF48A991D8D9075221FFA51C22E2D31D277B496DED1F4EEDB379E868E0A33B9AC84949D9AFC25846C1E6D53EC2B0E65515
j = 81
MD = 4339F14B635D59DBD01908D2ACBE8DEE3C2CB4CC1279EA0A47218523E2731D4C91463791E3BCEF4D9EAA37D72225C595A5B7AA1277F13A04501C21FA46CBDB84
j = 82
MD = 2D38967E9E10E1E215267F13550378E323DEE0E31BBF2F821123D8793C56A6E5C346D0924D721166C1BDD93E88532CF2FE8F5017B20C5291A4075CB781AA06F7
j = 83
MD = E1C601684D4F1C1EC6DE76993731142C6D1B6F84C7E65A2E56E5903742C8C1A397FD276D1253DC4306145A5A1A97402BAA17CC407031E136382D4195597E7487
j = 84
MD = 2D7B2C8F98393F56194C76744B7FA977DFEAA0DA50C14DC98EAE8358BF06CF111C75D9CAAA04319878E3C50AC9246240B73088B4ED124C956D7765D841A3198A
j = 85
MD = 85C66AC620E3702A515FB7EC25DEBAD9AF4EEFAD1EBAC9659BD55075D7D822F5F731DD7213F4C4692379F4564CDB110785735AD595395CCD932DAF689B5960C7
j = 86
MD = 30FEA1CB41992188F4AE9074788C46BB6C93F5532213C9C36B50445345178CCCD1BF2B3C89CB984DD02EC8C785AC68951D8916032371528F11F880EA6CF415B1
j = 87
MD = 73FC189F327DF0C19343A3E3D14A673B554DD502F4D46D95EDE47A26DBB796C1BDBBB04285FD35DE96F2BB1E34158B9E887D3E6FB4DC231D59DEB5994A0016E6
j = 88
MD = B2F8F064B463E04E07C95AC437C90AEE1CEDA06222DF5CF79E25C6976A9DBD5216106C0DF16D2F15E3E58F1AD2516E214F9F48237EAE2FD38C7A668080AEBD02
j = 89
MD = 2DBCFAFF73380FB45AFD7C01CA09E26CB9EE0B4788C66EB6EA15E54ADD8BC9C050D4E2A2DA56F81246BBCBC459CD534220069EBD204EBCDDBC3BAFE19AA65A4F
j = 90
MD = 0C51F1F77C02210F3D087FCE2AAC19CF852DF5C1861CD5B4A46B0795A17C0907C282A4E971ED69795F87F47E4A2F84D97D39C4B6525CB4F6808EFEE105406E81
j = 91
MD = 1A6FC5F7E7C2443FFF3F0FA2FD2D4808A84665656AFFDA5DC879C44E9FE1D90758A3A79A63EFF1BC301D50C700B73870104E492B48EB78A8CA716056BDA6BA1E
j = 92
MD = 55FB5CEA3781C0A8DB9EFB6514AF2F6A702C24D4F75DC77563E0A3762C51D005CFAC1387731FC57C9A584F9A1B1896B7630348D5D0EF506E32E9A04B9ACE1996
j = 93
MD = D8180052549A3FE8A53F4BCC71A7DF9279ADD588B789A9222E4B2EBAB9194B840A6DAF88B7AA1AD782CE2944F1954A87F865EC42F1AFC578A2A3CB4C82DEEFF8
j = 94
MD = 25D10D77F725C8BB8573B73349D914B8978EA70E33B2032DE24E75D23D3601EFE809F0E5C143C184D576A5E9EC4C7DD4FF0EC4AF672185625CB4B7368A60EB13
j = 95
MD = F37CA46CD78E907F7DF82C6565D6AA0E07D071599896ED4562E3EC19DC82D58CB0E3C89A5EF12F077524E32DBB075883DF9E196B7973B1336CD87AFF06066806
j = 96
MD = 256660E099EA201ABF644DF857D1D6B1388553F173EDC5930995A358EFC4F3627BE2374675CE93F14FCED603E2CF13E3BBDDAE5032863CEE8B41771BA57B69C8
j = 97
MD = 3021109B957254C93F962C7D5D48594F151A0C0A120CC84B5BAB77B0E3A53232352F8EAED3558DA9C30935A3CD5751F3900569A3F11001F26344B41CE958FB57
j = 98
MD = D02B981B4D86F8AE1376DE637F4565E755750437470D5C5B2207EA1E7DB9B15D0E9925846A10A058A6588651E5F51D4F49B25A9159942C3FD245C859A040F845
j = 99
MD = 365D5C6D3EA5F7DB1EB901933DA2F0EA58DF34401EF61811BB6DABF41927A28328F9640D08BF974BA0F90CFAD21C8C36DF399856BEBFD27514B04A1CD3BE5DA7

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