Difference between revisions of "AES-256"
m (1 revision) |
|
(No difference)
|
Latest revision as of 16:51, 11 September 2015
- A byte-oriented AES-256 implementation by Ilya O. Levin
- Arduino implementation by Chris van Marle
- Python implementation by Roberto Ostinelli
- 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.
- /
- include <stdlib.h>
- include <stdio.h>
- include "aes256.h"
- 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>