* Reenable aes' block_counter option
authorDavor Ocelic <docelic@spinlock.hr>
Wed, 28 Jan 2009 20:01:58 +0000 (21:01 +0100)
committerDavor Ocelic <docelic@spinlock.hr>
Wed, 28 Jan 2009 20:01:58 +0000 (21:01 +0100)
* Some smaller comment updates

TODO
src/Makefile
src/aes.c
src/aes.h
src/config.h

diff --git a/TODO b/TODO
index 7528d63..de88a08 100644 (file)
--- a/TODO
+++ b/TODO
@@ -2,3 +2,5 @@
 * keeper wants to build gkeeper even if gtk not there and configure 
   says it wont be built
 
+* tea/aes have nonworking examples
+
index c953ee4..1df3c31 100644 (file)
@@ -18,7 +18,7 @@ PORT=/dev/ttyS0
 
 # Size of the external EEPROM on the smartcard. Atmel's sizes are
 # usually in kilobits (i.e. AT90(256) and 24C256 are both 32 KByte).
-# Here we set it in kilobytes, so divide by 8.
+# Here we set it in kilobytes, so divide chip spec by 8.
 # 00: none, 01: 16KB, 02: 32KB, 03: 64KB, 04: 128KB,
 # 05: 256KB, 06: 512KB, 07: 1024KB, 08: 2048KB, FF: unspec.,
 EXT_EEPROM_SIZE=0x02
index 25dbb6e..2a49e32 100644 (file)
--- a/src/aes.c
+++ b/src/aes.c
@@ -57,9 +57,9 @@ static const CODE iu8 inverse_substitution_table_[256] = {
 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D,
 };
 
-void aes_enc( iu8 *v, iu8 *k ) //, iu32 data_length )
+void aes_enc( iu8 *v, iu8 *k, iu32 data_length )
 {
-       //iu32 block_counter;
+       iu32 block_counter;
        iu8 *state;
        iu8 round_key[16];
        iu8 round_constant[4] = {0x01, 0x00, 0x00, 0x00};
@@ -73,9 +73,9 @@ void aes_enc( iu8 *v, iu8 *k ) //, iu32 data_length )
     k[8], k[9], k[10], k[11], k[12], k[13], k[14], k[15]);
 #endif
 
-       //for(block_counter=0 ; block_counter < data_length ; block_counter+=16)
-       //{
-               state = v; //+block_counter;
+       for(block_counter=0 ; block_counter < data_length ; block_counter+=16)
+       {
+               state = v+block_counter;
                round_constant[0] = 0x01;
 
                for(counter=0 ; counter<16 ; counter++)
@@ -95,13 +95,13 @@ void aes_enc( iu8 *v, iu8 *k ) //, iu32 data_length )
 
                for(counter=0 ; counter<16 ; counter++)
                        state[counter] = state[counter]^round_key[counter];
-       //}
+       }
 
 }
 
-void aes_dec( iu8 *v, iu8 *k) //, iu32 data_length )
+void aes_dec( iu8 *v, iu8 *k, iu32 data_length )
 {
-       //iu32 block_counter;
+       iu32 block_counter;
        iu8 *state;
        iu8 round_key[16];
        iu8 round_constant[4] = {0x01, 0x00, 0x00, 0x00};
@@ -115,9 +115,9 @@ void aes_dec( iu8 *v, iu8 *k) //, iu32 data_length )
     k[8], k[9], k[10], k[11], k[12], k[13], k[14], k[15]);
 #endif
 
-       //for(block_counter=0 ; block_counter < data_length ; block_counter+=16)
-       //{
-               state = v; //+block_counter;
+       for(block_counter=0 ; block_counter < data_length ; block_counter+=16)
+       {
+               state = v+block_counter;
                round_constant[0] = 0x01;
                calculateLastRoundKey(round_key, k, round_constant);
 
@@ -134,7 +134,7 @@ void aes_dec( iu8 *v, iu8 *k) //, iu32 data_length )
 
                inverseShiftRows(state);
                inverseSubstituteBytesAndAddRoundKey(state, k);
-       //}
+       }
 }
 
 void addRoundKeyAndSubstituteBytes(iu8 *state, iu8 *round_key)
@@ -290,7 +290,7 @@ int main() {
        clock_t elapsed;
 
        memcpy( enc, inp, 8 );
-       aes_enc( enc, key );
+       aes_enc( enc, key, 8 );
 
 #ifdef DEBUG
   printf( "ckpoint( %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX %.2hX )\n",
@@ -300,7 +300,7 @@ int main() {
        printf((memcmp(enc, chk, 8) == 0) ? "encryption OK!\n" : "encryption failure!\n");
 #if CONF_WITH_DECRYPT==1
        memcpy( dec, chk, 8 );
-       aes_dec( dec, key );
+       aes_dec( dec, key, 8 );
        printf((memcmp(dec, inp, 8) == 0) ? "decryption OK!\n" : "decryption failure!\n");
 #endif
 
index 5508a8e..21a2682 100644 (file)
--- a/src/aes.h
+++ b/src/aes.h
@@ -23,7 +23,7 @@
        \param v Array of two long values containing the data block.
        \param k Array of four long values containing the key.
 */
-void aes_enc( iu8 *v, iu8 *k); //, iu32 v_len );
+void aes_enc( iu8 *v, iu8 *k, iu32 v_len );
 
 /*! \brief AES decryption function.
 
@@ -33,7 +33,7 @@ void aes_enc( iu8 *v, iu8 *k); //, iu32 v_len );
        \param v Array of two long values containing the data block.
        \param k Array of four long values containing the key.
 */
-void aes_dec( iu8 *v, iu8 *k); //, iu32 v_len );
+void aes_dec( iu8 *v, iu8 *k, iu32 v_len );
 
 void addRoundKeyAndSubstituteBytes(iu8 *, iu8 *);
 void shiftRows(iu8 *);
index 37aaa18..7e3961b 100644 (file)
  * Type of target chip and smart card
  *
  * AVR-based smartcards have the following elements:
- *   RAM, ROM (Flash) and internal EEPROM on the processor chip itself.
- *   External EEPROM on additional chip (24LC64, 24LC128, 256, 512, 1024).
- *   (External EEPROM is currently completely unused).
+ *   1) RAM, ROM (Flash) and internal EEPROM on the processor chip itself.
+ *   2) External EEPROM on additional chip (24LC64, 24LC128, 256, 512, 1024).
  *
  * The following data needs to be defined for each chip:
  *
  *  ENDIAN_LITTLE    If architecture is little endian
- *  INT_EEPROM_SIZE  Internal EEPROM size in bytes (0x200=512B, 0x80=128B...)
+ *  INT_EEPROM_SIZE  Internal EEPROM size in bytes (0x80=128B, 0x200=512B...)
  *  RAM_SIZE         RAM size in bytes (0x200 = 512 B, 0x400 = 1 KB...)
  *  CHIP             Chip ID, voluntarily assigned by us and returned as
  *                     part of card's ATR signature. Scheme is as follows:
  *                       10: 16F84 (not supported)
  *                       11: 16F876 (not supported)
  *                       FF: unspec. (running on 386 emulator)
- *  EXT_EEPROM_SIZE  External EEPROM size in Kbytes. Unused, but returned as
- *                     part of card's ATR signature. The defines here are 
- *                     commented because this information is not part of
- *                     the chip (can vary between smartcards even though
- *                     the processor chip may be the same), so it is set as 
- *                     its own option in the Makefile. Scheme is as follows:
- *                       00: none
- *                       01: 16 KB
- *                       02: 32 KB
- *                       03: 64 KB
- *                       04: 128 KB
- *                       05: 256 KB
- *                       06: 512 KB
- *                       07: 1024 KB
- *                       08: 2048 KB
- *                       FF: unspec.
  *  ARCH             Architecture type. Needed for assembler code and returned
  *                     as part of card's ATR signature. (Note that this setting
  *                     is unrelated and different to Makefile's ARCH=).
 #define INT_EEPROM_SIZE    0x200
 #define RAM_SIZE           0x200
 #define CHIP               0x01
-//#define EXT_EEPROM_SIZE    0x02
 #define ARCH               avr2
 
 #elif defined(__AVR_AT90S8535__)
 #define INT_EEPROM_SIZE    0x200
 #define RAM_SIZE           0x200
 #define CHIP               0x01
-//#define EXT_EEPROM_SIZE    0x03
 #define ARCH               avr2
 
 #elif defined(__AVR_AT90S2323__)
 #define INT_EEPROM_SIZE    0x80
 #define RAM_SIZE           0x80
 #define CHIP               0x00
-//#define EXT_EEPROM_SIZE    0x03
 #define ARCH               avr2
 
 #elif defined(__AVR_ATmega161__)
 #define INT_EEPROM_SIZE    0x200
 #define RAM_SIZE           0x400
 #define CHIP               0x02
-//#define EXT_EEPROM_SIZE    0x03
 #define ARCH               avr5
 
 #elif defined(__AVR_ATmega163__)
 #define INT_EEPROM_SIZE    0x200
 #define RAM_SIZE           0x400
 #define CHIP               0x03
-//#define EXT_EEPROM_SIZE    0x03
 #define ARCH               avr5
 
 #elif defined(__i386__)
 #define INT_EEPROM_SIZE    0x200
 #define RAM_SIZE           0x200
 #define CHIP               0xFF
-//#define EXT_EEPROM_SIZE    0xFF
 
 #else
 #error Unknown destination platform. Use proper ARCH type in Makefile.