annotate aes.c @ 5:87c8d0a11906

make it work
author Matt Johnston <matt@ucc.asn.au>
date Wed, 05 Jun 2013 21:29:02 +0800
parents ca3a006e292c
children 439b7aaaec9e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
1 // advanced encryption standard
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
2 // Original author: Karl Malbrain, [email protected]
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
3 // Ported to Atmel AVR by: Jiri Pittner, [email protected]
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
4 //
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
5 /*
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
6 This work, including the source code, documentation
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
7 and related data, is placed into the public domain.
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
8
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
9 The original author is Karl Malbrain.
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
10
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
11 THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
12 OF ANY KIND, NOT EVEN THE IMPLIED WARRANTY OF
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
13 MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
14 ASSUMES _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
15 RESULTING FROM THE USE, MODIFICATION, OR
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
16 REDISTRIBUTION OF THIS SOFTWARE.
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
17 */
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
18
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
19 #include <stdlib.h>
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
20 #include <string.h>
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
21
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
22 #include <avr/pgmspace.h> //tables have to reside in flash memory
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
23
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
24
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
25 // AES only supports Nb=4
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
26 #define Nb 4 // number of columns in the state & expanded key
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
27
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
28 #define Nk 4 // number of columns in a key
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
29 #define Nr 10 // number of rounds in encryption
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
30
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
31 #define Sbox(i) (pgm_read_byte(&P_Sbox[i]))
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
32 const unsigned char P_Sbox[256] __attribute__ ((__progmem__)) = { // forward s-box
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
33 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
34 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
35 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
36 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
37 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
38 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
39 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
40 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
41 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
42 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
43 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
44 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
45 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
46 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
47 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
48 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
49
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
50 #define InvSbox(i) (pgm_read_byte(&P_InvSbox[i]))
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
51 const unsigned char P_InvSbox[256] __attribute__ ((__progmem__)) = { // inverse s-box
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
52 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
53 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
54 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
55 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
56 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
57 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
58 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
59 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
60 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
61 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
62 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
63 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
64 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
65 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
66 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
67 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
68
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
69 // combined Xtimes2[Sbox[]]
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
70 #define Xtime2Sbox(i) (pgm_read_byte(&P_Xtime2Sbox[i]))
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
71 const unsigned char P_Xtime2Sbox[256] __attribute__ ((__progmem__)) = {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
72 0xc6, 0xf8, 0xee, 0xf6, 0xff, 0xd6, 0xde, 0x91, 0x60, 0x02, 0xce, 0x56, 0xe7, 0xb5, 0x4d, 0xec,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
73 0x8f, 0x1f, 0x89, 0xfa, 0xef, 0xb2, 0x8e, 0xfb, 0x41, 0xb3, 0x5f, 0x45, 0x23, 0x53, 0xe4, 0x9b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
74 0x75, 0xe1, 0x3d, 0x4c, 0x6c, 0x7e, 0xf5, 0x83, 0x68, 0x51, 0xd1, 0xf9, 0xe2, 0xab, 0x62, 0x2a,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
75 0x08, 0x95, 0x46, 0x9d, 0x30, 0x37, 0x0a, 0x2f, 0x0e, 0x24, 0x1b, 0xdf, 0xcd, 0x4e, 0x7f, 0xea,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
76 0x12, 0x1d, 0x58, 0x34, 0x36, 0xdc, 0xb4, 0x5b, 0xa4, 0x76, 0xb7, 0x7d, 0x52, 0xdd, 0x5e, 0x13,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
77 0xa6, 0xb9, 0x00, 0xc1, 0x40, 0xe3, 0x79, 0xb6, 0xd4, 0x8d, 0x67, 0x72, 0x94, 0x98, 0xb0, 0x85,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
78 0xbb, 0xc5, 0x4f, 0xed, 0x86, 0x9a, 0x66, 0x11, 0x8a, 0xe9, 0x04, 0xfe, 0xa0, 0x78, 0x25, 0x4b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
79 0xa2, 0x5d, 0x80, 0x05, 0x3f, 0x21, 0x70, 0xf1, 0x63, 0x77, 0xaf, 0x42, 0x20, 0xe5, 0xfd, 0xbf,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
80 0x81, 0x18, 0x26, 0xc3, 0xbe, 0x35, 0x88, 0x2e, 0x93, 0x55, 0xfc, 0x7a, 0xc8, 0xba, 0x32, 0xe6,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
81 0xc0, 0x19, 0x9e, 0xa3, 0x44, 0x54, 0x3b, 0x0b, 0x8c, 0xc7, 0x6b, 0x28, 0xa7, 0xbc, 0x16, 0xad,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
82 0xdb, 0x64, 0x74, 0x14, 0x92, 0x0c, 0x48, 0xb8, 0x9f, 0xbd, 0x43, 0xc4, 0x39, 0x31, 0xd3, 0xf2,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
83 0xd5, 0x8b, 0x6e, 0xda, 0x01, 0xb1, 0x9c, 0x49, 0xd8, 0xac, 0xf3, 0xcf, 0xca, 0xf4, 0x47, 0x10,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
84 0x6f, 0xf0, 0x4a, 0x5c, 0x38, 0x57, 0x73, 0x97, 0xcb, 0xa1, 0xe8, 0x3e, 0x96, 0x61, 0x0d, 0x0f,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
85 0xe0, 0x7c, 0x71, 0xcc, 0x90, 0x06, 0xf7, 0x1c, 0xc2, 0x6a, 0xae, 0x69, 0x17, 0x99, 0x3a, 0x27,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
86 0xd9, 0xeb, 0x2b, 0x22, 0xd2, 0xa9, 0x07, 0x33, 0x2d, 0x3c, 0x15, 0xc9, 0x87, 0xaa, 0x50, 0xa5,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
87 0x03, 0x59, 0x09, 0x1a, 0x65, 0xd7, 0x84, 0xd0, 0x82, 0x29, 0x5a, 0x1e, 0x7b, 0xa8, 0x6d, 0x2c
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
88 };
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
89
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
90 // combined Xtimes3[Sbox[]]
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
91 #define Xtime3Sbox(i) (pgm_read_byte(&P_Xtime3Sbox[i]))
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
92 const unsigned char P_Xtime3Sbox[256] __attribute__ ((__progmem__)) = {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
93 0xa5, 0x84, 0x99, 0x8d, 0x0d, 0xbd, 0xb1, 0x54, 0x50, 0x03, 0xa9, 0x7d, 0x19, 0x62, 0xe6, 0x9a,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
94 0x45, 0x9d, 0x40, 0x87, 0x15, 0xeb, 0xc9, 0x0b, 0xec, 0x67, 0xfd, 0xea, 0xbf, 0xf7, 0x96, 0x5b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
95 0xc2, 0x1c, 0xae, 0x6a, 0x5a, 0x41, 0x02, 0x4f, 0x5c, 0xf4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3f,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
96 0x0c, 0x52, 0x65, 0x5e, 0x28, 0xa1, 0x0f, 0xb5, 0x09, 0x36, 0x9b, 0x3d, 0x26, 0x69, 0xcd, 0x9f,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
97 0x1b, 0x9e, 0x74, 0x2e, 0x2d, 0xb2, 0xee, 0xfb, 0xf6, 0x4d, 0x61, 0xce, 0x7b, 0x3e, 0x71, 0x97,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
98 0xf5, 0x68, 0x00, 0x2c, 0x60, 0x1f, 0xc8, 0xed, 0xbe, 0x46, 0xd9, 0x4b, 0xde, 0xd4, 0xe8, 0x4a,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
99 0x6b, 0x2a, 0xe5, 0x16, 0xc5, 0xd7, 0x55, 0x94, 0xcf, 0x10, 0x06, 0x81, 0xf0, 0x44, 0xba, 0xe3,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
100 0xf3, 0xfe, 0xc0, 0x8a, 0xad, 0xbc, 0x48, 0x04, 0xdf, 0xc1, 0x75, 0x63, 0x30, 0x1a, 0x0e, 0x6d,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
101 0x4c, 0x14, 0x35, 0x2f, 0xe1, 0xa2, 0xcc, 0x39, 0x57, 0xf2, 0x82, 0x47, 0xac, 0xe7, 0x2b, 0x95,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
102 0xa0, 0x98, 0xd1, 0x7f, 0x66, 0x7e, 0xab, 0x83, 0xca, 0x29, 0xd3, 0x3c, 0x79, 0xe2, 0x1d, 0x76,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
103 0x3b, 0x56, 0x4e, 0x1e, 0xdb, 0x0a, 0x6c, 0xe4, 0x5d, 0x6e, 0xef, 0xa6, 0xa8, 0xa4, 0x37, 0x8b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
104 0x32, 0x43, 0x59, 0xb7, 0x8c, 0x64, 0xd2, 0xe0, 0xb4, 0xfa, 0x07, 0x25, 0xaf, 0x8e, 0xe9, 0x18,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
105 0xd5, 0x88, 0x6f, 0x72, 0x24, 0xf1, 0xc7, 0x51, 0x23, 0x7c, 0x9c, 0x21, 0xdd, 0xdc, 0x86, 0x85,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
106 0x90, 0x42, 0xc4, 0xaa, 0xd8, 0x05, 0x01, 0x12, 0xa3, 0x5f, 0xf9, 0xd0, 0x91, 0x58, 0x27, 0xb9,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
107 0x38, 0x13, 0xb3, 0x33, 0xbb, 0x70, 0x89, 0xa7, 0xb6, 0x22, 0x92, 0x20, 0x49, 0xff, 0x78, 0x7a,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
108 0x8f, 0xf8, 0x80, 0x17, 0xda, 0x31, 0xc6, 0xb8, 0xc3, 0xb0, 0x77, 0x11, 0xcb, 0xfc, 0xd6, 0x3a
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
109 };
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
110
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
111 // modular multiplication tables
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
112 // based on:
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
113
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
114 // Xtime2[x] = (x & 0x80 ? 0x1b : 0) ^ (x + x)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
115 // Xtime3[x] = x^Xtime2[x];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
116
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
117 #define Xtime2(i) (pgm_read_byte(&P_Xtime2[i]))
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
118 const unsigned char P_Xtime2[256] __attribute__ ((__progmem__)) = {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
119 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
120 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
121 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
122 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
123 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
124 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
125 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
126 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
127 0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
128 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
129 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
130 0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
131 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
132 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
133 0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
134 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
135
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
136 #define Xtime9(i) (pgm_read_byte(&P_Xtime9[i]))
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
137 const unsigned char P_Xtime9[256] __attribute__ ((__progmem__)) = {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
138 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f, 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
139 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf, 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
140 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04, 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
141 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94, 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
142 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49, 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
143 0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9, 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
144 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72, 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
145 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2, 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
146 0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3, 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
147 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43, 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
148 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8, 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
149 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78, 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
150 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5, 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
151 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35, 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
152 0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e, 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
153 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e, 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
154
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
155 #define XtimeB(i) (pgm_read_byte(&P_XtimeB[i]))
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
156 const unsigned char P_XtimeB[256] __attribute__ ((__progmem__)) = {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
157 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31, 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
158 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81, 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
159 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a, 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
160 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa, 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
161 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7, 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
162 0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77, 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
163 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc, 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
164 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c, 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
165 0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6, 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
166 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76, 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
167 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd, 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
168 0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d, 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
169 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30, 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
170 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80, 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
171 0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b, 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
172 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb, 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
173
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
174 #define XtimeD(i) (pgm_read_byte(&P_XtimeD[i]))
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
175 const unsigned char P_XtimeD[256] __attribute__ ((__progmem__)) = {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
176 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23, 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
177 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3, 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
178 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98, 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
179 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48, 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
180 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e, 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
181 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e, 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
182 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5, 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
183 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25, 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
184 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9, 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
185 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29, 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
186 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42, 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
187 0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92, 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
188 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94, 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
189 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44, 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
190 0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f, 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
191 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff, 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
192
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
193 #define XtimeE(i) (pgm_read_byte(&P_XtimeE[i]))
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
194 const unsigned char P_XtimeE[256] __attribute__ ((__progmem__)) = {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
195 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a, 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
196 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca, 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
197 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1, 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
198 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11, 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
199 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87, 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
200 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67, 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
201 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c, 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
202 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc, 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
203 0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b, 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
204 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b, 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
205 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0, 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
206 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50, 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
207 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6, 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
208 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26, 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
209 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d, 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
210 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd, 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
211
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
212 // exchanges columns in each of 4 rows
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
213 // row0 - unchanged, row1- shifted left 1,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
214 // row2 - shifted left 2 and row3 - shifted left 3
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
215 void ShiftRows (unsigned char *state)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
216 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
217 unsigned char tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
218
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
219 // just substitute row 0
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
220 state[0] = Sbox(state[0]), state[4] = Sbox(state[4]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
221 state[8] = Sbox(state[8]), state[12] = Sbox(state[12]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
222
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
223 // rotate row 1
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
224 tmp = Sbox(state[1]), state[1] = Sbox(state[5]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
225 state[5] = Sbox(state[9]), state[9] = Sbox(state[13]), state[13] = tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
226
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
227 // rotate row 2
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
228 tmp = Sbox(state[2]), state[2] = Sbox(state[10]), state[10] = tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
229 tmp = Sbox(state[6]), state[6] = Sbox(state[14]), state[14] = tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
230
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
231 // rotate row 3
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
232 tmp = Sbox(state[15]), state[15] = Sbox(state[11]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
233 state[11] = Sbox(state[7]), state[7] = Sbox(state[3]), state[3] = tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
234 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
235
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
236 // restores columns in each of 4 rows
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
237 // row0 - unchanged, row1- shifted right 1,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
238 // row2 - shifted right 2 and row3 - shifted right 3
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
239 void InvShiftRows (unsigned char *state)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
240 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
241 unsigned char tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
242
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
243 // restore row 0
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
244 state[0] = InvSbox(state[0]), state[4] = InvSbox(state[4]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
245 state[8] = InvSbox(state[8]), state[12] = InvSbox(state[12]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
246
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
247 // restore row 1
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
248 tmp = InvSbox(state[13]), state[13] = InvSbox(state[9]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
249 state[9] = InvSbox(state[5]), state[5] = InvSbox(state[1]), state[1] = tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
250
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
251 // restore row 2
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
252 tmp = InvSbox(state[2]), state[2] = InvSbox(state[10]), state[10] = tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
253 tmp = InvSbox(state[6]), state[6] = InvSbox(state[14]), state[14] = tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
254
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
255 // restore row 3
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
256 tmp = InvSbox(state[3]), state[3] = InvSbox(state[7]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
257 state[7] = InvSbox(state[11]), state[11] = InvSbox(state[15]), state[15] = tmp;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
258 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
259
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
260 // recombine and mix each row in a column
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
261 void MixSubColumns (unsigned char *state)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
262 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
263 unsigned char tmp[4 * Nb];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
264
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
265 // mixing column 0
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
266 tmp[0] = Xtime2Sbox(state[0]) ^ Xtime3Sbox(state[5]) ^ Sbox(state[10]) ^ Sbox(state[15]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
267 tmp[1] = Sbox(state[0]) ^ Xtime2Sbox(state[5]) ^ Xtime3Sbox(state[10]) ^ Sbox(state[15]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
268 tmp[2] = Sbox(state[0]) ^ Sbox(state[5]) ^ Xtime2Sbox(state[10]) ^ Xtime3Sbox(state[15]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
269 tmp[3] = Xtime3Sbox(state[0]) ^ Sbox(state[5]) ^ Sbox(state[10]) ^ Xtime2Sbox(state[15]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
270
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
271 // mixing column 1
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
272 tmp[4] = Xtime2Sbox(state[4]) ^ Xtime3Sbox(state[9]) ^ Sbox(state[14]) ^ Sbox(state[3]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
273 tmp[5] = Sbox(state[4]) ^ Xtime2Sbox(state[9]) ^ Xtime3Sbox(state[14]) ^ Sbox(state[3]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
274 tmp[6] = Sbox(state[4]) ^ Sbox(state[9]) ^ Xtime2Sbox(state[14]) ^ Xtime3Sbox(state[3]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
275 tmp[7] = Xtime3Sbox(state[4]) ^ Sbox(state[9]) ^ Sbox(state[14]) ^ Xtime2Sbox(state[3]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
276
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
277 // mixing column 2
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
278 tmp[8] = Xtime2Sbox(state[8]) ^ Xtime3Sbox(state[13]) ^ Sbox(state[2]) ^ Sbox(state[7]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
279 tmp[9] = Sbox(state[8]) ^ Xtime2Sbox(state[13]) ^ Xtime3Sbox(state[2]) ^ Sbox(state[7]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
280 tmp[10] = Sbox(state[8]) ^ Sbox(state[13]) ^ Xtime2Sbox(state[2]) ^ Xtime3Sbox(state[7]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
281 tmp[11] = Xtime3Sbox(state[8]) ^ Sbox(state[13]) ^ Sbox(state[2]) ^ Xtime2Sbox(state[7]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
282
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
283 // mixing column 3
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
284 tmp[12] = Xtime2Sbox(state[12]) ^ Xtime3Sbox(state[1]) ^ Sbox(state[6]) ^ Sbox(state[11]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
285 tmp[13] = Sbox(state[12]) ^ Xtime2Sbox(state[1]) ^ Xtime3Sbox(state[6]) ^ Sbox(state[11]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
286 tmp[14] = Sbox(state[12]) ^ Sbox(state[1]) ^ Xtime2Sbox(state[6]) ^ Xtime3Sbox(state[11]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
287 tmp[15] = Xtime3Sbox(state[12]) ^ Sbox(state[1]) ^ Sbox(state[6]) ^ Xtime2Sbox(state[11]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
288
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
289 memcpy (state, tmp, sizeof(tmp));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
290 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
291
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
292 // restore and un-mix each row in a column
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
293 void InvMixSubColumns (unsigned char *state)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
294 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
295 unsigned char tmp[4 * Nb];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
296 int i;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
297
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
298 // restore column 0
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
299 tmp[0] = XtimeE(state[0]) ^ XtimeB(state[1]) ^ XtimeD(state[2]) ^ Xtime9(state[3]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
300 tmp[5] = Xtime9(state[0]) ^ XtimeE(state[1]) ^ XtimeB(state[2]) ^ XtimeD(state[3]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
301 tmp[10] = XtimeD(state[0]) ^ Xtime9(state[1]) ^ XtimeE(state[2]) ^ XtimeB(state[3]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
302 tmp[15] = XtimeB(state[0]) ^ XtimeD(state[1]) ^ Xtime9(state[2]) ^ XtimeE(state[3]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
303
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
304 // restore column 1
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
305 tmp[4] = XtimeE(state[4]) ^ XtimeB(state[5]) ^ XtimeD(state[6]) ^ Xtime9(state[7]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
306 tmp[9] = Xtime9(state[4]) ^ XtimeE(state[5]) ^ XtimeB(state[6]) ^ XtimeD(state[7]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
307 tmp[14] = XtimeD(state[4]) ^ Xtime9(state[5]) ^ XtimeE(state[6]) ^ XtimeB(state[7]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
308 tmp[3] = XtimeB(state[4]) ^ XtimeD(state[5]) ^ Xtime9(state[6]) ^ XtimeE(state[7]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
309
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
310 // restore column 2
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
311 tmp[8] = XtimeE(state[8]) ^ XtimeB(state[9]) ^ XtimeD(state[10]) ^ Xtime9(state[11]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
312 tmp[13] = Xtime9(state[8]) ^ XtimeE(state[9]) ^ XtimeB(state[10]) ^ XtimeD(state[11]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
313 tmp[2] = XtimeD(state[8]) ^ Xtime9(state[9]) ^ XtimeE(state[10]) ^ XtimeB(state[11]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
314 tmp[7] = XtimeB(state[8]) ^ XtimeD(state[9]) ^ Xtime9(state[10]) ^ XtimeE(state[11]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
315
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
316 // restore column 3
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
317 tmp[12] = XtimeE(state[12]) ^ XtimeB(state[13]) ^ XtimeD(state[14]) ^ Xtime9(state[15]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
318 tmp[1] = Xtime9(state[12]) ^ XtimeE(state[13]) ^ XtimeB(state[14]) ^ XtimeD(state[15]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
319 tmp[6] = XtimeD(state[12]) ^ Xtime9(state[13]) ^ XtimeE(state[14]) ^ XtimeB(state[15]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
320 tmp[11] = XtimeB(state[12]) ^ XtimeD(state[13]) ^ Xtime9(state[14]) ^ XtimeE(state[15]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
321
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
322 for( i=0; i < 4 * Nb; i++ )
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
323 state[i] = InvSbox(tmp[i]);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
324 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
325
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
326 // encrypt/decrypt columns of the key
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
327 // n.b. you can replace this with
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
328 // byte-wise xor if you wish.
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
329
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
330 void AddRoundKey (unsigned *state, unsigned *key)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
331 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
332 int idx;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
333
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
334 for( idx = 0; idx < 4; idx++ )
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
335 state[idx] ^= key[idx];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
336 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
337
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
338 unsigned char Rcon[11] = {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
339 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
340
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
341 // produce Nb bytes for each round
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
342 void ExpandKey (unsigned char *key, unsigned char *expkey)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
343 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
344 unsigned char tmp0, tmp1, tmp2, tmp3, tmp4;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
345 unsigned idx;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
346
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
347 memcpy (expkey, key, Nk * 4);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
348
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
349 for( idx = Nk; idx < Nb * (Nr + 1); idx++ ) {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
350 tmp0 = expkey[4*idx - 4];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
351 tmp1 = expkey[4*idx - 3];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
352 tmp2 = expkey[4*idx - 2];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
353 tmp3 = expkey[4*idx - 1];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
354 if( !(idx % Nk) ) {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
355 tmp4 = tmp3;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
356 tmp3 = Sbox(tmp0);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
357 tmp0 = Sbox(tmp1) ^ Rcon[idx/Nk];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
358 tmp1 = Sbox(tmp2);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
359 tmp2 = Sbox(tmp4);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
360 } else if( Nk > 6 && idx % Nk == 4 ) {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
361 tmp0 = Sbox(tmp0);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
362 tmp1 = Sbox(tmp1);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
363 tmp2 = Sbox(tmp2);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
364 tmp3 = Sbox(tmp3);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
365 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
366
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
367 expkey[4*idx+0] = expkey[4*idx - 4*Nk + 0] ^ tmp0;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
368 expkey[4*idx+1] = expkey[4*idx - 4*Nk + 1] ^ tmp1;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
369 expkey[4*idx+2] = expkey[4*idx - 4*Nk + 2] ^ tmp2;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
370 expkey[4*idx+3] = expkey[4*idx - 4*Nk + 3] ^ tmp3;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
371 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
372 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
373
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
374 // encrypt one 128 bit block
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
375 void Encrypt (unsigned char *in, unsigned char *expkey, unsigned char *out)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
376 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
377 unsigned char state[Nb * 4];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
378 unsigned round;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
379
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
380 memcpy (state, in, Nb * 4);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
381 AddRoundKey ((unsigned *)state, (unsigned *)expkey);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
382
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
383 for( round = 1; round < Nr + 1; round++ ) {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
384 if( round < Nr )
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
385 MixSubColumns (state);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
386 else
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
387 ShiftRows (state);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
388
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
389 AddRoundKey ((unsigned *)state, (unsigned *)expkey + round * Nb);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
390 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
391
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
392 memcpy (out, state, sizeof(state));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
393 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
394
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
395 void Decrypt (unsigned char *in, unsigned char *expkey, unsigned char *out)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
396 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
397 unsigned char state[Nb * 4];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
398 unsigned round;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
399
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
400 memcpy (state, in, sizeof(state));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
401
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
402 AddRoundKey ((unsigned *)state, (unsigned *)expkey + Nr * Nb);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
403 InvShiftRows(state);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
404
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
405 for( round = Nr; round--; )
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
406 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
407 AddRoundKey ((unsigned *)state, (unsigned *)expkey + round * Nb);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
408 if( round )
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
409 InvMixSubColumns (state);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
410 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
411
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
412 memcpy (out, state, sizeof(state));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
413 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
414
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
415
5
87c8d0a11906 make it work
Matt Johnston <matt@ucc.asn.au>
parents: 3
diff changeset
416 #if 0
87c8d0a11906 make it work
Matt Johnston <matt@ucc.asn.au>
parents: 3
diff changeset
417
3
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
418 /*avr specific routines*/
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
419 #include "backward.h"
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
420 #include <avr/io.h>
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
421 #include <avr/pgmspace.h>
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
422 #include <avr/eeprom.h>
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
423 #include <avr/interrupt.h>
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
424 #include <avr/sleep.h>
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
425
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
426
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
427
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
428 #if defined(at90s2313) || defined(at90s8535)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
429 #else
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
430 #define ATmega
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
431 #endif
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
432
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
433 #ifdef ATmega
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
434 #define USR UCSRA
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
435 #endif
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
436
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
437
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
438
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
439 void printP (PGM_P string){
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
440 char c;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
441 c=pgm_read_byte(string);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
442 while (c) {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
443 loop_until_bit_is_set(USR, UDRE);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
444 UDR = c;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
445 c=pgm_read_byte(++string);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
446 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
447 return;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
448 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
449
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
450
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
451
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
452 void print (const char *string){
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
453 while (*string) {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
454 loop_until_bit_is_set(USR, UDRE);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
455 UDR = *string++;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
456 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
457 return;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
458 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
459
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
460 void scan(char *string){
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
461 char c;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
462 do {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
463 do {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
464 loop_until_bit_is_set(USR, RXC);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
465 c =UDR;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
466 } while bit_is_set(USR, FE);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
467 *string++ = c;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
468 //echo the character
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
469 loop_until_bit_is_set(USR, UDRE);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
470 UDR = c;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
471 } while ( c != '\r' );
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
472 loop_until_bit_is_set(USR, UDRE);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
473 UDR = '\n';
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
474 string[-1]=0;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
475 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
476
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
477
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
478 //UART initialize
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
479 #ifdef ATmega
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
480 #define UCR UCSRB
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
481 #define UART_INIT(baud) { \
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
482 UBRRH=0; \
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
483 UBRRL= (XTAL/baud+15)/16-1; \
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
484 UCSRB=(1<<TXEN)|(1<<RXEN); \
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
485 UCSRC=(1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)|(1<<USBS); }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
486 #else
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
487 #define UART_INIT(baud) { \
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
488 UBRR = (XTAL/baud+15)/16-1; \
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
489 sbi(UCR, TXEN); \
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
490 sbi(UCR, RXEN); \
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
491 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
492 #endif
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
493
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
494 #define itoa10(N,S) itoa(N,S,10)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
495 #define itoa16(N,S) itoa(N,S,16)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
496
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
497
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
498 //DEMO
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
499
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
500 unsigned char sampleout[16];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
501
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
502
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
503 unsigned char samplekey[] = {0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
504 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
505
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
506 unsigned char samplein[] = {0x32, 0x43, 0xf6, 0xa8, 0x88, 0x5a, 0x30, 0x8d, 0x31,
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
507 0x31, 0x98, 0xa2, 0xe0, 0x37, 0x07, 0x34};
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
508
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
509 #define BAUD 115200
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
510
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
511 int main(void)
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
512 {
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
513 UART_INIT(BAUD);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
514
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
515 unsigned char expkey[4 * Nb * (Nr + 1)];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
516 unsigned char i;
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
517 char c[8];
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
518
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
519 printP(PSTR("Original: "));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
520 for( i = 0; i < 16; i++ ) {itoa16(samplein[i],c);print(c); print(" ");}
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
521 printP(PSTR("\n"));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
522
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
523 ExpandKey (samplekey, expkey);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
524 Encrypt (samplein, expkey, sampleout);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
525
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
526 printP(PSTR("Encrypted: "));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
527 for( i = 0; i < 16; i++ ) {itoa16(sampleout[i],c);print(c); print(" ");}
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
528 printP(PSTR("\n"));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
529
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
530 Decrypt (sampleout, expkey, samplein);
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
531
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
532 printP(PSTR("Decrypted: "));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
533
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
534 for( i = 0; i < 16; i++ ) {itoa16(samplein[i],c);print(c); print(" ");}
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
535 printP(PSTR("\n"));
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
536 }
ca3a006e292c add aes.c from http://www.pittnerovi.com/jiri/hobby/electronics/crypto/
Matt Johnston <matt@ucc.asn.au>
parents:
diff changeset
537
5
87c8d0a11906 make it work
Matt Johnston <matt@ucc.asn.au>
parents: 3
diff changeset
538
87c8d0a11906 make it work
Matt Johnston <matt@ucc.asn.au>
parents: 3
diff changeset
539 #endif