AES-256

From emboxit
Jump to: navigation, search

  • Original code: demo.c

<cpp> /*

  • Byte-oriented AES-256 implementation.
  • All lookup tables replaced with 'on the fly' calculations.
  • Copyright (c) 2007 Ilya O. Levin, http://www.literatecode.com
  • Permission to use, copy, modify, and distribute this software for any
  • purpose with or without fee is hereby granted, provided that the above
  • copyright notice and this permission notice appear in all copies.
  • THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  • WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  • MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  • ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  • WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  • ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  • OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  • /
  1. include <stdlib.h>
  2. include <stdio.h>
  3. include "aes256.h"
  1. define DUMP(s, i, buf, sz) {printf(s); \
                             for (i = 0; i < (sz);i++)    \
                                 printf("%02x ", buf[i]); \
                             printf("\n");}

int main (int argc, char *argv[]) {

   aes256_context ctx; 
   uint8_t key[32];
   uint8_t buf[16], i;
   /* put a test vector */
   for (i = 0; i < sizeof(buf);i++) buf[i] = i * 16 + i;
   for (i = 0; i < sizeof(key);i++) key[i] = i;
   DUMP("txt: ", i, buf, sizeof(buf));
   DUMP("key: ", i, key, sizeof(key));
   printf("---\n");
   aes256_init(&ctx, key);
   aes256_encrypt_ecb(&ctx, buf);
   DUMP("enc: ", i, buf, sizeof(buf));
   printf("tst: 8e a2 b7 ca 51 67 45 bf ea fc 49 90 4b 49 60 89\n");
   aes256_init(&ctx, key);
   aes256_decrypt_ecb(&ctx, buf);
   DUMP("dec: ", i, buf, sizeof(buf));
   aes256_done(&ctx);
   return 0;

} /* main */

</cpp>



  • Imported to mbed and compiled successfully without any change, except demo.c renamed to main.c


<cpp> Hello Nikos,

Yes, this is the way it suppose to work.

To encrypt a large data array, you should use the given block encryption in a proper encryption mode. Choosing a mode and implementing it is entirely up to you and your application.

You may learn more about encryption modes at http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation

Best regards, Ilya

On Wed, Jul 25, 2012 at 1:34 PM, nikos.chalikias <nikos.chalikias@googlemail.com> wrote: > Hello Ilya, > > Regarding http://www.literatecode.com/aes256 > > I tested your code to mbed platform and it works 'as-is' > > I then tried to encrypt larger array of 4096 bytes, but I found out that > only the first 16 bytes are encrypted. > > - Is this what you would expect? > > - I am now changing my code to handle the array at 16-byte pieces, but I am > not sure that this is the right thing to do! > > Please be so kind and advise > > Regards, > Nikos Chalikias </cpp>