#include "performance_test.h"
#include "stack_measuring.h"
#include "cli.h"
+#include "uart_i.h"
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
+#include <stdio.h>
#include <avr/pgmspace.h>
#define PATTERN_A 0xAA
#define PATTERN_B 0x55
-
+/*
static
void printvalue(unsigned long v){
char str[20];
int i;
ultoa(v, str, 10);
- for(i=0; i<10-strlen(str); ++i){
+ for(i = 0; i < 10 - strlen(str); ++i){
cli_putc(' ');
}
cli_putstr(str);
}
+*/
-void bcal_performance(const bcdesc_t* bcd){
+void bcal_performance(const bcdesc_t *bcd){
bcdesc_t bc;
memcpy_P(&bc, bcd, sizeof(bcdesc_t));
uint8_t ctx[bc.ctxsize_B];
- uint8_t data[(bc.blocksize_b+7)/8];
+ uint8_t data[(bc.blocksize_b + 7) / 8];
uint16_t keysize = get_keysize(bc.valid_keysize_desc);
- uint8_t key[(keysize+7)/8];
+ uint8_t key[(keysize + 7) / 8];
uint64_t t;
uint8_t i;
- if(bc.type!=BCDESC_TYPE_BLOCKCIPHER)
+ if(bc.type != BCDESC_TYPE_BLOCKCIPHER)
return;
calibrateTimer();
print_overhead();
- cli_putstr_P(PSTR("\r\n\r\n === "));
- cli_putstr_P(bc.name);
- cli_putstr_P(PSTR(" performance === "
- "\r\n type: blockcipher"
- "\r\n keysize (bits): "));
- printvalue(keysize);
-
- cli_putstr_P(PSTR("\r\n ctxsize (bytes): "));
- printvalue(bc.ctxsize_B);
-
- cli_putstr_P(PSTR("\r\n blocksize (bits): "));
- printvalue(bc.blocksize_b);
-
-
-
- t=0;
+ printf_P(PSTR("\n\n === %S performance === \n"
+ "\ttype: blockcipher\n"
+ "\tkeysize (bits): %5"PRIu16"\n"
+ "\tctxsize (bytes): %5"PRIu16"\n"
+ "\tblocksize (bits): %5"PRIu16"\n"),
+ bc.name, keysize, bc.ctxsize_B, bc.blocksize_b);
+ uart0_flush();
+ t = 0;
if(bc.init.init1){
- if((bc.flags&BC_INIT_TYPE)==BC_INIT_TYPE_1){
- for(i=0; i<32; ++i){
- startTimer(0);
+ if((bc.flags & BC_INIT_TYPE) == BC_INIT_TYPE_1){
+ for(i = 0; i < 32; ++i){
+ startTimer(1);
START_TIMER;
(bc.init.init1)(key, &ctx);
STOP_TIMER;
}
}
} else {
- for(i=0; i<32; ++i){
- startTimer(0);
+ for(i = 0; i < 32; ++i){
+ startTimer(1);
START_TIMER;
(bc.init.init2)(key, keysize, &ctx);
STOP_TIMER;
}
}
}
- t>>=5;
- cli_putstr_P(PSTR("\r\n init (cycles): "));
- printvalue(t);
+ t >>= 5;
+ printf_P(PSTR(" init (cycles): %5"PRIu16"\n"), t);
}
- t=0;
- for(i=0; i<32; ++i){
+
+ uart0_flush();
+ t = 0;
+ for(i = 0; i < 32; ++i){
startTimer(0);
START_TIMER;
bc.enc.enc1(data, &ctx);
STOP_TIMER;
t += stopTimer();
}
- t>>=5;
- cli_putstr_P(PSTR("\r\n encrypt (cycles): "));
- printvalue(t);
+ t >>= 5;
+ printf_P(PSTR(" encrypt (cycles): %5"PRIu16"\n"), t);
- t=0;
- for(i=0; i<32; ++i){
+ uart0_flush();
+ t = 0;
+ for(i = 0; i < 32; ++i){
startTimer(0);
START_TIMER;
bc.dec.dec1(data, &ctx);
STOP_TIMER;
t += stopTimer();
}
- t>>=5;
- cli_putstr_P(PSTR("\r\n decrypt (cycles): "));
- printvalue(t);
+ t >>= 5;
+ printf_P(PSTR(" decrypt (cycles): %5"PRIu16"\n"), t);
+ uart0_flush();
if(bc.free){
+ uart0_flush();
bc.free(&ctx);
}
}
-void bcal_stacksize(const bcdesc_t* bcd){
+void bcal_stacksize(const bcdesc_t *bcd){
bcdesc_t bc;
stack_measuring_ctx_t smctx;
memcpy_P(&bc, bcd, sizeof(bcdesc_t));
uint8_t ctx[bc.ctxsize_B];
- uint8_t data[(bc.blocksize_b+7)/8];
+ uint8_t data[(bc.blocksize_b + 7) / 8];
uint16_t keysize = get_keysize(bc.valid_keysize_desc);
- uint8_t key[(keysize+7)/8];
- uint16_t t1, t2;
+ uint8_t key[(keysize + 7)/8];
+ uint16_t t1 = 0, t2 = 0;
- if(bc.type!=BCDESC_TYPE_BLOCKCIPHER)
+ if(bc.type != BCDESC_TYPE_BLOCKCIPHER)
return;
- cli_putstr_P(PSTR("\r\n\r\n === "));
- cli_putstr_P(bc.name);
- cli_putstr_P(PSTR(" stack-usage === "));
+ printf_P(PSTR("\n === %S stack-usage ===\n"),bc.name);
+
+ uart0_flush();
if(bc.init.init1){
- if((bc.flags&BC_INIT_TYPE)==BC_INIT_TYPE_1){
- cli();
+ if((bc.flags & BC_INIT_TYPE) == BC_INIT_TYPE_1){
+ cli();
stack_measure_init(&smctx, PATTERN_A);
bc.init.init1(&ctx, key);
t1 = stack_measure_final(&smctx);
t2 = stack_measure_final(&smctx);
sei();
} else {
- cli();
+ cli();
stack_measure_init(&smctx, PATTERN_A);
bc.init.init2(&ctx, keysize, key);
t1 = stack_measure_final(&smctx);
stack_measure_init(&smctx, PATTERN_B);
bc.init.init2(&ctx, keysize, key);
- t2 = stack_measure_final(&smctx);
- sei();
- }
- t1 = (t1>t2)?t1:t2;
- cli_putstr_P(PSTR("\r\n init (bytes): "));
- printvalue((unsigned long)t1);
+ t2 = stack_measure_final(&smctx);
+ sei();
+ }
+
+ t1 = (t1 > t2) ? t1 : t2;
+ printf_P(PSTR(" init (bytes): %5"PRIu16"\n"), t1);
}
cli();
stack_measure_init(&smctx, PATTERN_A);
t2 = stack_measure_final(&smctx);
sei();
- t1 = (t1>t2)?t1:t2;
- cli_putstr_P(PSTR("\r\n encBlock (bytes): "));
- printvalue((unsigned long)t1);
+ t1 = (t1 > t2) ? t1 : t2;
+ printf_P(PSTR(" encBlock (bytes): %5"PRIu16"\n"), t1);
cli();
stack_measure_init(&smctx, PATTERN_A);
t2 = stack_measure_final(&smctx);
sei();
- t1 = (t1>t2)?t1:t2;
- cli_putstr_P(PSTR("\r\n decBlock (bytes): "));
- printvalue((unsigned long)t1);
+ t1 = (t1 > t2) ? t1 : t2;
+ printf_P(PSTR(" decBlock (bytes): %5"PRIu16"\n"), t1);
if(bc.free){
bc.free(&ctx);
}
}
-void bcal_performance_multiple(const bcdesc_t* const* bcd_list){
- const bcdesc_t* bcd;
+void bcal_performance_multiple(const bcdesc_t *const *bcd_list){
+ const bcdesc_t *bcd;
for(;;){
bcd = (void*)pgm_read_word(bcd_list);
if(!bcd){
- cli_putstr_P(PSTR("\r\n\r\n End of performance figures\r\n"));
+ puts_P(PSTR("\n End of performance figures\n"));
return;
}
bcal_performance(bcd);