]> git.cryptolib.org Git - avr-crypto-lib.git/blobdiff - main-camellia-test.c
camellia seems broken
[avr-crypto-lib.git] / main-camellia-test.c
index 1c85c2d11aa32e21af1dd6db4989350797c44ad6..cf4ed4ed279018af179ad61e82c2fd442af0739d 100644 (file)
 #include "debug.h"
 
 #include "camellia.h"
+#include "nessie_bc_test.h"
+#include "performance_test.h"
+#include "cli.h"
+
+char* cipher_name = "Camellia";
+
 
 #include <stdint.h>
 #include <string.h>
+#include <stdlib.h>
 #include <avr/pgmspace.h>
 
 
-#ifndef BOOL
-#define BOOL
- #ifndef __BOOL
- #define __BOOL
-  #ifndef __BOOL__
-  #define __BOOL__
-       typedef enum{false=0,true=1} bool;
-  #endif
- #endif
-#endif
-
-
-
 /*****************************************************************************
  *  additional validation-functions                                                                                     *
  *****************************************************************************/
+void camellia128_init_dummy(void* key, uint16_t keysize_b, void* ctx){
+       camellia128_init(key, ctx);
+}
 
-/*****************************************************************************
- *  self tests                                                                                                                          *
- *****************************************************************************/
-void camellia128_ctx_dump(camellia128_ctx_t *s);
-
-void test_encrypt(uint8_t *block, uint8_t *key, uint16_t keylength, bool print){
-       camellia128_ctx_t s;
-       if (print){
-               uart_putstr("\r\nCamellia (enc):\r\n key:\t\t");
-               uart_hexdump(key, keylength/8);
-               uart_putstr("\r\n plaintext:\t");
-               uart_hexdump(block, 16);
-       }
+void testrun_nessie_camellia(void){
+       nessie_bc_ctx.blocksize_B =  16;
+       nessie_bc_ctx.keysize_b   = 128;
+       nessie_bc_ctx.name        = cipher_name;
+       nessie_bc_ctx.ctx_size_B  = sizeof(camellia128_ctx_t);
+       nessie_bc_ctx.cipher_enc  = (nessie_bc_enc_fpt)camellia128_enc;
+       nessie_bc_ctx.cipher_dec  = (nessie_bc_dec_fpt)camellia128_dec;
+       nessie_bc_ctx.cipher_genctx  = (nessie_bc_gen_fpt)camellia128_init_dummy;
        
-       camellia128_init(&s, key);;
-       camellia128_enc(&s, block);
-       if (print){
-               uart_putstr("\r\n ciphertext:\t");
-               uart_hexdump(block, 16);
-       }
-} 
-
-void test_decrypt(uint8_t *block, uint8_t *key, uint16_t keylength, bool print){
-       camellia128_ctx_t s;
-       if (print){
-               uart_putstr("\r\nCamellia (dec):\r\n key:\t\t");
-               uart_hexdump(key, keylength/8);
-               uart_putstr("\r\n ciphertext:\t");
-               uart_hexdump(block, 16);
-       }
-       camellia128_init(&s, key);
-       camellia128_dec(&s, block);
-       if (print){
-               uart_putstr("\r\n plaintext:\t");
-               uart_hexdump(block, 16);
-       }
-} 
-
-void nessie_test_iterate(uint8_t *block, uint8_t *key){
-       uint16_t i;
-       test_encrypt(block, key, 128, true);
-       test_decrypt(block, key, 128, true);
-       uart_putstr("\r\n100 times:");
-       for(i=0; i<99; ++i){
-               test_encrypt(block, key, 128, false);
-       }
-       test_encrypt(block, key, 128, true);
-       uart_putstr("\r\n1000 times:");
-       for(i=0; i<(999-100); ++i){
-               test_encrypt(block, key, 128, false);
-       }
-       test_encrypt(block, key, 128, true);
+       nessie_bc_run();
 }
 
-void nessie_test_iterate_inv(uint8_t *block, uint8_t *key){
-       uint16_t i;
-       test_decrypt(block, key, 128, true);
-       test_encrypt(block, key, 128, true);
-       uart_putstr("\r\n100 times:");
-       for(i=0; i<99; ++i){
-               test_decrypt(block, key, 128, false);
-       }
-       test_encrypt(block, key, 128, true);
-       uart_putstr("\r\n1000 times:");
-       for(i=0; i<(999-100); ++i){
-               test_decrypt(block, key, 128, false);
-       }
-       test_decrypt(block, key, 128, true);
-}
 
-prog_uint8_t ntt_test_values_in[16] = {
-       0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 
-       0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
-};
-
-prog_uint8_t ntt_test_values_out[16] = {
-       0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73, 
-       0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43
-};
-/* memcmp_P() is now implemented in avr-libc
-int memcmp_P(const void *s1, PGM_P s2, size_t n){
-       uint8_t b;
-       while(n--){
-               b = pgm_read_byte_near(s2);
-               if( *((uint8_t*)s1) != b)
-                       return(*((uint8_t*)s1)-b);
-               ++s1; ++s2;
-       }
-       return 0;
-}
-*/
-void testrun_camellia(void){
-       /* we run the NESSIE test for Camellia here see 
-        * https://www.cosic.esat.kuleuven.be/nessie/testvectors/bc/camellia/Camellia-128-128.verified.test-vectors
-        * for the vectors 
-        */
-       unsigned j, setn;
-       uint8_t block[16];
-       uint8_t key[16];
-       memcpy_P(block, ntt_test_values_in, 16);        
-       memcpy_P(key,   ntt_test_values_in, 16);
-       test_encrypt(block, key, 128, true);
-       if(memcmp_P(block, ntt_test_values_out, 16)){
-               uart_putstr("\t[FAILED]\r\n");
-               return;
-       }
-       uart_putstr("\t[OK]");
-       test_decrypt(block, key, 128, true);
-       if(memcmp_P(block, ntt_test_values_in, 16)){
-               uart_putstr("\t[FAILED]\r\n");
-               return;
-       }
-       uart_putstr("\t[OK]");
+void test_performance_cast5(void){
+       uint64_t t;
+       char str[6];
+       uint8_t key[16], data[16];
+       camellia128_ctx_t ctx;
        
-/* test set #1 & #2 */
-       setn=1;
-       for(setn=1; setn<=2; ++setn){
-               for(j=0; j<128; ++j){
-                       uart_putstr("\r\n\r\n### SET: ");
-                       uart_hexdump(&setn,1);
-                       uart_putstr(" Vector: ");
-                       uart_hexdump(&j,1);
-                       
-                       memset(block, 0, 16);
-                       memset(key, 0, 16);
-                       ((setn&0x1)?key:block)[j>>3] = 1<<(((~j)&0x7));
-                       nessie_test_iterate(block, key);
-               }
-       }
-/* test set #3 */      
-       for(j=0; j<256; ++j){
-               uart_putstr("\r\n### SET: ");
-               uart_hexdump(&setn,1);
-               uart_putstr(" Vector: ");
-               uart_hexdump(&j,1);
-               
-               memset(block, j, 16);
-               memset(key, 0, 16);
-               nessie_test_iterate(block, key);
-       }
-       setn++;
-/* test set #4 (some strange values*/
-       setn++;
-/* test ser #5 & #6 (same as 1&2 but enc and dec exchanged)*/  
-       for(setn=5; setn<=6; ++setn){
-               for(j=0; j<128; ++j){
-                       uart_putstr("\r\n\r\n### SET: ");
-                       uart_hexdump(&setn,1);
-                       uart_putstr(" Vector: ");
-                       uart_hexdump(&j,1);
-                       
-                       memset(block, 0, 16);
-                       memset(key, 0, 16);
-                       ((setn&0x1)?key:block)[j>>3] = 1<<(((~j)&0x7));
-                       nessie_test_iterate_inv(block, key);
-               }
-       }
-/* test set #7 */      
-       for(j=0; j<256; ++j){
-               uart_putstr("\r\n### SET: ");
-               uart_hexdump(&setn,1);
-               uart_putstr(" Vector: ");
-               uart_hexdump(&j,1);
-               
-               memset(block, j, 16);
-               memset(key, 0, 16);
-               nessie_test_iterate_inv(block, key);
-       }
-       setn++;
-/* test set #4 (some strange values*/
-       setn++;
+       calibrateTimer();
+       print_overhead();
+       
+       memset(key,  0, 16);
+       memset(data, 0, 16);
+       
+       startTimer(1);
+       camellia128_init(key, &ctx);
+       t = stopTimer();
+       uart_putstr_P(PSTR("\r\n\tctx-gen time: "));
+       ultoa((unsigned long)t, str, 10);
+       uart_putstr(str);
+       
+       
+       startTimer(1);
+       camellia128_enc(data, &ctx);
+       t = stopTimer();
+       uart_putstr_P(PSTR("\r\n\tencrypt time: "));
+       ultoa((unsigned long)t, str, 10);
+       uart_putstr(str);
+       
+       
+       startTimer(1);
+       camellia128_dec(data, &ctx);
+       t = stopTimer();
+       uart_putstr_P(PSTR("\r\n\tdecrypt time: "));
+       ultoa((unsigned long)t, str, 10);
+       uart_putstr(str);
+       
+       uart_putstr_P(PSTR("\r\n"));
 }
 
 
 
+/*****************************************************************************
+ *  self tests                                                                                                                          *
+ *****************************************************************************/
+
 /*****************************************************************************
  *  main                                                                                                                                        *
  *****************************************************************************/
@@ -236,16 +115,21 @@ int main (void){
        DEBUG_INIT();
        uart_putstr("\r\n");
 
-       uart_putstr("\r\n\r\nCrypto-VS (Camellia)\r\nloaded and running\r\n");
-restart:
+       uart_putstr_P(PSTR("\r\n\r\nCrypto-VS ("));
+       uart_putstr(cipher_name);
+       uart_putstr_P(PSTR(")\r\nloaded and running\r\n"));
+
+       PGM_P    u   = PSTR("nessie\0test\0performance\0");
+       void_fpt v[] = {testrun_nessie_camellia, testrun_nessie_camellia, test_performance_cast5};
+       
        while(1){ 
-               if (!getnextwordn(str,20))  {DEBUG_S("DBG: W1\r\n"); goto error;}
-               if (strcmp(str, "test")) {DEBUG_S("DBG: 1b\r\n"); goto error;}
-                       testrun_camellia();
-               goto restart;           
+               if (!getnextwordn(str,20)){DEBUG_S("DBG: W1\r\n"); goto error;}
+               if(execcommand_d0_P(str, u, v)<0){
+                       uart_putstr_P(PSTR("\r\nunknown command\r\n"));
+               }
                continue;
        error:
                uart_putstr("ERROR\r\n");
-       } /* while (1) */
+       }
 }