JH and Blake updated for round 3

This commit is contained in:
bg 2011-01-27 18:49:30 +00:00
parent 04e721b4e4
commit 22b608111d
51 changed files with 416 additions and 214 deletions

View File

@ -29,21 +29,16 @@
#include <avr/pgmspace.h>
uint8_t blake_sigma[] PROGMEM = {
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF,
0xE, 0xA, 0x4, 0x8, 0x9, 0xF, 0xD, 0x6, 0x1, 0xC, 0x0, 0x2, 0xB, 0x7, 0x5, 0x3,
0xB, 0x8, 0xC, 0x0, 0x5, 0x2, 0xF, 0xD, 0xA, 0xE, 0x3, 0x6, 0x7, 0x1, 0x9, 0x4,
0x7, 0x9, 0x3, 0x1, 0xD, 0xC, 0xB, 0xE, 0x2, 0x6, 0x5, 0xA, 0x4, 0x0, 0xF, 0x8,
0x9, 0x0, 0x5, 0x7, 0x2, 0x4, 0xA, 0xF, 0xE, 0x1, 0xB, 0xC, 0x6, 0x8, 0x3, 0xD,
0x2, 0xC, 0x6, 0xA, 0x0, 0xB, 0x8, 0x3, 0x4, 0xD, 0x7, 0x5, 0xF, 0xE, 0x1, 0x9,
0xC, 0x5, 0x1, 0xF, 0xE, 0xD, 0x4, 0xA, 0x0, 0x7, 0x6, 0x3, 0x9, 0x2, 0x8, 0xB,
0xD, 0xB, 0x7, 0xE, 0xC, 0x1, 0x3, 0x9, 0x5, 0x0, 0xF, 0x4, 0x8, 0x6, 0x2, 0xA,
0x6, 0xF, 0xE, 0x9, 0xB, 0x3, 0x0, 0x8, 0xC, 0x2, 0xD, 0x7, 0x1, 0x4, 0xA, 0x5,
0xA, 0x2, 0x8, 0x4, 0x7, 0x6, 0x1, 0x5, 0xF, 0xB, 0x9, 0xE, 0x3, 0xC, 0xD, 0x0,
/* the following lines are for large blake (blake48 & blake64) */
0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF,
0xE, 0xA, 0x4, 0x8, 0x9, 0xF, 0xD, 0x6, 0x1, 0xC, 0x0, 0x2, 0xB, 0x7, 0x5, 0x3,
0xB, 0x8, 0xC, 0x0, 0x5, 0x2, 0xF, 0xD, 0xA, 0xE, 0x3, 0x6, 0x7, 0x1, 0x9, 0x4,
0x7, 0x9, 0x3, 0x1, 0xD, 0xC, 0xB, 0xE, 0x2, 0x6, 0x5, 0xA, 0x4, 0x0, 0xF, 0x8
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
0xEA, 0x48, 0x9F, 0xD6, 0x1C, 0x02, 0xB7, 0x53,
0xB8, 0xC0, 0x52, 0xFD, 0xAE, 0x36, 0x71, 0x94,
0x79, 0x31, 0xDC, 0xBE, 0x26, 0x5A, 0x40, 0xF8,
0x90, 0x57, 0x24, 0xAF, 0xE1, 0xBC, 0x68, 0x3D,
0x2C, 0x6A, 0x0B, 0x83, 0x4D, 0x75, 0xFE, 0x19,
0xC5, 0x1F, 0xED, 0x4A, 0x07, 0x63, 0x92, 0x8B,
0xDB, 0x7E, 0xC1, 0x39, 0x50, 0xF4, 0x86, 0x2A,
0x6F, 0xE9, 0xB3, 0x08, 0xC2, 0xD7, 0x14, 0xA5,
0xA2, 0x84, 0x76, 0x15, 0xFB, 0x9E, 0x3C, 0xD0,
};
uint8_t blake_index_lut[] PROGMEM = {

View File

@ -89,15 +89,20 @@ void blake_large_changeendian(void* dest, const void* src){
static
void blake_large_compress(uint64_t* v,const void* m){
uint8_t r,i;
uint8_t a,b,c,d, s0, s1;
for(r=0; r<14; ++r){
uint8_t a,b,c,d, s0, s1, sigma_idx=0;
for(r=0; r<16; ++r){
for(i=0; i<8; ++i){
a = pgm_read_byte(blake_index_lut+4*i+0);
b = pgm_read_byte(blake_index_lut+4*i+1);
c = pgm_read_byte(blake_index_lut+4*i+2);
d = pgm_read_byte(blake_index_lut+4*i+3);
s0 = pgm_read_byte(blake_sigma+16*r+2*i+0);
s1 = pgm_read_byte(blake_sigma+16*r+2*i+1);
s0 = pgm_read_byte(blake_sigma+sigma_idx);
s1 = s0&0x0f;
s0 >>= 4;
++sigma_idx;
if(sigma_idx>=80){
sigma_idx-=80;
}
v[a] += v[b] + (((uint64_t*)m)[s0] ^ pgm_read_qword(&(blake_c[s1])));
v[d] = ROTR64(v[d]^v[a], 32);
v[c] += v[d];
@ -171,41 +176,41 @@ void blake_large_lastBlock(blake_large_ctx_t* ctx, const void* msg, uint16_t len
}
uint64_t blake64_iv[] PROGMEM = {
uint64_t blake512_iv[] PROGMEM = {
0x6A09E667F3BCC908LL, 0xBB67AE8584CAA73BLL,
0x3C6EF372FE94F82BLL, 0xA54FF53A5F1D36F1LL,
0x510E527FADE682D1LL, 0x9B05688C2B3E6C1FLL,
0x1F83D9ABFB41BD6BLL, 0x5BE0CD19137E2179LL
};
void blake64_init(blake64_ctx_t* ctx){
void blake512_init(blake512_ctx_t* ctx){
uint8_t i;
for(i=0; i<8; ++i){
ctx->h[i] = pgm_read_qword(&(blake64_iv[i]));
ctx->h[i] = pgm_read_qword(&(blake512_iv[i]));
}
memset(ctx->s, 0, 4*8);
ctx->counter = 0;
ctx->appendone = 1;
}
uint64_t blake48_iv[] PROGMEM = {
uint64_t blake384_iv[] PROGMEM = {
0xCBBB9D5DC1059ED8LL, 0x629A292A367CD507LL,
0x9159015A3070DD17LL, 0x152FECD8F70E5939LL,
0x67332667FFC00B31LL, 0x8EB44A8768581511LL,
0xDB0C2E0D64F98FA7LL, 0x47B5481DBEFA4FA4LL
};
void blake48_init(blake48_ctx_t* ctx){
void blake384_init(blake384_ctx_t* ctx){
uint8_t i;
for(i=0; i<8; ++i){
ctx->h[i] = pgm_read_qword(&(blake48_iv[i]));
ctx->h[i] = pgm_read_qword(&(blake384_iv[i]));
}
memset(ctx->s, 0, 4*8);
ctx->counter = 0;
ctx->appendone = 0;
}
void blake64_ctx2hash(void* dest, const blake64_ctx_t* ctx){
void blake512_ctx2hash(void* dest, const blake512_ctx_t* ctx){
uint8_t i;
for(i=0; i<8; ++i){
((uint32_t*)dest)[2*i+0] = CHANGE_ENDIAN32((ctx->h[i])>>32);
@ -213,7 +218,7 @@ void blake64_ctx2hash(void* dest, const blake64_ctx_t* ctx){
}
}
void blake48_ctx2hash(void* dest, const blake48_ctx_t* ctx){
void blake384_ctx2hash(void* dest, const blake384_ctx_t* ctx){
uint8_t i;
for(i=0; i<6; ++i){
((uint32_t*)dest)[2*i+0] = CHANGE_ENDIAN32((ctx->h[i])>>32);
@ -221,42 +226,42 @@ void blake48_ctx2hash(void* dest, const blake48_ctx_t* ctx){
}
}
void blake64_nextBlock(blake64_ctx_t* ctx, const void* block){
void blake512_nextBlock(blake512_ctx_t* ctx, const void* block){
blake_large_nextBlock(ctx, block);
}
void blake48_nextBlock(blake48_ctx_t* ctx, const void* block){
void blake384_nextBlock(blake384_ctx_t* ctx, const void* block){
blake_large_nextBlock(ctx, block);
}
void blake64_lastBlock(blake64_ctx_t* ctx, const void* block, uint16_t length_b){
void blake512_lastBlock(blake512_ctx_t* ctx, const void* block, uint16_t length_b){
blake_large_lastBlock(ctx, block, length_b);
}
void blake48_lastBlock(blake48_ctx_t* ctx, const void* block, uint16_t length_b){
void blake384_lastBlock(blake384_ctx_t* ctx, const void* block, uint16_t length_b){
blake_large_lastBlock(ctx, block, length_b);
}
void blake64(void* dest, const void* msg, uint32_t length_b){
void blake512(void* dest, const void* msg, uint32_t length_b){
blake_large_ctx_t ctx;
blake64_init(&ctx);
blake512_init(&ctx);
while(length_b>=BLAKE_LARGE_BLOCKSIZE){
blake_large_nextBlock(&ctx, msg);
msg = (uint8_t*)msg + BLAKE_LARGE_BLOCKSIZE_B;
length_b -= BLAKE_LARGE_BLOCKSIZE;
}
blake_large_lastBlock(&ctx, msg, length_b);
blake64_ctx2hash(dest, &ctx);
blake512_ctx2hash(dest, &ctx);
}
void blake48(void* dest, const void* msg, uint32_t length_b){
void blake384(void* dest, const void* msg, uint32_t length_b){
blake_large_ctx_t ctx;
blake48_init(&ctx);
blake384_init(&ctx);
while(length_b>=BLAKE_LARGE_BLOCKSIZE){
blake_large_nextBlock(&ctx, msg);
msg = (uint8_t*)msg + BLAKE_LARGE_BLOCKSIZE_B;
length_b -= BLAKE_LARGE_BLOCKSIZE;
}
blake_large_lastBlock(&ctx, msg, length_b);
blake48_ctx2hash(dest, &ctx);
blake384_ctx2hash(dest, &ctx);
}

View File

@ -31,10 +31,10 @@
#define BLAKE_LARGE_BLOCKSIZE 1024
#define BLAKE_LARGE_BLOCKSIZE_B ((BLAKE_LARGE_BLOCKSIZE+7)/8)
#define BLAKE48_BLOCKSIZE BLAKE_LARGE_BLOCKSIZE
#define BLAKE48_BLOCKSIZE_B BLAKE_LARGE_BLOCKSIZE_B
#define BLAKE64_BLOCKSIZE BLAKE_LARGE_BLOCKSIZE
#define BLAKE64_BLOCKSIZE_B BLAKE_LARGE_BLOCKSIZE_B
#define BLAKE384_BLOCKSIZE BLAKE_LARGE_BLOCKSIZE
#define BLAKE384_BLOCKSIZE_B BLAKE_LARGE_BLOCKSIZE_B
#define BLAKE512_BLOCKSIZE BLAKE_LARGE_BLOCKSIZE
#define BLAKE512_BLOCKSIZE_B BLAKE_LARGE_BLOCKSIZE_B
typedef struct {
uint64_t h[8];
@ -43,25 +43,25 @@ typedef struct {
uint8_t appendone;
} blake_large_ctx_t;
typedef blake_large_ctx_t blake48_ctx_t;
typedef blake_large_ctx_t blake64_ctx_t;
typedef blake_large_ctx_t blake384_ctx_t;
typedef blake_large_ctx_t blake512_ctx_t;
void blake48_init(blake48_ctx_t* ctx);
void blake64_init(blake64_ctx_t* ctx);
void blake384_init(blake384_ctx_t* ctx);
void blake512_init(blake512_ctx_t* ctx);
void blake_large_nextBlock(blake_large_ctx_t* ctx, const void* block);
void blake_large_lastBlock(blake_large_ctx_t* ctx, const void* block, uint16_t length_b);
void blake48_nextBlock(blake48_ctx_t* ctx, const void* block);
void blake48_lastBlock(blake48_ctx_t* ctx, const void* block, uint16_t length_b);
void blake384_nextBlock(blake384_ctx_t* ctx, const void* block);
void blake384_lastBlock(blake384_ctx_t* ctx, const void* block, uint16_t length_b);
void blake64_nextBlock(blake64_ctx_t* ctx, const void* block);
void blake64_lastBlock(blake64_ctx_t* ctx, const void* block, uint16_t length_b);
void blake512_nextBlock(blake512_ctx_t* ctx, const void* block);
void blake512_lastBlock(blake512_ctx_t* ctx, const void* block, uint16_t length_b);
void blake48_ctx2hash(void* dest, const blake48_ctx_t* ctx);
void blake64_ctx2hash(void* dest, const blake64_ctx_t* ctx);
void blake384_ctx2hash(void* dest, const blake384_ctx_t* ctx);
void blake512_ctx2hash(void* dest, const blake512_ctx_t* ctx);
void blake48(void* dest, const void* msg, uint32_t length_b);
void blake64(void* dest, const void* msg, uint32_t length_b);
void blake384(void* dest, const void* msg, uint32_t length_b);
void blake512(void* dest, const void* msg, uint32_t length_b);
#endif /* BLAKE_LARGE_H_ */

View File

@ -72,17 +72,20 @@ void blake_small_changeendian(void* dest, const void* src){
static
void blake_small_compress(uint32_t* v,const void* m){
uint8_t r,i;
uint8_t a,b,c,d, s0, s1;
uint8_t a,b,c,d, s0, s1, sigma_idx=0;
uint32_t lv[4];
for(r=0; r<10; ++r){
for(r=0; r<14; ++r){
for(i=0; i<8; ++i){
a = pgm_read_byte(blake_index_lut+4*i+0);
b = pgm_read_byte(blake_index_lut+4*i+1);
c = pgm_read_byte(blake_index_lut+4*i+2);
d = pgm_read_byte(blake_index_lut+4*i+3);
s0 = pgm_read_byte(blake_sigma+16*r+2*i+0);
s1 = pgm_read_byte(blake_sigma+16*r+2*i+1);
s0 = pgm_read_byte(blake_sigma+sigma_idx);
s1 = s0&0xf;
s0 >>= 4;++sigma_idx;
if(sigma_idx>=80){
sigma_idx-=80;
}
lv[0] = v[a];
lv[1] = v[b];
lv[2] = v[c];
@ -176,90 +179,90 @@ void blake_small_lastBlock(blake_small_ctx_t* ctx, const void* msg, uint16_t len
}
uint32_t blake32_iv[] PROGMEM = {
uint32_t blake256_iv[] PROGMEM = {
0x6A09E667L, 0xBB67AE85,
0x3C6EF372L, 0xA54FF53A,
0x510E527FL, 0x9B05688C,
0x1F83D9ABL, 0x5BE0CD19
};
void blake32_init(blake32_ctx_t* ctx){
void blake256_init(blake256_ctx_t* ctx){
uint8_t i;
for(i=0; i<8; ++i){
ctx->h[i] = pgm_read_dword(&(blake32_iv[i]));
ctx->h[i] = pgm_read_dword(&(blake256_iv[i]));
}
memset(ctx->s, 0, 4*4);
ctx->counter = 0;
ctx->appendone = 1;
}
uint32_t blake28_iv[] PROGMEM = {
uint32_t blake224_iv[] PROGMEM = {
0xC1059ED8, 0x367CD507,
0x3070DD17, 0xF70E5939,
0xFFC00B31, 0x68581511,
0x64F98FA7, 0xBEFA4FA4
};
void blake28_init(blake28_ctx_t* ctx){
void blake224_init(blake224_ctx_t* ctx){
uint8_t i;
for(i=0; i<8; ++i){
ctx->h[i] = pgm_read_dword(&(blake28_iv[i]));
ctx->h[i] = pgm_read_dword(&(blake224_iv[i]));
}
memset(ctx->s, 0, 4*4);
ctx->counter = 0;
ctx->appendone = 0;
}
void blake32_ctx2hash(void* dest, const blake32_ctx_t* ctx){
void blake256_ctx2hash(void* dest, const blake256_ctx_t* ctx){
uint8_t i;
for(i=0; i<8; ++i){
((uint32_t*)dest)[i] = CHANGE_ENDIAN32(ctx->h[i]);
}
}
void blake28_ctx2hash(void* dest, const blake28_ctx_t* ctx){
void blake224_ctx2hash(void* dest, const blake224_ctx_t* ctx){
uint8_t i;
for(i=0; i<7; ++i){
((uint32_t*)dest)[i] = CHANGE_ENDIAN32(ctx->h[i]);
}
}
void blake32_nextBlock(blake32_ctx_t* ctx, const void* block){
void blake256_nextBlock(blake256_ctx_t* ctx, const void* block){
blake_small_nextBlock(ctx, block);
}
void blake28_nextBlock(blake28_ctx_t* ctx, const void* block){
void blake224_nextBlock(blake224_ctx_t* ctx, const void* block){
blake_small_nextBlock(ctx, block);
}
void blake32_lastBlock(blake32_ctx_t* ctx, const void* block, uint16_t length_b){
void blake256_lastBlock(blake256_ctx_t* ctx, const void* block, uint16_t length_b){
blake_small_lastBlock(ctx, block, length_b);
}
void blake28_lastBlock(blake28_ctx_t* ctx, const void* block, uint16_t length_b){
void blake224_lastBlock(blake224_ctx_t* ctx, const void* block, uint16_t length_b){
blake_small_lastBlock(ctx, block, length_b);
}
void blake32(void* dest, const void* msg, uint32_t length_b){
void blake256(void* dest, const void* msg, uint32_t length_b){
blake_small_ctx_t ctx;
blake32_init(&ctx);
blake256_init(&ctx);
while(length_b>=BLAKE_SMALL_BLOCKSIZE){
blake_small_nextBlock(&ctx, msg);
msg = (uint8_t*)msg + BLAKE_SMALL_BLOCKSIZE_B;
length_b -= BLAKE_SMALL_BLOCKSIZE;
}
blake_small_lastBlock(&ctx, msg, length_b);
blake32_ctx2hash(dest, &ctx);
blake256_ctx2hash(dest, &ctx);
}
void blake28(void* dest, const void* msg, uint32_t length_b){
void blake224(void* dest, const void* msg, uint32_t length_b){
blake_small_ctx_t ctx;
blake28_init(&ctx);
blake224_init(&ctx);
while(length_b>=BLAKE_SMALL_BLOCKSIZE){
blake_small_nextBlock(&ctx, msg);
msg = (uint8_t*)msg + BLAKE_SMALL_BLOCKSIZE_B;
length_b -= BLAKE_SMALL_BLOCKSIZE;
}
blake_small_lastBlock(&ctx, msg, length_b);
blake28_ctx2hash(dest, &ctx);
blake224_ctx2hash(dest, &ctx);
}

View File

@ -31,10 +31,10 @@
#define BLAKE_SMALL_BLOCKSIZE 512
#define BLAKE_SMALL_BLOCKSIZE_B ((BLAKE_SMALL_BLOCKSIZE+7)/8)
#define BLAKE28_BLOCKSIZE BLAKE_SMALL_BLOCKSIZE
#define BLAKE28_BLOCKSIZE_B BLAKE_SMALL_BLOCKSIZE_B
#define BLAKE32_BLOCKSIZE BLAKE_SMALL_BLOCKSIZE
#define BLAKE32_BLOCKSIZE_B BLAKE_SMALL_BLOCKSIZE_B
#define BLAKE224_BLOCKSIZE BLAKE_SMALL_BLOCKSIZE
#define BLAKE224_BLOCKSIZE_B BLAKE_SMALL_BLOCKSIZE_B
#define BLAKE256_BLOCKSIZE BLAKE_SMALL_BLOCKSIZE
#define BLAKE256_BLOCKSIZE_B BLAKE_SMALL_BLOCKSIZE_B
typedef struct {
uint32_t h[8];
@ -43,25 +43,25 @@ typedef struct {
uint8_t appendone;
} blake_small_ctx_t;
typedef blake_small_ctx_t blake28_ctx_t;
typedef blake_small_ctx_t blake32_ctx_t;
typedef blake_small_ctx_t blake224_ctx_t;
typedef blake_small_ctx_t blake256_ctx_t;
void blake28_init(blake28_ctx_t* ctx);
void blake32_init(blake32_ctx_t* ctx);
void blake224_init(blake224_ctx_t* ctx);
void blake256_init(blake256_ctx_t* ctx);
void blake_small_nextBlock(blake_small_ctx_t* ctx, const void* block);
void blake_small_lastBlock(blake_small_ctx_t* ctx, const void* block, uint16_t length_b);
void blake28_nextBlock(blake28_ctx_t* ctx, const void* block);
void blake28_lastBlock(blake28_ctx_t* ctx, const void* block, uint16_t length_b);
void blake224_nextBlock(blake224_ctx_t* ctx, const void* block);
void blake224_lastBlock(blake224_ctx_t* ctx, const void* block, uint16_t length_b);
void blake32_nextBlock(blake32_ctx_t* ctx, const void* block);
void blake32_lastBlock(blake32_ctx_t* ctx, const void* block, uint16_t length_b);
void blake256_nextBlock(blake256_ctx_t* ctx, const void* block);
void blake256_lastBlock(blake256_ctx_t* ctx, const void* block, uint16_t length_b);
void blake28_ctx2hash(void* dest, const blake28_ctx_t* ctx);
void blake32_ctx2hash(void* dest, const blake32_ctx_t* ctx);
void blake224_ctx2hash(void* dest, const blake224_ctx_t* ctx);
void blake256_ctx2hash(void* dest, const blake256_ctx_t* ctx);
void blake28(void* dest, const void* msg, uint32_t length_b);
void blake32(void* dest, const void* msg, uint32_t length_b);
void blake224(void* dest, const void* msg, uint32_t length_b);
void blake256(void* dest, const void* msg, uint32_t length_b);
#endif /* BLAKE_SMALL_H_ */

View File

@ -31,37 +31,37 @@
#include "blake_large.h"
static const char blake48_str[] PROGMEM = "Blake-48";
static const char blake64_str[] PROGMEM = "Blake-64";
static const char blake384_str[] PROGMEM = "Blake-384";
static const char blake512_str[] PROGMEM = "Blake-512";
const hfdesc_t blake48_desc PROGMEM = {
const hfdesc_t blake384_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
blake48_str,
sizeof(blake48_ctx_t),
BLAKE48_BLOCKSIZE,
blake384_str,
sizeof(blake384_ctx_t),
BLAKE384_BLOCKSIZE,
384,
(hf_init_fpt)blake48_init,
(hf_init_fpt)blake384_init,
(hf_nextBlock_fpt)blake_large_nextBlock,
(hf_lastBlock_fpt)blake_large_lastBlock,
(hf_ctx2hash_fpt)blake48_ctx2hash,
(hf_ctx2hash_fpt)blake384_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)blake48
(hf_mem_fpt)blake384
};
const hfdesc_t blake64_desc PROGMEM = {
const hfdesc_t blake512_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
blake64_str,
sizeof(blake64_ctx_t),
BLAKE64_BLOCKSIZE,
blake512_str,
sizeof(blake512_ctx_t),
BLAKE512_BLOCKSIZE,
512,
(hf_init_fpt)blake64_init,
(hf_init_fpt)blake512_init,
(hf_nextBlock_fpt)blake_large_nextBlock,
(hf_lastBlock_fpt)blake_large_lastBlock,
(hf_ctx2hash_fpt)blake64_ctx2hash,
(hf_ctx2hash_fpt)blake512_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)blake64
(hf_mem_fpt)blake512
};

View File

@ -31,7 +31,7 @@
#include <avr/pgmspace.h>
#include "hashfunction_descriptor.h"
extern const hfdesc_t blake48_desc;
extern const hfdesc_t blake64_desc;
extern const hfdesc_t blake384_desc;
extern const hfdesc_t blake512_desc;
#endif /* HFAL_BLAKE_LARGE_H_ */

View File

@ -31,37 +31,37 @@
#include "blake_small.h"
static const char blake28_str[] PROGMEM = "Blake-28";
static const char blake32_str[] PROGMEM = "Blake-32";
static const char blake224_str[] PROGMEM = "Blake-224";
static const char blake256_str[] PROGMEM = "Blake-256";
const hfdesc_t blake28_desc PROGMEM = {
const hfdesc_t blake224_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
blake28_str,
sizeof(blake28_ctx_t),
BLAKE28_BLOCKSIZE,
blake224_str,
sizeof(blake224_ctx_t),
BLAKE224_BLOCKSIZE,
224,
(hf_init_fpt)blake28_init,
(hf_init_fpt)blake224_init,
(hf_nextBlock_fpt)blake_small_nextBlock,
(hf_lastBlock_fpt)blake_small_lastBlock,
(hf_ctx2hash_fpt)blake28_ctx2hash,
(hf_ctx2hash_fpt)blake224_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)blake28
(hf_mem_fpt)blake224
};
const hfdesc_t blake32_desc PROGMEM = {
const hfdesc_t blake256_desc PROGMEM = {
HFDESC_TYPE_HASHFUNCTION,
0,
blake32_str,
sizeof(blake32_ctx_t),
BLAKE32_BLOCKSIZE,
blake256_str,
sizeof(blake256_ctx_t),
BLAKE256_BLOCKSIZE,
256,
(hf_init_fpt)blake32_init,
(hf_init_fpt)blake256_init,
(hf_nextBlock_fpt)blake_small_nextBlock,
(hf_lastBlock_fpt)blake_small_lastBlock,
(hf_ctx2hash_fpt)blake32_ctx2hash,
(hf_ctx2hash_fpt)blake256_ctx2hash,
(hf_free_fpt)NULL,
(hf_mem_fpt)blake32
(hf_mem_fpt)blake256
};

View File

@ -31,7 +31,7 @@
#include <avr/pgmspace.h>
#include "hashfunction_descriptor.h"
extern const hfdesc_t blake28_desc;
extern const hfdesc_t blake32_desc;
extern const hfdesc_t blake224_desc;
extern const hfdesc_t blake256_desc;
#endif /* HFAL_BLAKE_SMALL_H_ */

View File

@ -150,21 +150,11 @@ void jh_encrypt(uint8_t* a){
for(i=0;i<32;++i){
rc[i] = pgm_read_byte(&(round_const_0[i]));
}
for(i=0;i<35;++i){
for(i=0;i<42;++i){
jh_round(a, rc);
jh_next_round_const(rc);
}
uint8_t r=0,x,y;
for(i=0; i<128; ++i){
if(i%4==0){
r = rc[i/4];
}
x = pgm_read_byte(((r&0x80)?sbox1:sbox0)+(a[i]>>4));
y = pgm_read_byte(((r&0x40)?sbox1:sbox0)+(a[i]&0xf));
a[i]=(x<<4)|y;
r<<=2;
}
/* degrouping */
#if DEBUG
cli_putstr_P(PSTR("\r\n== pre degroup ==\r\n"));

View File

@ -119,20 +119,10 @@ void jh_encrypt(uint8_t* a){
cli_hexdump_block(a, 128, 4, 16);
#endif
group(a);
for(i=0;i<35;++i){
for(i=0;i<42;++i){
jh_round(a, i);
}
uint8_t r=0;
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"));

View File

@ -238,6 +238,30 @@ def single_round(data, round)
return b
end
def next_rc(data)
a = Array.new
=begin
printf("\n== rc round ==\n\t")
4.times do |y|
8.times do |x|
printf("%02X ", data[8*y+x])
end
print("\n\t")
end
=end
32.times do |idx|
x,y=split_byte($lutbox[0][data[idx]])
a << x << y
# if(x==nil)or(y==nil)
# printf("DBG: idx=%2d, x=%2x, y=%2x", idx, x, y)
# end
end
a = permutation(a, 6)
b = Array.new
32.times {|idx| b << join_nibbles(a[2*idx],a[2*idx+1])}
return b
end
def encrypt(data)
=begin
print("\n== ENCRYPT ==\n")
@ -345,3 +369,20 @@ end
#=end
puts("")
c0 = [ 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 ]
rc = c0
42.times do |i|
printf("/* C_%02d: */\n", i)
4.times do |y|
printf("\t")
8.times do |x|
printf("0x%02x, ", rc[y*8+x])
end
printf("\n")
end
rc = next_rc(rc)
end

View File

@ -113,40 +113,214 @@ uint8_t jh_lutbox[] PROGMEM = {
};
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
/* C_00: */
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,
/* C_01: */
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,
/* C_02: */
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,
/* C_03: */
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,
/* C_04: */
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,
/* C_05: */
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,
/* C_06: */
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,
/* C_07: */
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,
/* C_08: */
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,
/* C_09: */
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,
/* C_10: */
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,
/* C_11: */
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,
/* C_12: */
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,
/* C_13: */
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,
/* C_14: */
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,
/* C_15: */
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,
/* C_16: */
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,
/* C_17: */
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,
/* C_18: */
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,
/* C_19: */
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,
/* C_20: */
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,
/* C_21: */
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,
/* C_22: */
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,
/* C_23: */
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,
/* C_24: */
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,
/* C_25: */
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,
/* C_26: */
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,
/* C_27: */
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,
/* C_28: */
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,
/* C_29: */
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,
/* C_30: */
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,
/* C_31: */
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,
/* C_32: */
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,
/* C_33: */
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,
/* C_34: */
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,
/* C_35: */
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,
/* C_36: */
0xf0, 0x37, 0xc5, 0xd9, 0x16, 0x23, 0x28, 0x8b,
0x7d, 0x03, 0x02, 0xc1, 0xb9, 0x41, 0xb7, 0x26,
0x76, 0xa9, 0x43, 0xb3, 0x72, 0x65, 0x9d, 0xcd,
0x7d, 0x6e, 0xf4, 0x08, 0xa1, 0x1b, 0x40, 0xc0,
/* C_37: */
0x2a, 0x30, 0x63, 0x54, 0xca, 0x3e, 0xa9, 0x0b,
0x0e, 0x97, 0xea, 0xeb, 0xce, 0xa0, 0xa6, 0xd7,
0xc6, 0x52, 0x23, 0x99, 0xe8, 0x85, 0xc6, 0x13,
0xde, 0x82, 0x49, 0x22, 0xc8, 0x92, 0xc4, 0x90,
/* C_38: */
0x3c, 0xa6, 0xcd, 0xd7, 0x88, 0xa5, 0xbd, 0xc5,
0xef, 0x2d, 0xce, 0xeb, 0x16, 0xbc, 0xa3, 0x1e,
0x0a, 0x0d, 0x2c, 0x7e, 0x99, 0x21, 0xb6, 0xf7,
0x1d, 0x33, 0xe2, 0x5d, 0xd2, 0xf3, 0xcf, 0x53,
/* C_39: */
0xf7, 0x25, 0x78, 0x72, 0x1d, 0xb5, 0x6b, 0xf8,
0xf4, 0x95, 0x38, 0xb0, 0xae, 0x6e, 0xa4, 0x70,
0xc2, 0xfb, 0x13, 0x39, 0xdd, 0x26, 0x33, 0x3f,
0x13, 0x5f, 0x7d, 0xef, 0x45, 0x37, 0x6e, 0xc0,
/* C_40: */
0xe4, 0x49, 0xa0, 0x3e, 0xab, 0x35, 0x9e, 0x34,
0x09, 0x5f, 0x8b, 0x4b, 0x55, 0xcd, 0x7a, 0xc7,
0xc0, 0xec, 0x65, 0x10, 0xf2, 0xc4, 0xcc, 0x79,
0xfa, 0x6b, 0x1f, 0xee, 0x6b, 0x18, 0xc5, 0x9e,
/* C_41: */
0x73, 0xbd, 0x69, 0x78, 0xc5, 0x9f, 0x2b, 0x21,
0x94, 0x49, 0xb3, 0x67, 0x70, 0xfb, 0x31, 0x3f,
0xbe, 0x2d, 0xa2, 0x8f, 0x6b, 0x04, 0x27, 0x5f,
0x07, 0x1a, 0x1b, 0x19, 0x3d, 0xde, 0x20, 0x72
};

View File

@ -46,10 +46,10 @@ char* algo_name = "Blake";
const hfdesc_t* algolist[] PROGMEM = {
(hfdesc_t*)&blake28_desc,
(hfdesc_t*)&blake32_desc,
(hfdesc_t*)&blake48_desc,
(hfdesc_t*)&blake64_desc,
(hfdesc_t*)&blake224_desc,
(hfdesc_t*)&blake256_desc,
(hfdesc_t*)&blake384_desc,
(hfdesc_t*)&blake512_desc,
NULL
};
@ -60,40 +60,44 @@ const hfdesc_t* algolist[] PROGMEM = {
void testrun_nessie_blake(void){
hfal_nessie_multiple(algolist);
}
void blake28_test(void* msg, uint32_t length_b){
hfal_test(&blake28_desc, msg, length_b);
void blake224_test(void* msg, uint32_t length_b){
hfal_test(&blake224_desc, msg, length_b);
}
void blake32_test(void* msg, uint32_t length_b){
hfal_test(&blake32_desc, msg, length_b);
void blake256_test(void* msg, uint32_t length_b){
hfal_test(&blake256_desc, msg, length_b);
}
void blake48_test(void* msg, uint32_t length_b){
hfal_test(&blake48_desc, msg, length_b);
void blake384_test(void* msg, uint32_t length_b){
hfal_test(&blake384_desc, msg, length_b);
}
void blake64_test(void* msg, uint32_t length_b){
hfal_test(&blake64_desc, msg, length_b);
void blake512_test(void* msg, uint32_t length_b){
hfal_test(&blake512_desc, msg, length_b);
}
void testrun_stdtest_blake(void){
uint8_t msg1[144];
memset(msg1, 0, 144);
blake28_test("", 8);
blake28_test(msg1, 576);
blake32_test("", 8);
blake32_test(msg1, 576);
blake48_test("", 8);
blake48_test(msg1, 1152);
blake64_test("", 8);
blake64_test(msg1, 1152);
blake224_test("", 0);
blake224_test("", 8);
blake224_test(msg1, 576);
blake256_test("", 0);
blake256_test("", 8);
blake256_test(msg1, 576);
blake384_test("", 0);
blake384_test("", 8);
blake384_test(msg1, 1152);
blake512_test("", 0);
blake512_test("", 8);
blake512_test(msg1, 1152);
}
void testshort(void){
blake32_test("", 8);
blake256_test("", 8);
}
void testlshort(void){
blake64_test("", 8);
blake512_test("", 8);
}
void test512_32(void){
@ -105,7 +109,7 @@ void test512_32(void){
0xDC, 0xDE, 0x57, 0x9A, 0x37, 0xE1, 0x50, 0xEF,
0xBE, 0xF5, 0x55, 0x5B, 0x4C, 0x1C, 0xB4, 0x04,
0x39, 0xD8, 0x35, 0xA7, 0x24, 0xE2, 0xFA, 0xE7 };
blake32_test(d, 512);
blake256_test(d, 512);
}
void performance_blake(void){
@ -150,7 +154,7 @@ int main (void){
cli_rx = (cli_rx_fpt)uart0_getc;
cli_tx = (cli_tx_fpt)uart0_putc;
shavs_algolist=(hfdesc_t**)algolist;
shavs_algo=(hfdesc_t*)&blake32_desc;
shavs_algo=(hfdesc_t*)&blake256_desc;
for(;;){
cli_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
cli_putstr(algo_name);

View File

@ -1,20 +1,20 @@
[Blake-28]
[Blake-224]
algo=a
file_0=testvectors/shavs/Blake/ShortMsgKAT_224.txt
file_1=testvectors/shavs/Blake/LongMsgKAT_224.txt
[Blake-32]
[Blake-256]
algo=b
file_0=testvectors/shavs/Blake/ShortMsgKAT_256.txt
file_1=testvectors/shavs/Blake/LongMsgKAT_256.txt
[Blake-48]
[Blake-384]
algo=c
file_0=testvectors/shavs/Blake/ShortMsgKAT_384.txt
file_1=testvectors/shavs/Blake/LongMsgKAT_384.txt
[Blake-64]
[Blake-512]
algo=d
file_0=testvectors/shavs/Blake/ShortMsgKAT_512.txt
file_1=testvectors/shavs/Blake/LongMsgKAT_512.txt