more shabal
This commit is contained in:
parent
5c68d38237
commit
600e82c981
|
@ -57,13 +57,14 @@ def send_md(md_string)
|
||||||
$sp.print(md_string[i].chr)
|
$sp.print(md_string[i].chr)
|
||||||
# print("DBG s: "+ md_string[i].chr) if $debug
|
# print("DBG s: "+ md_string[i].chr) if $debug
|
||||||
if(i%20==19)
|
if(i%20==19)
|
||||||
sleep(0.1)
|
# sleep(0.1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def run_test(filename)
|
def run_test(filename)
|
||||||
errors = 0
|
errors = 0
|
||||||
|
line=1
|
||||||
if not File.exist?(filename)
|
if not File.exist?(filename)
|
||||||
puts("ERROR file "+filename+" does not exist!")
|
puts("ERROR file "+filename+" does not exist!")
|
||||||
end
|
end
|
||||||
|
@ -91,7 +92,8 @@ def run_test(filename)
|
||||||
b = (/[\s]*MD[\s]*=[\s]*([0-9a-fA-F]*).*/.match(avr_md))[1];
|
b = (/[\s]*MD[\s]*=[\s]*([0-9a-fA-F]*).*/.match(avr_md))[1];
|
||||||
a.upcase!
|
a.upcase!
|
||||||
b.upcase!
|
b.upcase!
|
||||||
puts("") if (pos%$linewidth==0 and $linewidth!=0)
|
printf("\n%4d: ", line) if (pos%$linewidth==0 and $linewidth!=0)
|
||||||
|
line += 1 if (pos%$linewidth==0 and $linewidth!=0)
|
||||||
#putc((a==b)?'*':'!')
|
#putc((a==b)?'*':'!')
|
||||||
if(a==b)
|
if(a==b)
|
||||||
putc('*')
|
putc('*')
|
||||||
|
@ -131,9 +133,9 @@ init_system()
|
||||||
for i in (5..(ARGV.size-1))
|
for i in (5..(ARGV.size-1))
|
||||||
errors = run_test(ARGV[i])
|
errors = run_test(ARGV[i])
|
||||||
if errors == 0
|
if errors == 0
|
||||||
puts("[ok]")
|
puts("\n[ok]")
|
||||||
else
|
else
|
||||||
puts("[errors: "+errors.to_s+"]")
|
puts("\n[errors: "+errors.to_s+"]")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
$sp.print("EXIT\r");
|
$sp.print("EXIT\r");
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
# Makefile for Skein
|
# Makefile for Skein
|
||||||
ALGO_NAME := SHABAL_C
|
ALGO_NAME := SHABAL
|
||||||
|
|
||||||
# comment out the following line for removement of Skein from the build process
|
# comment out the following line for removement of Skein from the build process
|
||||||
HASHES += $(ALGO_NAME)
|
HASHES += $(ALGO_NAME)
|
||||||
|
|
||||||
|
|
||||||
$(ALGO_NAME)_OBJ := shabal.o
|
$(ALGO_NAME)_OBJ := shabal-asm.o shabal192-asm.o shabal224-asm.o \
|
||||||
|
shabal256-asm.o shabal384-asm.o shabal512-asm.o
|
||||||
$(ALGO_NAME)_TEST_BIN := main-shabal-test.o debug.o uart.o hexdigit_tab.o \
|
$(ALGO_NAME)_TEST_BIN := main-shabal-test.o debug.o uart.o hexdigit_tab.o \
|
||||||
dbz_strings.o nessie_common.o cli.o string-extras.o performance_test.o \
|
dbz_strings.o nessie_common.o cli.o string-extras.o performance_test.o \
|
||||||
nessie_hash_test.o hfal-basic.o hfal_shabal.o shavs.o
|
nessie_hash_test.o hfal-basic.o hfal_shabal.o shavs.o
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
# Makefile for Skein
|
||||||
|
ALGO_NAME := SHABAL_C
|
||||||
|
|
||||||
|
# comment out the following line for removement of Skein from the build process
|
||||||
|
HASHES += $(ALGO_NAME)
|
||||||
|
|
||||||
|
|
||||||
|
$(ALGO_NAME)_OBJ := shabal.o shabal192.o shabal224.o shabal256.o shabal384.o shabal512.o
|
||||||
|
$(ALGO_NAME)_TEST_BIN := main-shabal-test.o debug.o uart.o hexdigit_tab.o \
|
||||||
|
dbz_strings.o nessie_common.o cli.o string-extras.o performance_test.o \
|
||||||
|
nessie_hash_test.o hfal-basic.o hfal_shabal.o shavs.o
|
||||||
|
$(ALGO_NAME)_NESSIE_TEST := test nessie
|
||||||
|
$(ALGO_NAME)_PERFORMANCE_TEST := performance
|
||||||
|
|
|
@ -0,0 +1,739 @@
|
||||||
|
/* shabal-asm.S */
|
||||||
|
/*
|
||||||
|
This file is part of the AVR-Crypto-Lib.
|
||||||
|
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* \file shabal-asm.S
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \date 2009-04-27
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "avr-asm-macros.S"
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
void shabal_p(shabal_ctx_t* ctx, const void* m){
|
||||||
|
uint8_t i,j;
|
||||||
|
for(i=0;i<16;++i){
|
||||||
|
ctx->b[i] = ROTL32(ctx->b[i],17);
|
||||||
|
}
|
||||||
|
for(j=0;j<SHABAL_P;++j){
|
||||||
|
for(i=0;i<16;++i){
|
||||||
|
ctx->a[(i+16*j)%SHABAL_R] =
|
||||||
|
shabal_u(ctx->a[(i+16*j)%SHABAL_R]
|
||||||
|
^ shabal_v(ROTL32(ctx->a[(i+16*j+SHABAL_R-1)%SHABAL_R],15))
|
||||||
|
^ ctx->c[(8-i+16)%16])
|
||||||
|
^ ctx->b[(i+SHABAL_O1)%16]
|
||||||
|
^ ((ctx->b[(i+SHABAL_O2)%16]) & ~(ctx->b[(i+SHABAL_O3)%16]))
|
||||||
|
^ ((uint32_t*)m)[i];
|
||||||
|
ctx->b[i] = ROTL32(ctx->b[i], 1) ^ ~(ctx->a[(i+16*j)%SHABAL_R]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(j=0;j<36;++j){
|
||||||
|
ctx->a[j%SHABAL_R] += ctx->c[(j+3)%16];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
MB0 = 2
|
||||||
|
MB1 = 3
|
||||||
|
AB0 = 4
|
||||||
|
AB1 = 5
|
||||||
|
BB0 = 6
|
||||||
|
BB1 = 7
|
||||||
|
CB0 = 8
|
||||||
|
CB1 = 9
|
||||||
|
AL0 = 10
|
||||||
|
AL1 = 11
|
||||||
|
AL2 = 12
|
||||||
|
AL3 = 13
|
||||||
|
A0 = 14
|
||||||
|
A1 = 15
|
||||||
|
A2 = 16
|
||||||
|
A3 = 17
|
||||||
|
B0 = 18
|
||||||
|
B1 = 19
|
||||||
|
B2 = 20
|
||||||
|
B3 = 21
|
||||||
|
I = 22
|
||||||
|
J = 23
|
||||||
|
T0 = 26
|
||||||
|
T1 = 27
|
||||||
|
T2 = 28
|
||||||
|
T3 = 29
|
||||||
|
/*
|
||||||
|
* param ctx: r24:r25
|
||||||
|
* param m: r22:r23
|
||||||
|
*/
|
||||||
|
; .global shabal_p
|
||||||
|
shabal_p:
|
||||||
|
push_range 2, 17
|
||||||
|
push r28
|
||||||
|
push r29
|
||||||
|
movw MB0, r22
|
||||||
|
movw r30, r24
|
||||||
|
adiw r30, 8
|
||||||
|
ld BB0, Z+
|
||||||
|
ld BB1, Z+
|
||||||
|
ld CB0, Z+
|
||||||
|
ld CB1, Z+
|
||||||
|
movw AB0, r30
|
||||||
|
movw r30, BB0
|
||||||
|
adiw r30, 16*4-1
|
||||||
|
adiw r30, 1
|
||||||
|
ldi r24, 16
|
||||||
|
1:
|
||||||
|
ld A3, -Z
|
||||||
|
ld A2, -Z
|
||||||
|
ld A1, -Z
|
||||||
|
ld A0, -Z
|
||||||
|
mov r0, A3
|
||||||
|
rol r0
|
||||||
|
rol A0
|
||||||
|
rol A1
|
||||||
|
rol A2
|
||||||
|
rol A3
|
||||||
|
std Z+0, A2
|
||||||
|
std Z+1, A3
|
||||||
|
std Z+2, A0
|
||||||
|
std Z+3, A1
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
movw B0, A2
|
||||||
|
movw B2, A0
|
||||||
|
/* load ctx->a[(i+16*j-1)%12]*/
|
||||||
|
movw r26, AB0
|
||||||
|
adiw r26, 4*11
|
||||||
|
ld AL0, X+
|
||||||
|
ld AL1, X+
|
||||||
|
ld AL2, X+
|
||||||
|
ld AL3, X+
|
||||||
|
clr I
|
||||||
|
clr J
|
||||||
|
1:
|
||||||
|
/* ROTL32(AL, 15)*/
|
||||||
|
movw T0, AL2
|
||||||
|
movw T2, AL0
|
||||||
|
mov r0, T0
|
||||||
|
ror r0
|
||||||
|
ror T3
|
||||||
|
ror T2
|
||||||
|
ror T1
|
||||||
|
ror T0
|
||||||
|
movw AL0, T0
|
||||||
|
movw AL2, T2
|
||||||
|
/* apply V to AL */
|
||||||
|
movw A0, AL0
|
||||||
|
movw A2, AL2
|
||||||
|
lsl A0
|
||||||
|
rol A1
|
||||||
|
rol A2
|
||||||
|
rol A3
|
||||||
|
lsl A0
|
||||||
|
rol A1
|
||||||
|
rol A2
|
||||||
|
rol A3
|
||||||
|
add A0, AL0
|
||||||
|
adc A1, AL1
|
||||||
|
adc A2, AL2
|
||||||
|
adc A3, AL3
|
||||||
|
/* xor in ctx->c[(8-i+16)%16] */
|
||||||
|
ldi T0, 24
|
||||||
|
sub T0, I
|
||||||
|
andi T0, 0x0f
|
||||||
|
lsl T0
|
||||||
|
lsl T0
|
||||||
|
movw r30, CB0
|
||||||
|
add r30, T0
|
||||||
|
adc r31, r1
|
||||||
|
ld r0, Z+
|
||||||
|
eor A0, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor A1, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor A2, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor A3, r0
|
||||||
|
/* xor in ctx->a[(i+16*j)%12] */
|
||||||
|
mov T0, J
|
||||||
|
swap T0 /* *=16 */
|
||||||
|
add T0, I
|
||||||
|
ldi r30, lo8(mod12table)
|
||||||
|
ldi r31, hi8(mod12table)
|
||||||
|
add r30, T0
|
||||||
|
adc r31, r1
|
||||||
|
lpm T0, Z
|
||||||
|
movw r30, AB0
|
||||||
|
add r30, T0
|
||||||
|
adc r31, r1
|
||||||
|
movw T2, r30
|
||||||
|
ld r0, Z+
|
||||||
|
eor A0, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor A1, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor A2, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor A3, r0
|
||||||
|
/* AL = 3*A */
|
||||||
|
movw AL0, A0
|
||||||
|
movw AL2, A2
|
||||||
|
lsl AL0
|
||||||
|
rol AL1
|
||||||
|
rol AL2
|
||||||
|
rol AL3
|
||||||
|
add AL0, A0
|
||||||
|
adc AL1, A1
|
||||||
|
adc AL2, A2
|
||||||
|
adc AL3, A3
|
||||||
|
/* xor in ctx->b[(i+13)%16] */
|
||||||
|
ldi T0, 13
|
||||||
|
add T0, I
|
||||||
|
andi T0, 0x0f
|
||||||
|
lsl T0
|
||||||
|
lsl T0
|
||||||
|
movw r30, BB0
|
||||||
|
add r30, T0
|
||||||
|
adc r31, r1
|
||||||
|
ld r0, Z+
|
||||||
|
eor AL0, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor AL1, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor AL2, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor AL3, r0
|
||||||
|
/* load ctx->b[(i+9)%16] into A */
|
||||||
|
ldi T0, 9
|
||||||
|
add T0, I
|
||||||
|
andi T0, 0x0f
|
||||||
|
lsl T0
|
||||||
|
lsl T0
|
||||||
|
movw r30, BB0
|
||||||
|
add r30, T0
|
||||||
|
adc r31, r1
|
||||||
|
ld A0, Z+
|
||||||
|
ld A1, Z+
|
||||||
|
ld A2, Z+
|
||||||
|
ld A3, Z+
|
||||||
|
/* and in ~(ctx->b[(i+6)%16]) */
|
||||||
|
ldi T0, 6
|
||||||
|
add T0, I
|
||||||
|
andi T0, 0x0f
|
||||||
|
lsl T0
|
||||||
|
lsl T0
|
||||||
|
movw r30, BB0
|
||||||
|
add r30, T0
|
||||||
|
adc r31, r1
|
||||||
|
ld r0, Z+
|
||||||
|
com r0
|
||||||
|
and A0, r0
|
||||||
|
ld r0, Z+
|
||||||
|
com r0
|
||||||
|
and A1, r0
|
||||||
|
ld r0, Z+
|
||||||
|
com r0
|
||||||
|
and A2, r0
|
||||||
|
ld r0, Z+
|
||||||
|
com r0
|
||||||
|
and A3, r0
|
||||||
|
/* xor A into AL */
|
||||||
|
eor AL0, A0
|
||||||
|
eor AL1, A1
|
||||||
|
eor AL2, A2
|
||||||
|
eor AL3, A3
|
||||||
|
/* xor m[i] into AL */
|
||||||
|
mov T0, I
|
||||||
|
lsl T0
|
||||||
|
lsl T0
|
||||||
|
movw r30, MB0
|
||||||
|
add r30, T0
|
||||||
|
adc r31, r1
|
||||||
|
ld r0, Z+
|
||||||
|
eor AL0, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor AL1, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor AL2, r0
|
||||||
|
ld r0, Z+
|
||||||
|
eor AL3, r0
|
||||||
|
/* A (AL) is done, now store it */
|
||||||
|
movw r30, T2
|
||||||
|
st Z+, AL0
|
||||||
|
st Z+, AL1
|
||||||
|
st Z+, AL2
|
||||||
|
st Z+, AL3
|
||||||
|
/* process ctx->b[i] */
|
||||||
|
/* ROTL32(b, 1)*/
|
||||||
|
mov r0, B3
|
||||||
|
rol r0
|
||||||
|
rol B0
|
||||||
|
rol B1
|
||||||
|
rol B2
|
||||||
|
rol B3
|
||||||
|
/* xor in ~(ctx->a[(i+16*j)%SHABAL_R]) */
|
||||||
|
movw A0, AL0
|
||||||
|
movw A2, AL2
|
||||||
|
com A0
|
||||||
|
com A1
|
||||||
|
com A2
|
||||||
|
com A3
|
||||||
|
eor B0, A0
|
||||||
|
eor B1, A1
|
||||||
|
eor B2, A2
|
||||||
|
eor B3, A3
|
||||||
|
/* store B */
|
||||||
|
movw r30, BB0
|
||||||
|
mov T0, I
|
||||||
|
lsl T0
|
||||||
|
lsl T0
|
||||||
|
add r30, T0
|
||||||
|
adc r31, r1
|
||||||
|
st Z+, B0
|
||||||
|
st Z+, B1
|
||||||
|
st Z+, B2
|
||||||
|
st Z+, B3
|
||||||
|
inc I
|
||||||
|
cpi I, 16
|
||||||
|
brne local_reload
|
||||||
|
inc J
|
||||||
|
cpi J, 3
|
||||||
|
brne global_reload
|
||||||
|
rjmp addition
|
||||||
|
global_reload:
|
||||||
|
clr I
|
||||||
|
local_reload:
|
||||||
|
mov T0, I
|
||||||
|
lsl T0
|
||||||
|
lsl T0
|
||||||
|
movw r30, BB0
|
||||||
|
add r30, T0
|
||||||
|
adc r31, r1
|
||||||
|
ld B0, Z+
|
||||||
|
ld B1, Z+
|
||||||
|
ld B2, Z+
|
||||||
|
ld B3, Z+
|
||||||
|
|
||||||
|
rjmp 1b
|
||||||
|
addition:
|
||||||
|
clr J
|
||||||
|
movw r30, AB0
|
||||||
|
movw r26, CB0
|
||||||
|
adiw r26, 3*4
|
||||||
|
1:
|
||||||
|
/* J = 0..11 */
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
add A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
inc J
|
||||||
|
cpi J, 12
|
||||||
|
brne 1b
|
||||||
|
/* J = 12 */
|
||||||
|
movw r30, AB0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
add A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
inc J
|
||||||
|
/* J= 13..23*/
|
||||||
|
movw r26, CB0
|
||||||
|
1:
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
add A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
inc J
|
||||||
|
cpi J, 24
|
||||||
|
brne 1b
|
||||||
|
/* J= 24..28*/
|
||||||
|
movw r30, AB0
|
||||||
|
1:
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
add A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
inc J
|
||||||
|
cpi J, 29
|
||||||
|
brne 1b
|
||||||
|
|
||||||
|
/* J= 29..35*/
|
||||||
|
movw r26, CB0
|
||||||
|
1:
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
add A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
ld AL0, X+
|
||||||
|
ld A0, Z
|
||||||
|
adc A0, AL0
|
||||||
|
st Z+, A0
|
||||||
|
inc J
|
||||||
|
cpi J, 36
|
||||||
|
brne 1b
|
||||||
|
exit:
|
||||||
|
pop r29
|
||||||
|
pop r28
|
||||||
|
pop_range 2, 17
|
||||||
|
ret
|
||||||
|
|
||||||
|
mod12table:
|
||||||
|
.byte 0, 4, 8, 12, 16, 20, 24, 28
|
||||||
|
.byte 32, 36, 40, 44, 0, 4, 8, 12
|
||||||
|
.byte 16, 20, 24, 28, 32, 36, 40, 44
|
||||||
|
.byte 0, 4, 8, 12, 16, 20, 24, 28
|
||||||
|
.byte 32, 36, 40, 44, 0, 4, 8, 12
|
||||||
|
.byte 16, 20, 24, 28, 32, 36, 40, 44
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
void shabal_nextBlock(shabal_ctx_t* ctx, const void* block){
|
||||||
|
uint8_t i;
|
||||||
|
uint32_t* t;
|
||||||
|
for(i=0;i<16;++i){
|
||||||
|
ctx->b[i] += ((uint32_t*)block)[i];
|
||||||
|
}
|
||||||
|
ctx->a[0] ^= ctx->w.w32[0];
|
||||||
|
ctx->a[1] ^= ctx->w.w32[1];
|
||||||
|
shabal_p(ctx, block);
|
||||||
|
for(i=0;i<16;++i){
|
||||||
|
ctx->c[i] -= ((uint32_t*)block)[i];
|
||||||
|
}
|
||||||
|
ctx->w.w64++;
|
||||||
|
t = ctx->c;
|
||||||
|
ctx->c = ctx->b;
|
||||||
|
ctx->b = t;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* param ctx: r24:r25
|
||||||
|
* param block: r22:r23
|
||||||
|
*/
|
||||||
|
MB0 = 14
|
||||||
|
MB1 = 15
|
||||||
|
CTX0 = 16
|
||||||
|
CTX1 = 17
|
||||||
|
.global shabal_nextBlock
|
||||||
|
shabal_nextBlock:
|
||||||
|
push_range 14, 17
|
||||||
|
movw CTX0, r24
|
||||||
|
movw MB0, r22
|
||||||
|
/* xor W into A and increment W */
|
||||||
|
movw r30, CTX0
|
||||||
|
ldi r19, 8
|
||||||
|
sec
|
||||||
|
1:
|
||||||
|
ld r20, Z
|
||||||
|
ldd r21, Z+(8+4)
|
||||||
|
eor r21, r20
|
||||||
|
std Z+(8+4), r21
|
||||||
|
adc r20, r1
|
||||||
|
st Z+, r20
|
||||||
|
dec r19
|
||||||
|
brne 1b
|
||||||
|
/* add block to ctx->b */
|
||||||
|
ld r26, Z+
|
||||||
|
ld r27, Z
|
||||||
|
movw r30, MB0
|
||||||
|
ldi r19, 16
|
||||||
|
1:
|
||||||
|
ld r0, X
|
||||||
|
ld r18, Z+
|
||||||
|
add r0, r18
|
||||||
|
st X+, r0
|
||||||
|
ld r0, X
|
||||||
|
ld r18, Z+
|
||||||
|
adc r0, r18
|
||||||
|
st X+, r0
|
||||||
|
ld r0, X
|
||||||
|
ld r18, Z+
|
||||||
|
adc r0, r18
|
||||||
|
st X+, r0
|
||||||
|
ld r0, X
|
||||||
|
ld r18, Z+
|
||||||
|
adc r0, r18
|
||||||
|
st X+, r0
|
||||||
|
dec r19
|
||||||
|
brne 1b
|
||||||
|
/* call shbal_p */
|
||||||
|
rcall shabal_p
|
||||||
|
/* sub block from ctx->c */
|
||||||
|
movw r30, CTX0
|
||||||
|
adiw r30, 8+2
|
||||||
|
ld r26, Z+
|
||||||
|
ld r27, Z
|
||||||
|
movw r30, MB0
|
||||||
|
ldi r19, 16
|
||||||
|
1:
|
||||||
|
ld r0, X
|
||||||
|
ld r18, Z+
|
||||||
|
sub r0, r18
|
||||||
|
st X+, r0
|
||||||
|
ld r0, X
|
||||||
|
ld r18, Z+
|
||||||
|
sbc r0, r18
|
||||||
|
st X+, r0
|
||||||
|
ld r0, X
|
||||||
|
ld r18, Z+
|
||||||
|
sbc r0, r18
|
||||||
|
st X+, r0
|
||||||
|
ld r0, X
|
||||||
|
ld r18, Z+
|
||||||
|
sbc r0, r18
|
||||||
|
st X+, r0
|
||||||
|
dec r19
|
||||||
|
brne 1b
|
||||||
|
/* xchange ctx->b with ctx->c*/
|
||||||
|
movw r30, CTX0
|
||||||
|
ldd r22, Z+8
|
||||||
|
ldd r23, Z+9
|
||||||
|
ldd r24, Z+10
|
||||||
|
ldd r25, Z+11
|
||||||
|
std Z+10, r22
|
||||||
|
std Z+11, r23
|
||||||
|
std Z+8, r24
|
||||||
|
std Z+9, r25
|
||||||
|
pop_range 14, 17
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
void shabal_lastBlock(shabal_ctx_t* ctx, const void* block, uint16_t length_b){
|
||||||
|
uint8_t i,j;
|
||||||
|
uint32_t* t;
|
||||||
|
uint8_t buffer[64];
|
||||||
|
while(length_b>=SHABAL_BLOCKSIZE){
|
||||||
|
shabal_nextBlock(ctx, block);
|
||||||
|
block = (uint8_t*)block + SHABAL_BLOCKSIZE_B;
|
||||||
|
length_b -= SHABAL_BLOCKSIZE;
|
||||||
|
}
|
||||||
|
memset(buffer, 0, 64);
|
||||||
|
memcpy(buffer, block, (length_b+7)/8);
|
||||||
|
buffer[length_b/8] |= 0x80>>(length_b%8);
|
||||||
|
for(i=0;i<16;++i){
|
||||||
|
ctx->b[i] += ((uint32_t*)buffer)[i];
|
||||||
|
}
|
||||||
|
for(j=0; j<4;++j){
|
||||||
|
ctx->a[0] ^= ctx->w.w32[0];
|
||||||
|
ctx->a[1] ^= ctx->w.w32[1];
|
||||||
|
shabal_p(ctx, buffer);
|
||||||
|
t = ctx->c;
|
||||||
|
ctx->c = ctx->b;
|
||||||
|
ctx->b = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
I = 16
|
||||||
|
LEN0 = 16
|
||||||
|
LEN1 = 17
|
||||||
|
CTX0 = 14
|
||||||
|
CTX1 = 15
|
||||||
|
MB0 = 12
|
||||||
|
MB1 = 13
|
||||||
|
/*
|
||||||
|
* param ctx: r24:r25
|
||||||
|
* param block: r22:r23
|
||||||
|
* param length_b: r20:r21
|
||||||
|
*/
|
||||||
|
.global shabal_lastBlock
|
||||||
|
shabal_lastBlock:
|
||||||
|
push_range 12, 17
|
||||||
|
movw CTX0, r24
|
||||||
|
movw MB0, r22
|
||||||
|
movw LEN0, r20
|
||||||
|
1:
|
||||||
|
cpi LEN1, 0x02
|
||||||
|
brlo 2f
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MB0
|
||||||
|
rcall shabal_nextBlock
|
||||||
|
subi LEN1, 0x02
|
||||||
|
ldi r18, 64
|
||||||
|
add MB0, r18
|
||||||
|
adc MB1, r1
|
||||||
|
rjmp 1b
|
||||||
|
2:
|
||||||
|
stack_alloc_large 64
|
||||||
|
adiw r30, 1 /* Z points at buffer */
|
||||||
|
movw r26, MB0
|
||||||
|
/* r24 = LEN/8*/
|
||||||
|
movw r24, LEN0
|
||||||
|
lsr r25
|
||||||
|
ror r24
|
||||||
|
lsr r24
|
||||||
|
lsr r24
|
||||||
|
ldi r25, 64-1
|
||||||
|
sub r25, r24
|
||||||
|
tst r24
|
||||||
|
breq 32f
|
||||||
|
31:
|
||||||
|
ld r0, X+
|
||||||
|
st Z+, r0
|
||||||
|
dec r24
|
||||||
|
brne 31b
|
||||||
|
32:
|
||||||
|
ldi r18, 0x80
|
||||||
|
andi LEN0, 0x07
|
||||||
|
breq append_0x80
|
||||||
|
ld r0, X+
|
||||||
|
33:
|
||||||
|
lsr r18
|
||||||
|
dec LEN0
|
||||||
|
brne 33b
|
||||||
|
or r0, r18
|
||||||
|
st Z+, r0
|
||||||
|
rjmp append_zeros
|
||||||
|
append_0x80:
|
||||||
|
st Z+, r18
|
||||||
|
append_zeros:
|
||||||
|
tst r25
|
||||||
|
breq 4f
|
||||||
|
34: st Z+, r1
|
||||||
|
dec r25
|
||||||
|
brne 34b
|
||||||
|
4:
|
||||||
|
sbiw r30, 63
|
||||||
|
sbiw r30, 1
|
||||||
|
movw MB0, r30
|
||||||
|
movw r26, CTX0
|
||||||
|
adiw r26, 8
|
||||||
|
ld r24, X+
|
||||||
|
ld r25, X
|
||||||
|
movw r26, r24
|
||||||
|
ldi r18, 16
|
||||||
|
41:
|
||||||
|
ld r24, X
|
||||||
|
ld r25, Z+
|
||||||
|
add r24, r25
|
||||||
|
st X+, r24
|
||||||
|
ld r24, X
|
||||||
|
ld r25, Z+
|
||||||
|
adc r24, r25
|
||||||
|
st X+, r24
|
||||||
|
ld r24, X
|
||||||
|
ld r25, Z+
|
||||||
|
adc r24, r25
|
||||||
|
st X+, r24
|
||||||
|
ld r24, X
|
||||||
|
ld r25, Z+
|
||||||
|
adc r24, r25
|
||||||
|
st X+, r24
|
||||||
|
dec r18
|
||||||
|
brne 41b
|
||||||
|
/* final loop */
|
||||||
|
ldi I, 4
|
||||||
|
5:
|
||||||
|
/* xor W into A */
|
||||||
|
movw r30, CTX0
|
||||||
|
ldi r19, 8
|
||||||
|
51:
|
||||||
|
ld r24, Z+
|
||||||
|
ldd r25, Z+(8+4-1)
|
||||||
|
eor r24, r25
|
||||||
|
std Z+(8+4-1), r24
|
||||||
|
dec r19
|
||||||
|
brne 51b
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MB0
|
||||||
|
rcall shabal_p
|
||||||
|
movw r30, CTX0
|
||||||
|
ldd r22, Z+8
|
||||||
|
ldd r23, Z+9
|
||||||
|
ldd r24, Z+10
|
||||||
|
ldd r25, Z+11
|
||||||
|
std Z+10, r22
|
||||||
|
std Z+11, r23
|
||||||
|
std Z+8, r24
|
||||||
|
std Z+9, r25
|
||||||
|
dec I
|
||||||
|
brne 5b
|
||||||
|
|
||||||
|
stack_free_large 64
|
||||||
|
pop_range 12, 17
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
271
shabal.c
271
shabal.c
|
@ -27,7 +27,6 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "shabal.h"
|
#include "shabal.h"
|
||||||
#include <avr/pgmspace.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define SHABAL_O1 13
|
#define SHABAL_O1 13
|
||||||
|
@ -53,193 +52,22 @@ void shabal_p(shabal_ctx_t* ctx, const void* m){
|
||||||
for(i=0;i<16;++i){
|
for(i=0;i<16;++i){
|
||||||
ctx->b[i] = ROTL32(ctx->b[i],17);
|
ctx->b[i] = ROTL32(ctx->b[i],17);
|
||||||
}
|
}
|
||||||
for(j=0;j<SHABAL_P;++j){
|
for(j=0;j<SHABAL_P;j++){
|
||||||
for(i=0;i<16;++i){
|
for(i=0;i<16;++i){
|
||||||
ctx->a[(i+16*j)%SHABAL_R] =
|
ctx->a[(i+j*16)%SHABAL_R] =
|
||||||
shabal_u(ctx->a[(i+16*j)%SHABAL_R]
|
shabal_u(ctx->a[(i+j*16)%SHABAL_R]
|
||||||
^ shabal_v(ROTL32(ctx->a[(i+16*j+SHABAL_R-1)%SHABAL_R],15))
|
^ shabal_v(ROTL32(ctx->a[(i+j*16+SHABAL_R-1)%SHABAL_R],15))
|
||||||
^ ctx->c[(8-i+16)%16])
|
^ ctx->c[(8-i+16)%16])
|
||||||
^ ctx->b[(i+SHABAL_O1)%16]
|
^ ctx->b[(i+SHABAL_O1)%16]
|
||||||
^ ((ctx->b[(i+SHABAL_O2)%16]) & ~(ctx->b[(i+SHABAL_O3)%16]))
|
^ ((ctx->b[(i+SHABAL_O2)%16]) & ~(ctx->b[(i+SHABAL_O3)%16]))
|
||||||
^ ((uint32_t*)m)[i];
|
^ ((uint32_t*)m)[i];
|
||||||
ctx->b[i] = ROTL32(ctx->b[i], 1) ^ ~(ctx->a[(i+16*j)%SHABAL_R]);
|
ctx->b[i] = ROTL32(ctx->b[i], 1) ^ ~(ctx->a[(i+j*16)%SHABAL_R]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for(j=0;j<36;++j){
|
for(j=0;j<36;++j){
|
||||||
ctx->a[j%SHABAL_R] += ctx->c[(j+3)%16];
|
ctx->a[j%SHABAL_R] += ctx->c[(j+3)%16];
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
for (j=0; j<36; j++){
|
|
||||||
ctx->a[(36 - 1 - j)%12] =
|
|
||||||
ctx->a[(36 - 1 - j) % 12]
|
|
||||||
+ ctx->c[(36 * 16 + 6 - j) % 16];
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t shabal192_iv[] PROGMEM = {
|
|
||||||
/* A */
|
|
||||||
0xFD749ED4, 0xB798E530, 0x33904B6F, 0x46BDA85E,
|
|
||||||
0x076934B4, 0x454B4058, 0x77F74527, 0xFB4CF465,
|
|
||||||
0x62931DA9, 0xE778C8DB, 0x22B3998E, 0xAC15CFB9,
|
|
||||||
/* B */
|
|
||||||
0x58BCBAC4, 0xEC47A08E, 0xAEE933B2, 0xDFCBC824,
|
|
||||||
0xA7944804, 0xBF65BDB0, 0x5A9D4502, 0x59979AF7,
|
|
||||||
0xC5CEA54E, 0x4B6B8150, 0x16E71909, 0x7D632319,
|
|
||||||
0x930573A0, 0xF34C63D1, 0xCAF914B4, 0xFDD6612C,
|
|
||||||
/* C */
|
|
||||||
0x61550878, 0x89EF2B75, 0xA1660C46, 0x7EF3855B,
|
|
||||||
0x7297B58C, 0x1BC67793, 0x7FB1C723, 0xB66FC640,
|
|
||||||
0x1A48B71C, 0xF0976D17, 0x088CE80A, 0xA454EDF3,
|
|
||||||
0x1C096BF4, 0xAC76224B, 0x5215781C, 0xCD5D2669
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t shabal224_iv[] PROGMEM = {
|
|
||||||
/* A */
|
|
||||||
0xA5201467, 0xA9B8D94A, 0xD4CED997, 0x68379D7B,
|
|
||||||
0xA7FC73BA, 0xF1A2546B, 0x606782BF, 0xE0BCFD0F,
|
|
||||||
0x2F25374E, 0x069A149F, 0x5E2DFF25, 0xFAECF061,
|
|
||||||
/* B */
|
|
||||||
0xEC9905D8, 0xF21850CF, 0xC0A746C8, 0x21DAD498,
|
|
||||||
0x35156EEB, 0x088C97F2, 0x26303E40, 0x8A2D4FB5,
|
|
||||||
0xFEEE44B6, 0x8A1E9573, 0x7B81111A, 0xCBC139F0,
|
|
||||||
0xA3513861, 0x1D2C362E, 0x918C580E, 0xB58E1B9C,
|
|
||||||
/* C */
|
|
||||||
0xE4B573A1, 0x4C1A0880, 0x1E907C51, 0x04807EFD,
|
|
||||||
0x3AD8CDE5, 0x16B21302, 0x02512C53, 0x2204CB18,
|
|
||||||
0x99405F2D, 0xE5B648A1, 0x70AB1D43, 0xA10C25C2,
|
|
||||||
0x16F1AC05, 0x38BBEB56, 0x9B01DC60, 0xB1096D83
|
|
||||||
};
|
|
||||||
|
|
||||||
uint32_t shabal256_iv[] PROGMEM = {
|
|
||||||
/* A */
|
|
||||||
0x52F84552, 0xE54B7999, 0x2D8EE3EC, 0xB9645191,
|
|
||||||
0xE0078B86, 0xBB7C44C9, 0xD2B5C1CA, 0xB0D2EB8C,
|
|
||||||
0x14CE5A45, 0x22AF50DC, 0xEFFDBC6B, 0xEB21B74A,
|
|
||||||
/* B */
|
|
||||||
0xB555C6EE, 0x3E710596, 0xA72A652F, 0x9301515F,
|
|
||||||
0xDA28C1FA, 0x696FD868, 0x9CB6BF72, 0x0AFE4002,
|
|
||||||
0xA6E03615, 0x5138C1D4, 0xBE216306, 0xB38B8890,
|
|
||||||
0x3EA8B96B, 0x3299ACE4, 0x30924DD4, 0x55CB34A5,
|
|
||||||
/* C */
|
|
||||||
0xB405F031, 0xC4233EBA, 0xB3733979, 0xC0DD9D55,
|
|
||||||
0xC51C28AE, 0xA327B8E1, 0x56C56167, 0xED614433,
|
|
||||||
0x88B59D60, 0x60E2CEBA, 0x758B4B8B, 0x83E82A7F,
|
|
||||||
0xBC968828, 0xE6E00BF7, 0xBA839E55, 0x9B491C60
|
|
||||||
};
|
|
||||||
|
|
||||||
uint32_t shabal384_iv[] PROGMEM = {
|
|
||||||
/* A */
|
|
||||||
0xC8FCA331, 0xE55C504E, 0x003EBF26, 0xBB6B8D83,
|
|
||||||
0x7B0448C1, 0x41B82789, 0x0A7C9601, 0x8D659CFF,
|
|
||||||
0xB6E2673E, 0xCA54C77B, 0x1460FD7E, 0x3FCB8F2D,
|
|
||||||
/* B */
|
|
||||||
0x527291FC, 0x2A16455F, 0x78E627E5, 0x944F169F,
|
|
||||||
0x1CA6F016, 0xA854EA25, 0x8DB98ABE, 0xF2C62641,
|
|
||||||
0x30117DCB, 0xCF5C4309, 0x93711A25, 0xF9F671B8,
|
|
||||||
0xB01D2116, 0x333F4B89, 0xB285D165, 0x86829B36,
|
|
||||||
/* C */
|
|
||||||
0xF764B11A, 0x76172146, 0xCEF6934D, 0xC6D28399,
|
|
||||||
0xFE095F61, 0x5E6018B4, 0x5048ECF5, 0x51353261,
|
|
||||||
0x6E6E36DC, 0x63130DAD, 0xA9C69BD6, 0x1E90EA0C,
|
|
||||||
0x7C35073B, 0x28D95E6D, 0xAA340E0D, 0xCB3DEE70
|
|
||||||
};
|
|
||||||
|
|
||||||
uint32_t shabal512_iv[] PROGMEM = {
|
|
||||||
/* A */
|
|
||||||
0x20728DFD, 0x46C0BD53, 0xE782B699, 0x55304632,
|
|
||||||
0x71B4EF90, 0x0EA9E82C, 0xDBB930F1, 0xFAD06B8B,
|
|
||||||
0xBE0CAE40, 0x8BD14410, 0x76D2ADAC, 0x28ACAB7F,
|
|
||||||
/* B */
|
|
||||||
0xC1099CB7, 0x07B385F3, 0xE7442C26, 0xCC8AD640,
|
|
||||||
0xEB6F56C7, 0x1EA81AA9, 0x73B9D314, 0x1DE85D08,
|
|
||||||
0x48910A5A, 0x893B22DB, 0xC5A0DF44, 0xBBC4324E,
|
|
||||||
0x72D2F240, 0x75941D99, 0x6D8BDE82, 0xA1A7502B,
|
|
||||||
/* C */
|
|
||||||
0xD9BF68D1, 0x58BAD750, 0x56028CB2, 0x8134F359,
|
|
||||||
0xB5D469D8, 0x941A8CC2, 0x418B2A6E, 0x04052780,
|
|
||||||
0x7F07D787, 0x5194358F, 0x3C60D665, 0xBE97D79A,
|
|
||||||
0x950C3434, 0xAED9A06D, 0x2537DC8D, 0x7CDB5969,
|
|
||||||
};
|
|
||||||
|
|
||||||
void shabal192_init(shabal_ctx_t* ctx){
|
|
||||||
uint8_t i;
|
|
||||||
ctx->b = ctx->b_buffer;
|
|
||||||
ctx->c = ctx->c_buffer;
|
|
||||||
ctx->w.w64 = 1LL;
|
|
||||||
for(i=0;i<SHABAL_R;++i){
|
|
||||||
ctx->a[i] = pgm_read_dword(&(shabal192_iv[i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->b[i] = pgm_read_dword(&(shabal192_iv[SHABAL_R+i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->c[i] = pgm_read_dword(&(shabal192_iv[SHABAL_R+16+i]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal224_init(shabal_ctx_t* ctx){
|
|
||||||
uint8_t i;
|
|
||||||
ctx->b = ctx->b_buffer;
|
|
||||||
ctx->c = ctx->c_buffer;
|
|
||||||
ctx->w.w64 = 1LL;
|
|
||||||
for(i=0;i<SHABAL_R;++i){
|
|
||||||
ctx->a[i] = pgm_read_dword(&(shabal224_iv[i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->b[i] = pgm_read_dword(&(shabal224_iv[SHABAL_R+i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->c[i] = pgm_read_dword(&(shabal224_iv[SHABAL_R+16+i]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void shabal256_init(shabal_ctx_t* ctx){
|
|
||||||
uint8_t i;
|
|
||||||
ctx->b = ctx->b_buffer;
|
|
||||||
ctx->c = ctx->c_buffer;
|
|
||||||
ctx->w.w64 = 1LL;
|
|
||||||
for(i=0;i<SHABAL_R;++i){
|
|
||||||
ctx->a[i] = pgm_read_dword(&(shabal256_iv[i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->b[i] = pgm_read_dword(&(shabal256_iv[SHABAL_R+i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->c[i] = pgm_read_dword(&(shabal256_iv[SHABAL_R+16+i]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void shabal384_init(shabal_ctx_t* ctx){
|
|
||||||
uint8_t i;
|
|
||||||
ctx->b = ctx->b_buffer;
|
|
||||||
ctx->c = ctx->c_buffer;
|
|
||||||
ctx->w.w64 = 1LL;
|
|
||||||
for(i=0;i<SHABAL_R;++i){
|
|
||||||
ctx->a[i] = pgm_read_dword(&(shabal384_iv[i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->b[i] = pgm_read_dword(&(shabal384_iv[SHABAL_R+i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->c[i] = pgm_read_dword(&(shabal384_iv[SHABAL_R+16+i]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
void shabal512_init(shabal_ctx_t* ctx){
|
|
||||||
uint8_t i;
|
|
||||||
ctx->b = ctx->b_buffer;
|
|
||||||
ctx->c = ctx->c_buffer;
|
|
||||||
ctx->w.w64 = 1LL;
|
|
||||||
for(i=0;i<SHABAL_R;++i){
|
|
||||||
ctx->a[i] = pgm_read_dword(&(shabal512_iv[i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->b[i] = pgm_read_dword(&(shabal512_iv[SHABAL_R+i]));
|
|
||||||
}
|
|
||||||
for(i=0;i<16;++i){
|
|
||||||
ctx->c[i] = pgm_read_dword(&(shabal512_iv[SHABAL_R+16+i]));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void shabal_nextBlock(shabal_ctx_t* ctx, const void* block){
|
void shabal_nextBlock(shabal_ctx_t* ctx, const void* block){
|
||||||
|
@ -276,14 +104,8 @@ void shabal_lastBlock(shabal_ctx_t* ctx, const void* block, uint16_t length_b){
|
||||||
for(i=0;i<16;++i){
|
for(i=0;i<16;++i){
|
||||||
ctx->b[i] += ((uint32_t*)buffer)[i];
|
ctx->b[i] += ((uint32_t*)buffer)[i];
|
||||||
}
|
}
|
||||||
ctx->a[0] ^= ctx->w.w32[0];
|
|
||||||
ctx->a[1] ^= ctx->w.w32[1];
|
|
||||||
shabal_p(ctx, buffer);
|
|
||||||
t = ctx->c;
|
|
||||||
ctx->c = ctx->b;
|
|
||||||
ctx->b = t;
|
|
||||||
|
|
||||||
for(j=0; j<3;++j){
|
for(j=0; j<4;++j){
|
||||||
ctx->a[0] ^= ctx->w.w32[0];
|
ctx->a[0] ^= ctx->w.w32[0];
|
||||||
ctx->a[1] ^= ctx->w.w32[1];
|
ctx->a[1] ^= ctx->w.w32[1];
|
||||||
shabal_p(ctx, buffer);
|
shabal_p(ctx, buffer);
|
||||||
|
@ -294,87 +116,6 @@ void shabal_lastBlock(shabal_ctx_t* ctx, const void* block, uint16_t length_b){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline
|
|
||||||
void shabal_ctx2hash(void* dest, const shabal_ctx_t* ctx, uint16_t outlength_b){
|
void shabal_ctx2hash(void* dest, const shabal_ctx_t* ctx, uint16_t outlength_b){
|
||||||
memcpy(dest, &(ctx->c[16-outlength_b/32]), outlength_b/8);
|
memcpy(dest, &(ctx->c[16-outlength_b/32]), outlength_b/8);
|
||||||
}
|
}
|
||||||
|
|
||||||
void shabal192_ctx2hash(void* dest, const shabal_ctx_t* ctx){
|
|
||||||
shabal_ctx2hash(dest, ctx, 192);
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal224_ctx2hash(void* dest, const shabal_ctx_t* ctx){
|
|
||||||
shabal_ctx2hash(dest, ctx, 224);
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal256_ctx2hash(void* dest, const shabal_ctx_t* ctx){
|
|
||||||
shabal_ctx2hash(dest, ctx, 256);
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal384_ctx2hash(void* dest, const shabal_ctx_t* ctx){
|
|
||||||
shabal_ctx2hash(dest, ctx, 384);
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal512_ctx2hash(void* dest, const shabal_ctx_t* ctx){
|
|
||||||
shabal_ctx2hash(dest, ctx, 512);
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal192(void* dest, void* msg, uint32_t length_b){
|
|
||||||
shabal_ctx_t ctx;
|
|
||||||
shabal192_init(&ctx);
|
|
||||||
while(length_b>=SHABAL_BLOCKSIZE){
|
|
||||||
shabal_nextBlock(&ctx, msg);
|
|
||||||
msg = (uint8_t*)msg+SHABAL_BLOCKSIZE_B;
|
|
||||||
length_b -= SHABAL_BLOCKSIZE;
|
|
||||||
}
|
|
||||||
shabal_lastBlock(&ctx, msg, length_b);
|
|
||||||
shabal192_ctx2hash(dest, &ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal224(void* dest, void* msg, uint32_t length_b){
|
|
||||||
shabal_ctx_t ctx;
|
|
||||||
shabal224_init(&ctx);
|
|
||||||
while(length_b>=SHABAL_BLOCKSIZE){
|
|
||||||
shabal_nextBlock(&ctx, msg);
|
|
||||||
msg = (uint8_t*)msg+SHABAL_BLOCKSIZE_B;
|
|
||||||
length_b -= SHABAL_BLOCKSIZE;
|
|
||||||
}
|
|
||||||
shabal_lastBlock(&ctx, msg, length_b);
|
|
||||||
shabal224_ctx2hash(dest, &ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal256(void* dest, void* msg, uint32_t length_b){
|
|
||||||
shabal_ctx_t ctx;
|
|
||||||
shabal256_init(&ctx);
|
|
||||||
while(length_b>=SHABAL_BLOCKSIZE){
|
|
||||||
shabal_nextBlock(&ctx, msg);
|
|
||||||
msg = (uint8_t*)msg+SHABAL_BLOCKSIZE_B;
|
|
||||||
length_b -= SHABAL_BLOCKSIZE;
|
|
||||||
}
|
|
||||||
shabal_lastBlock(&ctx, msg, length_b);
|
|
||||||
shabal256_ctx2hash(dest, &ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal384(void* dest, void* msg, uint32_t length_b){
|
|
||||||
shabal_ctx_t ctx;
|
|
||||||
shabal384_init(&ctx);
|
|
||||||
while(length_b>=SHABAL_BLOCKSIZE){
|
|
||||||
shabal_nextBlock(&ctx, msg);
|
|
||||||
msg = (uint8_t*)msg+SHABAL_BLOCKSIZE_B;
|
|
||||||
length_b -= SHABAL_BLOCKSIZE;
|
|
||||||
}
|
|
||||||
shabal_lastBlock(&ctx, msg, length_b);
|
|
||||||
shabal384_ctx2hash(dest, &ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
void shabal512(void* dest, void* msg, uint32_t length_b){
|
|
||||||
shabal_ctx_t ctx;
|
|
||||||
shabal512_init(&ctx);
|
|
||||||
while(length_b>=SHABAL_BLOCKSIZE){
|
|
||||||
shabal_nextBlock(&ctx, msg);
|
|
||||||
msg = (uint8_t*)msg+SHABAL_BLOCKSIZE_B;
|
|
||||||
length_b -= SHABAL_BLOCKSIZE;
|
|
||||||
}
|
|
||||||
shabal_lastBlock(&ctx, msg, length_b);
|
|
||||||
shabal512_ctx2hash(dest, &ctx);
|
|
||||||
}
|
|
||||||
|
|
10
shabal.h
10
shabal.h
|
@ -38,13 +38,13 @@
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
union{
|
union{
|
||||||
uint64_t w64;
|
uint64_t w64;
|
||||||
uint32_t w32[2];
|
uint32_t w32[2];
|
||||||
} w; /* the counter */
|
} w; /* the counter */
|
||||||
uint32_t a[SHABAL_R];
|
|
||||||
uint32_t *b;
|
uint32_t *b;
|
||||||
uint32_t b_buffer[16];
|
|
||||||
uint32_t *c;
|
uint32_t *c;
|
||||||
|
uint32_t a[SHABAL_R];
|
||||||
|
uint32_t b_buffer[16];
|
||||||
uint32_t c_buffer[16];
|
uint32_t c_buffer[16];
|
||||||
}shabal_ctx_t;
|
}shabal_ctx_t;
|
||||||
|
|
||||||
|
@ -70,4 +70,6 @@ void shabal256(void* dest, void* msg, uint32_t length_b);
|
||||||
void shabal384(void* dest, void* msg, uint32_t length_b);
|
void shabal384(void* dest, void* msg, uint32_t length_b);
|
||||||
void shabal512(void* dest, void* msg, uint32_t length_b);
|
void shabal512(void* dest, void* msg, uint32_t length_b);
|
||||||
|
|
||||||
|
void shabal_ctx2hash(void* dest, const shabal_ctx_t* ctx, uint16_t outlength_b);
|
||||||
|
|
||||||
#endif /* SHABAL_H_ */
|
#endif /* SHABAL_H_ */
|
||||||
|
|
|
@ -0,0 +1,191 @@
|
||||||
|
/* shabal192-asm.S */
|
||||||
|
/*
|
||||||
|
This file is part of the AVR-Crypto-Lib.
|
||||||
|
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* \file shabal192-asm.S
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \date 2009-04-27
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "avr-asm-macros.S"
|
||||||
|
|
||||||
|
shabal192_iv:
|
||||||
|
/* A */
|
||||||
|
.long 0xFD749ED4, 0xB798E530, 0x33904B6F, 0x46BDA85E
|
||||||
|
.long 0x076934B4, 0x454B4058, 0x77F74527, 0xFB4CF465
|
||||||
|
.long 0x62931DA9, 0xE778C8DB, 0x22B3998E, 0xAC15CFB9
|
||||||
|
/* B */
|
||||||
|
.long 0x58BCBAC4, 0xEC47A08E, 0xAEE933B2, 0xDFCBC824
|
||||||
|
.long 0xA7944804, 0xBF65BDB0, 0x5A9D4502, 0x59979AF7
|
||||||
|
.long 0xC5CEA54E, 0x4B6B8150, 0x16E71909, 0x7D632319
|
||||||
|
.long 0x930573A0, 0xF34C63D1, 0xCAF914B4, 0xFDD6612C
|
||||||
|
/* C */
|
||||||
|
.long 0x61550878, 0x89EF2B75, 0xA1660C46, 0x7EF3855B
|
||||||
|
.long 0x7297B58C, 0x1BC67793, 0x7FB1C723, 0xB66FC640
|
||||||
|
.long 0x1A48B71C, 0xF0976D17, 0x088CE80A, 0xA454EDF3
|
||||||
|
.long 0x1C096BF4, 0xAC76224B, 0x5215781C, 0xCD5D2669
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
void shabal192_init(shabal_ctx_t* ctx){
|
||||||
|
uint8_t i;
|
||||||
|
ctx->b = ctx->b_buffer;
|
||||||
|
ctx->c = ctx->c_buffer;
|
||||||
|
ctx->w.w64 = 1LL;
|
||||||
|
for(i=0;i<SHABAL_R;++i){
|
||||||
|
ctx->a[i] = pgm_read_dword(&(shabal192_iv[i]));
|
||||||
|
}
|
||||||
|
for(i=0;i<16;++i){
|
||||||
|
ctx->b[i] = pgm_read_dword(&(shabal192_iv[SHABAL_R+i]));
|
||||||
|
}
|
||||||
|
for(i=0;i<16;++i){
|
||||||
|
ctx->c[i] = pgm_read_dword(&(shabal192_iv[SHABAL_R+16+i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* param ctx: r24,r25
|
||||||
|
*/
|
||||||
|
.global shabal192_init
|
||||||
|
shabal192_init:
|
||||||
|
movw r26, r24
|
||||||
|
ldi r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
movw r24, r26
|
||||||
|
adiw r24, 12*4+2+2
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
adiw r24, 4*16-1
|
||||||
|
adiw r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
ldi r24, (12+16+16)
|
||||||
|
ldi r30, lo8(shabal192_iv)
|
||||||
|
ldi r31, hi8(shabal192_iv)
|
||||||
|
1: lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* param dest: r24:r25
|
||||||
|
* param ctx: r22:r23
|
||||||
|
*/
|
||||||
|
.global shabal192_ctx2hash
|
||||||
|
shabal192_ctx2hash:
|
||||||
|
movw r26, r24
|
||||||
|
movw r30, r22
|
||||||
|
ldd r24, Z+(8+2)
|
||||||
|
ldd r25, Z+(8+2+1)
|
||||||
|
movw r30, r24
|
||||||
|
adiw r30, (16-192/32)*4
|
||||||
|
ldi r24, 192/8
|
||||||
|
1: ld r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
void shabal192(void* dest, void* msg, uint32_t length_b){
|
||||||
|
shabal_ctx_t ctx;
|
||||||
|
shabal192_init(&ctx);
|
||||||
|
while(length_b>=SHABAL_BLOCKSIZE){
|
||||||
|
shabal_nextBlock(&ctx, msg);
|
||||||
|
msg = (uint8_t*)msg+SHABAL_BLOCKSIZE_B;
|
||||||
|
length_b -= SHABAL_BLOCKSIZE;
|
||||||
|
}
|
||||||
|
shabal_lastBlock(&ctx, msg, length_b);
|
||||||
|
shabal192_ctx2hash(dest, &ctx);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* param dest: r24:r25
|
||||||
|
* param msg: r22:r23
|
||||||
|
* param length_b: r18:r21
|
||||||
|
*/
|
||||||
|
DST0 = 8
|
||||||
|
DST1 = 9
|
||||||
|
CTX0 = 10
|
||||||
|
CTX1 = 11
|
||||||
|
MSG0 = 12
|
||||||
|
MSG1 = 13
|
||||||
|
LEN2 = 14
|
||||||
|
LEN3 = 15
|
||||||
|
LEN0 = 16
|
||||||
|
LEN1 = 17
|
||||||
|
.global shabal192
|
||||||
|
shabal192:
|
||||||
|
push_range 8, 17
|
||||||
|
stack_alloc_large 188
|
||||||
|
adiw r30, 1 /* Z points to stack space (ctx) */
|
||||||
|
movw CTX0, r30
|
||||||
|
movw DST0, r24
|
||||||
|
movw MSG0, r22
|
||||||
|
movw LEN0, r18
|
||||||
|
movw LEN2, r20
|
||||||
|
movw r24, r30
|
||||||
|
rcall shabal192_init
|
||||||
|
2:
|
||||||
|
tst LEN2
|
||||||
|
brne 3f
|
||||||
|
tst LEN3
|
||||||
|
breq 4f
|
||||||
|
3:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
rcall shabal_nextBlock
|
||||||
|
subi LEN1, 0x02
|
||||||
|
sbc LEN2, r1
|
||||||
|
sbc LEN3, r1
|
||||||
|
ldi r18, 64
|
||||||
|
add MSG0, r18
|
||||||
|
adc MSG1, r1
|
||||||
|
rjmp 2b
|
||||||
|
4:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
movw r20, LEN0
|
||||||
|
rcall shabal_lastBlock
|
||||||
|
movw r24, DST0
|
||||||
|
movw r22, CTX0
|
||||||
|
rcall shabal192_ctx2hash
|
||||||
|
stack_free_large2 188
|
||||||
|
pop_range 8, 17
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,160 @@
|
||||||
|
/* shabal224-asm.S */
|
||||||
|
/*
|
||||||
|
This file is part of the AVR-Crypto-Lib.
|
||||||
|
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* \file shabal224-asm.S
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \date 2009-04-27
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "avr-asm-macros.S"
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
shabal224_iv:
|
||||||
|
/* A */
|
||||||
|
.long 0xA5201467, 0xA9B8D94A, 0xD4CED997, 0x68379D7B
|
||||||
|
.long 0xA7FC73BA, 0xF1A2546B, 0x606782BF, 0xE0BCFD0F
|
||||||
|
.long 0x2F25374E, 0x069A149F, 0x5E2DFF25, 0xFAECF061
|
||||||
|
/* B */
|
||||||
|
.long 0xEC9905D8, 0xF21850CF, 0xC0A746C8, 0x21DAD498
|
||||||
|
.long 0x35156EEB, 0x088C97F2, 0x26303E40, 0x8A2D4FB5
|
||||||
|
.long 0xFEEE44B6, 0x8A1E9573, 0x7B81111A, 0xCBC139F0
|
||||||
|
.long 0xA3513861, 0x1D2C362E, 0x918C580E, 0xB58E1B9C
|
||||||
|
/* C */
|
||||||
|
.long 0xE4B573A1, 0x4C1A0880, 0x1E907C51, 0x04807EFD
|
||||||
|
.long 0x3AD8CDE5, 0x16B21302, 0x02512C53, 0x2204CB18
|
||||||
|
.long 0x99405F2D, 0xE5B648A1, 0x70AB1D43, 0xA10C25C2
|
||||||
|
.long 0x16F1AC05, 0x38BBEB56, 0x9B01DC60, 0xB1096D83
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* param ctx: r24,r25
|
||||||
|
*/
|
||||||
|
.global shabal224_init
|
||||||
|
shabal224_init:
|
||||||
|
movw r26, r24
|
||||||
|
ldi r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
movw r24, r26
|
||||||
|
adiw r24, 12*4+4
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
adiw r24, 4*16-1
|
||||||
|
adiw r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
ldi r24, (12+16+16)
|
||||||
|
ldi r30, lo8(shabal224_iv)
|
||||||
|
ldi r31, hi8(shabal224_iv)
|
||||||
|
1: lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
.global shabal224_ctx2hash
|
||||||
|
shabal224_ctx2hash:
|
||||||
|
movw r26, r24
|
||||||
|
movw r30, r22
|
||||||
|
ldd r24, Z+(8+2)
|
||||||
|
ldd r25, Z+(8+2+1)
|
||||||
|
movw r30, r24
|
||||||
|
adiw r30, (16-224/32)*4
|
||||||
|
ldi r24, 224/8
|
||||||
|
1: ld r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* param dest: r24:r25
|
||||||
|
* param msg: r22:r23
|
||||||
|
* param length_b: r18:r21
|
||||||
|
*/
|
||||||
|
DST0 = 8
|
||||||
|
DST1 = 9
|
||||||
|
CTX0 = 10
|
||||||
|
CTX1 = 11
|
||||||
|
MSG0 = 12
|
||||||
|
MSG1 = 13
|
||||||
|
LEN2 = 14
|
||||||
|
LEN3 = 15
|
||||||
|
LEN0 = 16
|
||||||
|
LEN1 = 17
|
||||||
|
.global shabal224
|
||||||
|
shabal224:
|
||||||
|
push_range 8, 17
|
||||||
|
stack_alloc_large 188
|
||||||
|
adiw r30, 1 /* Z points to stack space (ctx) */
|
||||||
|
movw CTX0, r30
|
||||||
|
movw DST0, r24
|
||||||
|
movw MSG0, r22
|
||||||
|
movw LEN0, r18
|
||||||
|
movw LEN2, r20
|
||||||
|
movw r24, r30
|
||||||
|
rcall shabal224_init
|
||||||
|
2:
|
||||||
|
tst LEN2
|
||||||
|
brne 3f
|
||||||
|
tst LEN3
|
||||||
|
breq 4f
|
||||||
|
3:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
rcall shabal_nextBlock
|
||||||
|
subi LEN1, 0x02
|
||||||
|
sbc LEN2, r1
|
||||||
|
sbc LEN3, r1
|
||||||
|
ldi r18, 64
|
||||||
|
add MSG0, r18
|
||||||
|
adc MSG1, r1
|
||||||
|
rjmp 2b
|
||||||
|
4:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
movw r20, LEN0
|
||||||
|
rcall shabal_lastBlock
|
||||||
|
movw r24, DST0
|
||||||
|
movw r22, CTX0
|
||||||
|
rcall shabal224_ctx2hash
|
||||||
|
stack_free_large2 188
|
||||||
|
pop_range 8, 17
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,159 @@
|
||||||
|
/* shabal256-asm.S */
|
||||||
|
/*
|
||||||
|
This file is part of the AVR-Crypto-Lib.
|
||||||
|
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* \file shabal256-asm.S
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \date 2009-04-27
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "avr-asm-macros.S"
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
shabal256_iv:
|
||||||
|
/* A */
|
||||||
|
.long 0x52F84552, 0xE54B7999, 0x2D8EE3EC, 0xB9645191
|
||||||
|
.long 0xE0078B86, 0xBB7C44C9, 0xD2B5C1CA, 0xB0D2EB8C
|
||||||
|
.long 0x14CE5A45, 0x22AF50DC, 0xEFFDBC6B, 0xEB21B74A
|
||||||
|
/* B */
|
||||||
|
.long 0xB555C6EE, 0x3E710596, 0xA72A652F, 0x9301515F
|
||||||
|
.long 0xDA28C1FA, 0x696FD868, 0x9CB6BF72, 0x0AFE4002
|
||||||
|
.long 0xA6E03615, 0x5138C1D4, 0xBE216306, 0xB38B8890
|
||||||
|
.long 0x3EA8B96B, 0x3299ACE4, 0x30924DD4, 0x55CB34A5
|
||||||
|
/* C */
|
||||||
|
.long 0xB405F031, 0xC4233EBA, 0xB3733979, 0xC0DD9D55
|
||||||
|
.long 0xC51C28AE, 0xA327B8E1, 0x56C56167, 0xED614433
|
||||||
|
.long 0x88B59D60, 0x60E2CEBA, 0x758B4B8B, 0x83E82A7F
|
||||||
|
.long 0xBC968828, 0xE6E00BF7, 0xBA839E55, 0x9B491C60
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* param ctx: r24,r25
|
||||||
|
*/
|
||||||
|
.global shabal256_init
|
||||||
|
shabal256_init:
|
||||||
|
movw r26, r24
|
||||||
|
ldi r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
movw r24, r26
|
||||||
|
adiw r24, 12*4+4
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
adiw r24, 4*16-1
|
||||||
|
adiw r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
ldi r24, (12+16+16)
|
||||||
|
ldi r30, lo8(shabal256_iv)
|
||||||
|
ldi r31, hi8(shabal256_iv)
|
||||||
|
1: lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
.global shabal256_ctx2hash
|
||||||
|
shabal256_ctx2hash:
|
||||||
|
movw r26, r24
|
||||||
|
movw r30, r22
|
||||||
|
ldd r24, Z+(8+2)
|
||||||
|
ldd r25, Z+(8+2+1)
|
||||||
|
movw r30, r24
|
||||||
|
adiw r30, (16-256/32)*4
|
||||||
|
ldi r24, 256/8
|
||||||
|
1: ld r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* param dest: r24:r25
|
||||||
|
* param msg: r22:r23
|
||||||
|
* param length_b: r18:r21
|
||||||
|
*/
|
||||||
|
DST0 = 8
|
||||||
|
DST1 = 9
|
||||||
|
CTX0 = 10
|
||||||
|
CTX1 = 11
|
||||||
|
MSG0 = 12
|
||||||
|
MSG1 = 13
|
||||||
|
LEN2 = 14
|
||||||
|
LEN3 = 15
|
||||||
|
LEN0 = 16
|
||||||
|
LEN1 = 17
|
||||||
|
.global shabal256
|
||||||
|
shabal256:
|
||||||
|
push_range 8, 17
|
||||||
|
stack_alloc_large 188
|
||||||
|
adiw r30, 1 /* Z points to stack space (ctx) */
|
||||||
|
movw CTX0, r30
|
||||||
|
movw DST0, r24
|
||||||
|
movw MSG0, r22
|
||||||
|
movw LEN0, r18
|
||||||
|
movw LEN2, r20
|
||||||
|
movw r24, r30
|
||||||
|
rcall shabal256_init
|
||||||
|
2:
|
||||||
|
tst LEN2
|
||||||
|
brne 3f
|
||||||
|
tst LEN3
|
||||||
|
breq 4f
|
||||||
|
3:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
rcall shabal_nextBlock
|
||||||
|
subi LEN1, 0x02
|
||||||
|
sbc LEN2, r1
|
||||||
|
sbc LEN3, r1
|
||||||
|
ldi r18, 64
|
||||||
|
add MSG0, r18
|
||||||
|
adc MSG1, r1
|
||||||
|
rjmp 2b
|
||||||
|
4:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
movw r20, LEN0
|
||||||
|
rcall shabal_lastBlock
|
||||||
|
movw r24, DST0
|
||||||
|
movw r22, CTX0
|
||||||
|
rcall shabal256_ctx2hash
|
||||||
|
stack_free_large2 188
|
||||||
|
pop_range 8, 17
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,158 @@
|
||||||
|
/* shabal384-asm.S */
|
||||||
|
/*
|
||||||
|
This file is part of the AVR-Crypto-Lib.
|
||||||
|
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* \file shabal384-asm.S
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \date 2009-04-27
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "avr-asm-macros.S"
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
shabal384_iv:
|
||||||
|
/* A */
|
||||||
|
.long 0xC8FCA331, 0xE55C504E, 0x003EBF26, 0xBB6B8D83
|
||||||
|
.long 0x7B0448C1, 0x41B82789, 0x0A7C9601, 0x8D659CFF
|
||||||
|
.long 0xB6E2673E, 0xCA54C77B, 0x1460FD7E, 0x3FCB8F2D
|
||||||
|
/* B */
|
||||||
|
.long 0x527291FC, 0x2A16455F, 0x78E627E5, 0x944F169F
|
||||||
|
.long 0x1CA6F016, 0xA854EA25, 0x8DB98ABE, 0xF2C62641
|
||||||
|
.long 0x30117DCB, 0xCF5C4309, 0x93711A25, 0xF9F671B8
|
||||||
|
.long 0xB01D2116, 0x333F4B89, 0xB285D165, 0x86829B36
|
||||||
|
/* C */
|
||||||
|
.long 0xF764B11A, 0x76172146, 0xCEF6934D, 0xC6D28399
|
||||||
|
.long 0xFE095F61, 0x5E6018B4, 0x5048ECF5, 0x51353261
|
||||||
|
.long 0x6E6E36DC, 0x63130DAD, 0xA9C69BD6, 0x1E90EA0C
|
||||||
|
.long 0x7C35073B, 0x28D95E6D, 0xAA340E0D, 0xCB3DEE70
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* param ctx: r24,r25
|
||||||
|
*/
|
||||||
|
.global shabal384_init
|
||||||
|
shabal384_init:
|
||||||
|
movw r26, r24
|
||||||
|
ldi r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
movw r24, r26
|
||||||
|
adiw r24, 12*4+4
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
adiw r24, 4*16-1
|
||||||
|
adiw r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
ldi r24, (12+16+16)
|
||||||
|
ldi r30, lo8(shabal384_iv)
|
||||||
|
ldi r31, hi8(shabal384_iv)
|
||||||
|
1: lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
.global shabal384_ctx2hash
|
||||||
|
shabal384_ctx2hash:
|
||||||
|
movw r26, r24
|
||||||
|
movw r30, r22
|
||||||
|
ldd r24, Z+(8+2)
|
||||||
|
ldd r25, Z+(8+2+1)
|
||||||
|
movw r30, r24
|
||||||
|
adiw r30, (16-384/32)*4
|
||||||
|
ldi r24, 384/8
|
||||||
|
1: ld r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* param dest: r24:r25
|
||||||
|
* param msg: r22:r23
|
||||||
|
* param length_b: r18:r21
|
||||||
|
*/
|
||||||
|
DST0 = 8
|
||||||
|
DST1 = 9
|
||||||
|
CTX0 = 10
|
||||||
|
CTX1 = 11
|
||||||
|
MSG0 = 12
|
||||||
|
MSG1 = 13
|
||||||
|
LEN2 = 14
|
||||||
|
LEN3 = 15
|
||||||
|
LEN0 = 16
|
||||||
|
LEN1 = 17
|
||||||
|
.global shabal384
|
||||||
|
shabal384:
|
||||||
|
push_range 8, 17
|
||||||
|
stack_alloc_large 188
|
||||||
|
adiw r30, 1 /* Z points to stack space (ctx) */
|
||||||
|
movw CTX0, r30
|
||||||
|
movw DST0, r24
|
||||||
|
movw MSG0, r22
|
||||||
|
movw LEN0, r18
|
||||||
|
movw LEN2, r20
|
||||||
|
movw r24, r30
|
||||||
|
rcall shabal384_init
|
||||||
|
2:
|
||||||
|
tst LEN2
|
||||||
|
brne 3f
|
||||||
|
tst LEN3
|
||||||
|
breq 4f
|
||||||
|
3:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
rcall shabal_nextBlock
|
||||||
|
subi LEN1, 0x02
|
||||||
|
sbc LEN2, r1
|
||||||
|
sbc LEN3, r1
|
||||||
|
ldi r18, 64
|
||||||
|
add MSG0, r18
|
||||||
|
adc MSG1, r1
|
||||||
|
rjmp 2b
|
||||||
|
4:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
movw r20, LEN0
|
||||||
|
rcall shabal_lastBlock
|
||||||
|
movw r24, DST0
|
||||||
|
movw r22, CTX0
|
||||||
|
rcall shabal384_ctx2hash
|
||||||
|
stack_free_large2 188
|
||||||
|
pop_range 8, 17
|
||||||
|
ret
|
||||||
|
|
|
@ -0,0 +1,158 @@
|
||||||
|
/* shabal512-asm.S */
|
||||||
|
/*
|
||||||
|
This file is part of the AVR-Crypto-Lib.
|
||||||
|
Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* \file shabal512-asm.S
|
||||||
|
* \author Daniel Otte
|
||||||
|
* \email daniel.otte@rub.de
|
||||||
|
* \date 2009-04-27
|
||||||
|
* \license GPLv3 or later
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "avr-asm-macros.S"
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
shabal512_iv:
|
||||||
|
/* A */
|
||||||
|
.long 0x20728DFD, 0x46C0BD53, 0xE782B699, 0x55304632
|
||||||
|
.long 0x71B4EF90, 0x0EA9E82C, 0xDBB930F1, 0xFAD06B8B
|
||||||
|
.long 0xBE0CAE40, 0x8BD14410, 0x76D2ADAC, 0x28ACAB7F
|
||||||
|
/* B */
|
||||||
|
.long 0xC1099CB7, 0x07B385F3, 0xE7442C26, 0xCC8AD640
|
||||||
|
.long 0xEB6F56C7, 0x1EA81AA9, 0x73B9D314, 0x1DE85D08
|
||||||
|
.long 0x48910A5A, 0x893B22DB, 0xC5A0DF44, 0xBBC4324E
|
||||||
|
.long 0x72D2F240, 0x75941D99, 0x6D8BDE82, 0xA1A7502B
|
||||||
|
/* C */
|
||||||
|
.long 0xD9BF68D1, 0x58BAD750, 0x56028CB2, 0x8134F359
|
||||||
|
.long 0xB5D469D8, 0x941A8CC2, 0x418B2A6E, 0x04052780
|
||||||
|
.long 0x7F07D787, 0x5194358F, 0x3C60D665, 0xBE97D79A
|
||||||
|
.long 0x950C3434, 0xAED9A06D, 0x2537DC8D, 0x7CDB5969
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* param ctx: r24,r25
|
||||||
|
*/
|
||||||
|
.global shabal512_init
|
||||||
|
shabal512_init:
|
||||||
|
movw r26, r24
|
||||||
|
ldi r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
st X+, r1
|
||||||
|
movw r24, r26
|
||||||
|
adiw r24, 12*4+4
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
adiw r24, 4*16-1
|
||||||
|
adiw r24, 1
|
||||||
|
st X+, r24
|
||||||
|
st X+, r25
|
||||||
|
ldi r24, (12+16+16)
|
||||||
|
ldi r30, lo8(shabal512_iv)
|
||||||
|
ldi r31, hi8(shabal512_iv)
|
||||||
|
1: lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
lpm r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
.global shabal512_ctx2hash
|
||||||
|
shabal512_ctx2hash:
|
||||||
|
movw r26, r24
|
||||||
|
movw r30, r22
|
||||||
|
ldd r24, Z+(8+2)
|
||||||
|
ldd r25, Z+(8+2+1)
|
||||||
|
movw r30, r24
|
||||||
|
; adiw r30, (16-512/32)*4
|
||||||
|
ldi r24, 512/8
|
||||||
|
1: ld r0, Z+
|
||||||
|
st X+, r0
|
||||||
|
dec r24
|
||||||
|
brne 1b
|
||||||
|
ret
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* param dest: r24:r25
|
||||||
|
* param msg: r22:r23
|
||||||
|
* param length_b: r18:r21
|
||||||
|
*/
|
||||||
|
DST0 = 8
|
||||||
|
DST1 = 9
|
||||||
|
CTX0 = 10
|
||||||
|
CTX1 = 11
|
||||||
|
MSG0 = 12
|
||||||
|
MSG1 = 13
|
||||||
|
LEN2 = 14
|
||||||
|
LEN3 = 15
|
||||||
|
LEN0 = 16
|
||||||
|
LEN1 = 17
|
||||||
|
.global shabal512
|
||||||
|
shabal512:
|
||||||
|
push_range 8, 17
|
||||||
|
stack_alloc_large 188
|
||||||
|
adiw r30, 1 /* Z points to stack space (ctx) */
|
||||||
|
movw CTX0, r30
|
||||||
|
movw DST0, r24
|
||||||
|
movw MSG0, r22
|
||||||
|
movw LEN0, r18
|
||||||
|
movw LEN2, r20
|
||||||
|
movw r24, r30
|
||||||
|
rcall shabal512_init
|
||||||
|
2:
|
||||||
|
tst LEN2
|
||||||
|
brne 3f
|
||||||
|
tst LEN3
|
||||||
|
breq 4f
|
||||||
|
3:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
rcall shabal_nextBlock
|
||||||
|
subi LEN1, 0x02
|
||||||
|
sbc LEN2, r1
|
||||||
|
sbc LEN3, r1
|
||||||
|
ldi r18, 64
|
||||||
|
add MSG0, r18
|
||||||
|
adc MSG1, r1
|
||||||
|
rjmp 2b
|
||||||
|
4:
|
||||||
|
movw r24, CTX0
|
||||||
|
movw r22, MSG0
|
||||||
|
movw r20, LEN0
|
||||||
|
rcall shabal_lastBlock
|
||||||
|
movw r24, DST0
|
||||||
|
movw r22, CTX0
|
||||||
|
rcall shabal512_ctx2hash
|
||||||
|
stack_free_large2 188
|
||||||
|
pop_range 8, 17
|
||||||
|
ret
|
||||||
|
|
|
@ -123,6 +123,86 @@ void testrun_stdtest_shabal(void){
|
||||||
testrun_stdtest_shabal512(mb, strlen(mb)*8);
|
testrun_stdtest_shabal512(mb, strlen(mb)*8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void testshort(void){
|
||||||
|
uint8_t ma[64];
|
||||||
|
memset(ma, 0, 64);
|
||||||
|
testrun_stdtest_shabal192(ma, 64*8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void shabal_ctx_dump(shabal_ctx_t* ctx){
|
||||||
|
uint8_t i;
|
||||||
|
void* p;
|
||||||
|
cli_putstr_P(PSTR("\r\n=== shabal ctx dump ===\r\n size = "));
|
||||||
|
i=sizeof(shabal_ctx_t);
|
||||||
|
if(i>=100)
|
||||||
|
cli_putc('0'+i/100);
|
||||||
|
if(i>=10)
|
||||||
|
cli_putc('0'+(i/10)%10);
|
||||||
|
cli_putc('0'+i%10);
|
||||||
|
cli_putstr_P(PSTR("\r\n a = "));
|
||||||
|
cli_hexdump_block(ctx->a, 12*4, 5, 4*8);
|
||||||
|
cli_putstr_P(PSTR("\r\n b_buffer = "));
|
||||||
|
cli_hexdump_block(ctx->b_buffer, 12*4, 5, 4*8);
|
||||||
|
cli_putstr_P(PSTR("\r\n c_buffer = "));
|
||||||
|
cli_hexdump_block(ctx->c_buffer, 12*4, 5, 4*8);
|
||||||
|
if(ctx->b == &(ctx->b_buffer[0]))
|
||||||
|
cli_putstr_P(PSTR("\r\nb --> b_buffer"));
|
||||||
|
if(ctx->b == &(ctx->c_buffer[0]))
|
||||||
|
cli_putstr_P(PSTR("\r\nb --> c_buffer"));
|
||||||
|
if(ctx->c == &(ctx->b_buffer[0]))
|
||||||
|
cli_putstr_P(PSTR("\r\nc --> b_buffer"));
|
||||||
|
if(ctx->c == &(ctx->c_buffer[0]))
|
||||||
|
cli_putstr_P(PSTR("\r\nc --> c_buffer"));
|
||||||
|
cli_putstr_P(PSTR("\r\n b = "));
|
||||||
|
cli_hexdump(&(ctx->b), 2);
|
||||||
|
p = ctx->b_buffer;
|
||||||
|
cli_putstr_P(PSTR("\r\n b (should) = "));
|
||||||
|
cli_hexdump(&p, 2);
|
||||||
|
cli_putstr_P(PSTR("\r\n c = "));
|
||||||
|
cli_hexdump(&(ctx->c), 2);
|
||||||
|
p = ctx->c_buffer;
|
||||||
|
cli_putstr_P(PSTR("\r\n c (should) = "));
|
||||||
|
cli_hexdump(&p, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void testinit_192(void){
|
||||||
|
shabal_ctx_t ctx;
|
||||||
|
shabal192_init(&ctx);
|
||||||
|
shabal_ctx_dump(&ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void testinit_224(void){
|
||||||
|
shabal_ctx_t ctx;
|
||||||
|
shabal224_init(&ctx);
|
||||||
|
shabal_ctx_dump(&ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void testinit_256(void){
|
||||||
|
shabal_ctx_t ctx;
|
||||||
|
shabal256_init(&ctx);
|
||||||
|
shabal_ctx_dump(&ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void testinit_384(void){
|
||||||
|
shabal_ctx_t ctx;
|
||||||
|
shabal384_init(&ctx);
|
||||||
|
shabal_ctx_dump(&ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
void testinit_512(void){
|
||||||
|
shabal_ctx_t ctx;
|
||||||
|
shabal512_init(&ctx);
|
||||||
|
shabal_ctx_dump(&ctx);
|
||||||
|
}
|
||||||
|
void testinit(void){
|
||||||
|
testinit_192();
|
||||||
|
testinit_224();
|
||||||
|
testinit_256();
|
||||||
|
testinit_384();
|
||||||
|
testinit_512();
|
||||||
|
}
|
||||||
|
|
||||||
void performance_shabal(void){
|
void performance_shabal(void){
|
||||||
uint64_t t;
|
uint64_t t;
|
||||||
char str[16];
|
char str[16];
|
||||||
|
@ -143,28 +223,28 @@ void performance_shabal(void){
|
||||||
cli_putstr(str);
|
cli_putstr(str);
|
||||||
|
|
||||||
startTimer(1);
|
startTimer(1);
|
||||||
shabal192_init(&ctx);
|
shabal224_init(&ctx);
|
||||||
t = stopTimer();
|
t = stopTimer();
|
||||||
cli_putstr_P(PSTR("\r\n\tctx-gen time (224): "));
|
cli_putstr_P(PSTR("\r\n\tctx-gen time (224): "));
|
||||||
ultoa((unsigned long)t, str, 10);
|
ultoa((unsigned long)t, str, 10);
|
||||||
cli_putstr(str);
|
cli_putstr(str);
|
||||||
|
|
||||||
startTimer(1);
|
startTimer(1);
|
||||||
shabal192_init(&ctx);
|
shabal256_init(&ctx);
|
||||||
t = stopTimer();
|
t = stopTimer();
|
||||||
cli_putstr_P(PSTR("\r\n\tctx-gen time (256): "));
|
cli_putstr_P(PSTR("\r\n\tctx-gen time (256): "));
|
||||||
ultoa((unsigned long)t, str, 10);
|
ultoa((unsigned long)t, str, 10);
|
||||||
cli_putstr(str);
|
cli_putstr(str);
|
||||||
|
|
||||||
startTimer(1);
|
startTimer(1);
|
||||||
shabal192_init(&ctx);
|
shabal384_init(&ctx);
|
||||||
t = stopTimer();
|
t = stopTimer();
|
||||||
cli_putstr_P(PSTR("\r\n\tctx-gen time (384): "));
|
cli_putstr_P(PSTR("\r\n\tctx-gen time (384): "));
|
||||||
ultoa((unsigned long)t, str, 10);
|
ultoa((unsigned long)t, str, 10);
|
||||||
cli_putstr(str);
|
cli_putstr(str);
|
||||||
|
|
||||||
startTimer(1);
|
startTimer(1);
|
||||||
shabal192_init(&ctx);
|
shabal512_init(&ctx);
|
||||||
t = stopTimer();
|
t = stopTimer();
|
||||||
cli_putstr_P(PSTR("\r\n\tctx-gen time (512): "));
|
cli_putstr_P(PSTR("\r\n\tctx-gen time (512): "));
|
||||||
ultoa((unsigned long)t, str, 10);
|
ultoa((unsigned long)t, str, 10);
|
||||||
|
@ -281,6 +361,9 @@ const hfdesc_t* algolist[] PROGMEM = {
|
||||||
|
|
||||||
const char nessie_str[] PROGMEM = "nessie";
|
const char nessie_str[] PROGMEM = "nessie";
|
||||||
const char test_str[] PROGMEM = "test";
|
const char test_str[] PROGMEM = "test";
|
||||||
|
const char testinit192_str[] PROGMEM = "testinit192";
|
||||||
|
const char testinit_str[] PROGMEM = "testinit";
|
||||||
|
const char testshort_str[] PROGMEM = "short";
|
||||||
const char ztest_str[] PROGMEM = "zerotest";
|
const char ztest_str[] PROGMEM = "zerotest";
|
||||||
const char performance_str[] PROGMEM = "performance";
|
const char performance_str[] PROGMEM = "performance";
|
||||||
const char echo_str[] PROGMEM = "echo";
|
const char echo_str[] PROGMEM = "echo";
|
||||||
|
@ -291,6 +374,9 @@ const char shavs_test1_str[] PROGMEM = "shavs_test1";
|
||||||
cmdlist_entry_t cmdlist[] PROGMEM = {
|
cmdlist_entry_t cmdlist[] PROGMEM = {
|
||||||
{ nessie_str, NULL, testrun_nessie_shabal},
|
{ nessie_str, NULL, testrun_nessie_shabal},
|
||||||
{ test_str, NULL, testrun_stdtest_shabal},
|
{ test_str, NULL, testrun_stdtest_shabal},
|
||||||
|
{ testinit192_str, NULL, testinit_192},
|
||||||
|
{ testinit_str, NULL, testinit},
|
||||||
|
{ testshort_str, NULL, testshort},
|
||||||
{ performance_str, NULL, performance_shabal},
|
{ performance_str, NULL, performance_shabal},
|
||||||
{ shavs_list_str, NULL, shavs_listalgos},
|
{ shavs_list_str, NULL, shavs_listalgos},
|
||||||
{ shavs_set_str, (void*)1, (void_fpt)shavs_setalgo},
|
{ shavs_set_str, (void*)1, (void_fpt)shavs_setalgo},
|
||||||
|
|
|
@ -174,6 +174,10 @@ void zeromsg_test_common(char* p){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void performance_skein(void){
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* main *
|
* main *
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
@ -215,6 +219,7 @@ const char shavs_test1_str[] PROGMEM = "shavs_test1";
|
||||||
|
|
||||||
cmdlist_entry_t cmdlist[] PROGMEM = {
|
cmdlist_entry_t cmdlist[] PROGMEM = {
|
||||||
// { nessie_str, NULL, testrun_nessie_skein},
|
// { nessie_str, NULL, testrun_nessie_skein},
|
||||||
|
{ performance_str, NULL, performance_skein},
|
||||||
{ test_str, NULL, testrun_stdtest_skein},
|
{ test_str, NULL, testrun_stdtest_skein},
|
||||||
{ ztest_str, (void*)1, (void_fpt)zeromsg_test_common},
|
{ ztest_str, (void*)1, (void_fpt)zeromsg_test_common},
|
||||||
{ shavs_list_str, NULL, shavs_listalgos},
|
{ shavs_list_str, NULL, shavs_listalgos},
|
||||||
|
|
Loading…
Reference in New Issue