optimized cubehash a bit
This commit is contained in:
parent
25ccd391d2
commit
f078dc4f51
|
@ -28,12 +28,10 @@
|
||||||
|
|
||||||
#include "memxor.h"
|
#include "memxor.h"
|
||||||
#include "cubehash.h"
|
#include "cubehash.h"
|
||||||
|
#include "cubehash_rotates.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
static uint32_t rol32(uint32_t a, uint8_t r){
|
|
||||||
return (a<<r)|(a>>(32-r));
|
|
||||||
}
|
|
||||||
/*
|
/*
|
||||||
• Add x_0jklm into x_1jklm modulo 232 , for each (j, k, l, m).
|
• Add x_0jklm into x_1jklm modulo 232 , for each (j, k, l, m).
|
||||||
• Rotate x_0jklm upwards by 7 bits, for each (j, k, l, m).
|
• Rotate x_0jklm upwards by 7 bits, for each (j, k, l, m).
|
||||||
|
@ -52,9 +50,7 @@ static void cubehash_round(cubehash_ctx_t* ctx){
|
||||||
uint32_t t;
|
uint32_t t;
|
||||||
for(i=0; i<16; ++i){
|
for(i=0; i<16; ++i){
|
||||||
ctx->a[i+16] += ctx->a[i];
|
ctx->a[i+16] += ctx->a[i];
|
||||||
}
|
ctx->a[i] = rotate7left(ctx->a[i]);
|
||||||
for(i=0; i<16; ++i){
|
|
||||||
ctx->a[i] = rol32(ctx->a[i], 7);
|
|
||||||
}
|
}
|
||||||
for(i=0; i<8; ++i){
|
for(i=0; i<8; ++i){
|
||||||
t = ctx->a[i];
|
t = ctx->a[i];
|
||||||
|
@ -74,9 +70,7 @@ static void cubehash_round(cubehash_ctx_t* ctx){
|
||||||
}
|
}
|
||||||
for(i=0; i<16; ++i){
|
for(i=0; i<16; ++i){
|
||||||
ctx->a[i+16] += ctx->a[i];
|
ctx->a[i+16] += ctx->a[i];
|
||||||
}
|
ctx->a[i] = rotate11left(ctx->a[i]);
|
||||||
for(i=0; i<16; ++i){
|
|
||||||
ctx->a[i] = rol32(ctx->a[i], 11);
|
|
||||||
}
|
}
|
||||||
for(i=0; i<4; ++i){
|
for(i=0; i<4; ++i){
|
||||||
t = ctx->a[i];
|
t = ctx->a[i];
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/* cubehash_rotates.S */
|
||||||
|
/*
|
||||||
|
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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
.global rotate7left
|
||||||
|
rotate7left:
|
||||||
|
mov r0, r25
|
||||||
|
mov r25, r24
|
||||||
|
mov r24, r23
|
||||||
|
mov r23, r22
|
||||||
|
mov r22, r0
|
||||||
|
ror r0
|
||||||
|
ror r25
|
||||||
|
ror r24
|
||||||
|
ror r23
|
||||||
|
ror r22
|
||||||
|
ret
|
||||||
|
|
||||||
|
.global rotate11left
|
||||||
|
rotate11left:
|
||||||
|
mov r0, r25
|
||||||
|
mov r25, r24
|
||||||
|
mov r24, r23
|
||||||
|
mov r23, r22
|
||||||
|
mov r22, r0
|
||||||
|
rol r0
|
||||||
|
rol r23
|
||||||
|
rol r24
|
||||||
|
rol r25
|
||||||
|
rol r22
|
||||||
|
rol r0
|
||||||
|
rol r23
|
||||||
|
rol r24
|
||||||
|
rol r25
|
||||||
|
rol r22
|
||||||
|
rol r0
|
||||||
|
rol r23
|
||||||
|
rol r24
|
||||||
|
rol r25
|
||||||
|
rol r22
|
||||||
|
ret
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
/* cubehash_rotates.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 CUBEHASH_ROTATES_H_
|
||||||
|
#define CUBEHASH_ROTATES_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
uint32_t rotate7left(uint32_t a);
|
||||||
|
uint32_t rotate11left(uint32_t a);
|
||||||
|
|
||||||
|
#endif /* CUBEHASH_ROTATES_H_ */
|
|
@ -87,10 +87,6 @@ static uint8_t rc_comp[] PROGMEM = {
|
||||||
0xf1, 0xd0, 0x21, 0x78,
|
0xf1, 0xd0, 0x21, 0x78,
|
||||||
};
|
};
|
||||||
|
|
||||||
uint64_t rotl64(uint64_t a, uint8_t r){
|
|
||||||
return (a<<r)|(a>>(64-r));
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t r[5][5] PROGMEM = {
|
static uint8_t r[5][5] PROGMEM = {
|
||||||
{ ROT_CODE( 0), ROT_CODE(36), ROT_CODE( 3), ROT_CODE(41), ROT_CODE(18) },
|
{ ROT_CODE( 0), ROT_CODE(36), ROT_CODE( 3), ROT_CODE(41), ROT_CODE(18) },
|
||||||
{ ROT_CODE( 1), ROT_CODE(44), ROT_CODE(10), ROT_CODE(45), ROT_CODE( 2) },
|
{ ROT_CODE( 1), ROT_CODE(44), ROT_CODE(10), ROT_CODE(45), ROT_CODE( 2) },
|
||||||
|
|
|
@ -5,7 +5,7 @@ ALGO_NAME := CUBEHASH_C
|
||||||
HASHES += $(ALGO_NAME)
|
HASHES += $(ALGO_NAME)
|
||||||
|
|
||||||
$(ALGO_NAME)_DIR := cubehash/
|
$(ALGO_NAME)_DIR := cubehash/
|
||||||
$(ALGO_NAME)_OBJ := cubehash.o memxor.o
|
$(ALGO_NAME)_OBJ := cubehash.o cubehash_rotates.o memxor.o
|
||||||
$(ALGO_NAME)_TEST_BIN := main-cubehash-test.o hfal_cubehash.o $(CLI_STD) $(HFAL_STD)
|
$(ALGO_NAME)_TEST_BIN := main-cubehash-test.o hfal_cubehash.o $(CLI_STD) $(HFAL_STD)
|
||||||
$(ALGO_NAME)_NESSIE_TEST := test nessie
|
$(ALGO_NAME)_NESSIE_TEST := test nessie
|
||||||
$(ALGO_NAME)_PERFORMANCE_TEST := performance
|
$(ALGO_NAME)_PERFORMANCE_TEST := performance
|
||||||
|
|
Loading…
Reference in New Issue